+17.86
Рейтинг
47.25
Сила

Илья

  • avatar emmy
  • 0
Я заметил, что со зрением у вас большая беда, то после дива script не заметите, то inline js у себя не видите, то не замечаете проблему в смешении php, js и html.
Размер? Да уж, тут обойдусь без слов, опять видна ваша проблема со зрением, вот скриншот, не стал обводить размер текста, надеюсь увидите


расскажите мне про это: 15 кб отдавать 3 секунды.
Раз не понятно, разъясню про три секунды, — это было к тому, что не стоит вот так, как вы забивать везде на производительность, казалось бы, даже немного, в последствии это выльется в серьезный оверхед. Хотя один только ваш плагин на это забивает не немного, а очень даже прилично.

тебе не стыдно писать такое и пытаться убедить меня в этом?
Знаете, мне стыдно за Вас, совсем не за себя.

Коль знаешь ты руби, что же ты на пхп делаешь-то, человек?
PHP опять не входит в привилегированную касту? Или что?
Знаю руби и люблю LS, сейчас работаю над высоконагруженным проектом на php (~100 миллионов хитов в день). До этого был опыт и с ruby/ror и с другими проектами на php.
  • avatar emmy
  • 0
Внедрять многократно одинаковый inline js, который значительно увеличивает вес страницы и время рендера и совсем не дает совместимости или более того вешать live на какой-нибудь родительский элемент, который не подгрузят по ajax — это откровенные костыли.
Вы понимаете как работает .live? Причем тут именно нагрузка на клиенте? Здесь важна скорость работы с интерфейсом, если после клика вы в течении даже 50 ms ждете ответа из-за не оптимизированной работы с dom, то это ужасно и раздражает. Можно сделать гораздо правильнее и лучше — забиндить на хук стороннего плагина, подгружающего что-то по ajax, свой метод, который инициализирует определенную функциональность, например
ls.hook.add('ls_super_plugin_on_load_topics', ls.activity.initActivityHandler);

Одна красивая строчка кода, а получаем отличную совместимость и производительность. Чего не возможно сделать с вашим плагином.

Изменения в dom это нормально, я и не говорил другого, только одно но — если не менять те элементы, которые принадлежат чужим плагинам и отношения к вам не имеют. Из пушки по воробьям, как делаете вы, меняя все подряд, это не нормальная работа с dom.

Другое русло? Да тут оно одно, я же говорю конкретными фактами с примерами вашего кода. А ваш «компетентный» ответ слился только к одной фразе «мое решение». А, понятно все стало, раз ваше решение, — значит правильное, точно, извиняюсь :)

По поводу перерасхода ресурсов — это не мое мнение, а, к сожалению, просто факт. Попробую разжевать:
У нас есть два внешне одинаковых сайта, у одного html страничка весит 100кб, а у другого 150кб. Они хостятся на одинаковых серверах с бесконечным каналом и бесконечной памятью, кароче с бесконечными ресурсами, за исключением процессора. Каждая страница перед отдачей клиенту gzip-уетя.
Внимание, вопрос: какой сайт ляжет раньше при равномерно увеличивающейся посещаемости?
  • avatar emmy
  • 0
:) Остановите эту планету, я сойду.

Голословный, однако, комментарий. Впрочем, все понятно, вот вам несколько тем для размышлений — с каких же пор компетентность это:
1. Жестко смешивать логику трех разных языков в одном файле.
2. Добавлять на страницу одни и те же куски кода, в смысле выполняющие одинаковые действия, буквально 10 раз.
3. Парсить по регулярке на каждый запрос огромный объём данных, пусть даже и на клиенте.
4. Говорить, что даже тяжелый запрос к mysql с кучей join'ов будет не медленнее запроса к sphinx.
5. Пренебрегать очевидным перерасходом ресурсов.
  • avatar emmy
  • 0
Это абсолютно ничего не меняет, или разработчики, по вашему, это такая привилегированная каста мнение которых нужно принимать во внимание и только?

P.S. А какой толк Вам писать было бы, если Вы даже здесь относитесь к объективным замечаниям двух разработчиков наплевательски? Впрочем, также наплевательски как к 40%-ному оверхеду по размеру html страницы.
  • avatar emmy
  • 0
Пустой div? И только? Вы издеваетесь? script вы принципиально не замечаете?
~4 кб весит вышеприведенный код. Но по этому трудно судить, потому что такие конструкции {foreach from=$oMP3s item=oMP3} сделают его еще больше. Итого минимум 40кб оверхеда.
Пол мегабайта весят плохие страницы, даже главная mail.ru и то весит 200кб, если получить на ней оверхед в 20% по размеру страницы, то нагрузка на бекенд увеличится в несколько раз.
А также посмотрите — главная livestreet.ru весит 100кб. Ваш код сделает ее в 1.5 раза больше, во столько же раз уменьшится скорость обработки шаблона сервером, во столько же раз увеличится потребление памяти и время загрузки сайта.

Можно, конечно, плевать на все это и в конце концов прийти к 3 секундам на отдачу контента.

Эта версия была новейшей месяц назад — 15 сентября, не думаю что там координально что-то поменялось, учитывая ваш ответ на первый комментарий sersar .
  • avatar emmy
  • 0
Никто не придумывает, ради конкретного кода решил поискать по истории своей почты и нашел в переписке файлик, который я прислал клиенту, чтобы он его заменил в вашем плагине.
Вот его код:
  <!-- Audiorecordslight plugin -->
  <div id="ARL_AudioPlace{$oTopic->getId()}"></div>
  <script>
    jQuery (document).ready (function ($) {
      (function () {
        //
        // For attached files and for links in topics
        //
        var ARL_AudioBlock{$oTopic->getId()} = $ ('<div />', {
          'class': 'AudioPlayersLightContainer',
          'html':
            '{assign var="oMP3s" value=$oTopic->getMP3FilesARL()}' +
            '{if $oMP3s}' +
              '{foreach from=$oMP3s item=oMP3}' +
                '<div class="OneAudioPlayerLight">' +
                  '<object width="{$oConfig-><param name="wmode" value="opaque"></param><param name="wmode" value="opaque"></param>GetValue("plugin.audiorecordslight.Flash_Player_Width")}" height="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Height")}" align="middle">' +
                  '<param name="movie" value="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Filename")}"></param>' +
                  '<param name="allowScriptAccess" value="always"></param>' +
                  '' +
                  '<param name="quality" value="best"></param>' +
                  '<param name="flashvars" value="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Flashvars_AudioParam")}={$oMP3}"></param>' +
                  '<embed src="{$oConfig-></embed></embed>GetValue("plugin.audiorecordslight.Flash_Player_Filename")}" width="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Width")}" height="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Height")}" menu="false" quality="best" align="middle" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Flashvars_AudioParam")}={$oMP3}" wmode="transparent"></embed>' +
                  '</object>' +
                '</div>' +
              '{/foreach}' +
            '{/if}'
        });

        var ARL_Place{$oTopic->getId()} = $ ('#ARL_AudioPlace{$oTopic->getId()}').closest ('.topic').children ('div.topic-content');

        if (ARL_Place{$oTopic->getId()} != null) {
          ARL_Place{$oTopic->getId()}.before (ARL_AudioBlock{$oTopic->getId()});
        } else {
          ls.msg.error ('{$aLang.plugin.audiorecordslight.wrong_document_structure}');
        }

        //
        // For mp3 tags in topics text
        //
        $ ('#content .topic .text').each (function (i, o) {
          sPattern = new RegExp ('<' + ARL_Tag_Name + ' [^>]*src=["\'](.*?)["\'][^>]*></' + ARL_Tag_Name + '>', 'gi');
          $ (o).html ($ (o).html ().replace (sPattern,
            '<object width="{$oConfig-><param name="wmode" value="opaque"></param><param name="wmode" value="opaque"></param>GetValue("plugin.audiorecordslight.Flash_Player_Width")}" height="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Height")}" align="middle">' +
            '<param name="movie" value="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Filename")}"></param>' +
            '<param name="allowScriptAccess" value="always"></param>' +
            '' +
            '<param name="quality" value="best"></param>' +
            '<param name="flashvars" value="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Flashvars_AudioParam")}=$1"></param>' +
            '<embed src="{$oConfig-></embed></embed>GetValue("plugin.audiorecordslight.Flash_Player_Filename")}" width="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Width")}" height="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Height")}" menu="false" quality="best" align="middle" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="{$oConfig->GetValue("plugin.audiorecordslight.Flash_Player_Flashvars_AudioParam")}=$1" wmode="transparent"></embed>' +
            '</object>'
          ));
        });
      })();
    });
  </script>
  <!-- /Audiorecordslight plugin -->

И это не все, кроме этого кода был еще и другой. Что тут не так именно в коде?
— Этот код вставляется в каждый топик, что приводит к колоссальному оверхеду, страница гораздо больше весит, а это сказывается на скорости загрузки, и, кроме того, дольше рендерится браузером.
— Этот код сам по себе тяжелый, он парсит большие куски html и ищет совпадения.
— В одном файле смешан php, js, html, тут из пхп генерится js, потом на основе js генерится html — поддерживать это ну очень тяжело.

Не вижу, где же я тут придумал?
  • avatar emmy
  • 0
что ваши мероприятия делают с текстом такого?
С текстом не делают ничего, только вешают несколько обработчиков на элементы внутри топика.

не выдумывайте.
Я не выдумываю. К сожалению, плагина у меня нет, поэтому указать на такие места технически не могу.
  • avatar emmy
  • 0
Он к Вам также обращался как и ко мне, Вы ему отказали в помощи.
  • avatar emmy
  • 1
Я вешаю все обработчики через on, например
$ActivityCheckbox.on('change', onActivityCheckboxClick);

Вы скорее предлагаете вешать live-подобный обработчик (вешается через on, с другими аргументами) на элемент вне текста топика, и это костыльное решение, хотя бы потому, что работает только на события, которые всплывают по dom, то есть нельзя использовать следующие события: blur, focus, mouseenter, mouseleave, change и submit. Также не удобный указатель this внутри обработчика, ну и я не буду говорить про отвратительную скорость его работы.

При всем уважении, почему Вы упираетесь? Ваше решение мало того, что не эффективно, так еще и откровенно костыльно, вы удаляете огромную часть кода, а потом вставляете ее обратно, причем зачастую эта часть остается неизмененной. Кроме того у Вас это вроде реализовано как inline js, причем достаточно много кода зашито прямо в html, а это сильно увеличивает время обработки страницы браузером.

У вашего подхода откровенные минусы, которые, я уверен, вы видите и сами, это:
— Само по себе медленное решение
— Увеличивает время обработки страницы браузером так как inline
— Не совместимо с другими плагинами
— Невозможно поддерживать и дорабатывать

Отвечу сразу на вопрос, возникший у вас, откуда я видел Ваш код — мой клиент пожаловался на несовместимость моего плагина «Мероприятия» и Вашего, затем он прислал мне Ваш плагин, который я продебажил и нашел причину. Сразу скажу что плагина у меня больше нет и я нигде его не использую.
  • avatar emmy
  • 0
Согласен с sersar .
Также убивает все обработчики, повешенные на старый html, который вы удаляете, затем вставляя его новую версию.
  • avatar emmy
  • -2
:)

С чего Вы взяли что я сделал всего один плагин? Только лишь в каталоге размещено 4, вы же это можете посмотреть, прежде чем начинать кидаться словами — ссылка.

А вот Ваша интерпретация моих слов
цена плагина, естественно, увеличится
выглядит чистой провокацией. Где же это я сказал, что буду продавать новые версии за дополнительные деньги? Не вводите в заблуждение, пожалуйста, людей.

Для всех у кого есть лицензия, независимо от цены по которой ее купили, обновления будут бесплатны и доступны в каталоге в течении срока её действия.
Это для новых клиентов цена плагина вырастет в соответствии с моими затратами.

Еще хочу сказать по поводу «свалить» и тех. поддержки — не стоит строить догадки на пустом месте, это Вас совсем не красит.
  • avatar emmy
  • 0
Отписал подробно в личном сообщении по Вашей проблеме, чтобы не отходить от темы топика.
  • avatar emmy
  • 0
Достаточно простого доступа к серверу с правами администратора, именно отдельный сервер под плагин не нужен. Но, если будет много желающих с шаред хостингом, я смогу подключить к плагину сервис pusher.com, который бесплатен до определенного предела, хватающего большинству. Этот сервис предоставляет сервер для обмена сообщениями в реальном времени.

Возможно следующий мой опыт будет полезен.
Я много пользовался шаред хостингами — уже более 5-ти лет и в конечном счете, пришел к выводу, что виртуальный сервер выходит даже дешевле, если у Вас больше 5-ти сайтов, да и производительность у него зачастую гораздо лучше. Могу сказать, что для purels.ru я арендую виртуальный сервер у timeweb — это стоит 565 рублей в месяц. Аналогичную виртуалку можно арендовать за 350 рублей (8 евро) у hetzner, а это цифра, сопоставимая со стоимостью шареда.
  • avatar emmy
  • 0
Спасибо большое и Вам — за поддержку и хорошие слова! Для таких людей как Вы я и разрабатываю. Буду рад видеть в списке своих клиентов.
  • avatar emmy
  • 4
Я же говорю, я никогда не буду выставлять цену на основе твоих субъективных чувств, если ты считаешь, что твоя оценка «значимости» единственно верная и почти истина — ты ошибаешься, почитай комментарии выше и посмотри сколько людей оценило этот плагин иначе, прибавь к ним покупателей, затем сравни с количеством недовольных.
Да и я понимаю, почему тебе он кажется дорогим, ты просто не всё видишь, вот один из читателей дал грамотный комментарий о плагине
Основной смысл плагина в том, что используется полнофункциональный бекенд, заточенный для realtime-функционала, вместо тривиального обновления по таймеру, которое на серьезном проекте будет невероятно прожорливым.
простыми словами, все, что ты предлагаешь сделать, готово на 90%, но суть не в этом.

Для лучшего понимания я проведу аналогию.
Ты сейчас говоришь, что разницы между bmw x5 и renault duster нет и в аргумент приводишь то, что обе машины могут ехать, а остальных различий ты не признаешь или не видишь. Но мы то с тобой прекрасно понимаем, что разница есть — качество сборки, качество материалов, качество отделки, подвеска, двигатель, эргономика и так далее.
Субъективно, основываясь на утверждении, что эти машины одинаковы, так как обе едут, действительно, отдавать за х5 в 5 раз больше денег кажется бессмысленным, ну и не отдавай, раз для тебя разница между х5 и duster не видна. Компания bmw не ставит перед собой целью продать х5 каждому встречному, также и я — я не ставлю перед собой цель продать этот плагин тебе или всем, кому он хоть немного понравится или нужен.

Цена плагина зависит от многих достаточно объективных факторов, приведу навскидку несколько:
— Затраты на разработку непосредственно кода
— Затраты на разработку документации
— Издержки, связанные с продажей (25% каталогу)
— Издержки, связанные с пиратским распространением продукта
— Затраты на техническую поддержку
— Затраты на информационное сопровождение продукта
В итоге, если посчитать «по-честному», то стоимость плагина будет выше, чем 890 рублей.

Может быть я не в том мире живу, но разве компания bmw у тебя спрашивает по какой цене им продавать автомобили? Они также, как и я, опираются на объективные факторы — затраты на разработку, производство, рекламу и продажу автомобиля, исходя из них и выставляют ему цену. Не вижу трагедии в том, что не все готовы купить себе х5 или мой плагин.

Насчет 5 человек, откуда эта цифра? Продаж будет больше, множество людей пишут мне и задают вопросы, множество людей не смогли купить его из-за того, что используют виртуальный хостинг. Но я согласен только с тем, что я врятли выйду в «плюс», так я и не для этого разрабатывал реальный плагин, в отношении ls мной больше движет энтузиазм, если бы деньги были бы первостепенны — я бы работал только на заказ. Также ошибочно считать, что снижение цены приведет к большей прибыли — это не так, сильно увеличиваются затраты на техническую поддержку, а на фоне уменьшения прибыли это сделает еще более не выгодным всю эту торговлю, чем сейчас.

Насчет воровства.
Вокруг нас существует много мудаков — кто-то рисует балочником на стенах и автомобилях, кто-то ездит пьяным за рулем, кто-то убивает людей в пьяной драке, кто-то портит чужое имущество ради мести, ну и кто-то ворует ради наживы и так далее. Этих обезьян полно и с ними приходится жить, я философски отношусь к этим явлениям и повлиять на ситуацию смогу только лишь заявлением в полицию, что скорее всего и сделаю если будут достаточные основания хотя бы подозревать. А как на это повлияет снижение цены — для меня загадка, любой платный плагин будет выложен в сеть, если человек мудак, а таких, как мы выяснили не мало, ему, не зависимо от цены, будет покупать западло, хоть за 200 рублей, хоть за 1000 рублей.
  • avatar emmy
  • 3
Ты оцениваешь стоимость плагина на основе своих субъективных ощущений и ты прав, считаешь плагин дорогим — твое право, никто не обязывает тебя его покупать, но я, как автор плагина, никогда не буду выставлять цену на основе твоих субъективных ощущений, у меня есть объективная основа для того, чтобы рассчитать его реальную цену. Расчет приведен в моем сообщении выше и, поверь, в действительности, я потратил больше времени на плагин, чем указал, кроме того, не учитываю 25%, отдаваемых каталогу ls, и свое время, затрачиваемое на техническую поддержку.

При росте функционала, а именно после добавления:
— звукового уведомления о сообщениях
— express ответа как в vk.com
— настроек уведомлений
— комментариев в реальном времени в топиках
— топиков в реальном времени
— новых уведомлений о различной активности на сайте
— поддержки pusher.com для возможности работы плагина на виртуальном хостинге

цена плагина, естественно, увеличится — я таким же образом, как и раньше, посчитаю сколько времени (денег) я затратил на нововведения и добавлю эту сумму к стоимости плагина. И я допускаю шанс, что он и с нововведениями покажется тебе дорогим.

Насчет приведенного в пример бесплатного плагина, честно, в упор не вижу, где он повторяет «почти всё», лишь одно — оповещение о новом сообщении. Но реальный плагин делает гораздо больше и его основная фича — это удобный разговор в реальном времени без необходимости перезагрузки страницы.

Удачи и тебе ;)
  • avatar emmy
  • 0
Они пишут в blob поле картинку?
  • avatar emmy
  • 1
Да.
На простой виртуальный хостинг установить не получится. Обязательно требуется доступ на сервер с правами администратора, потому что в комплект к плагину идет message-сервер, который надо установить и запустить, он то и позволяет в реальном времени обмениваться событиями между сайтом и пользователями.
  • avatar emmy
  • 1
Я бы не сказал что это простой сервер, который годен только для быстрого написания подобных приложений.
Faye это стабильный и проверенный сервер рассылки сообщений, который успешно используют в продакшене такие крупные компании как myspace, shopify и так далее, на их сайте есть список. Он расширяем и гибок, легко масштабируем. Трудно найти решение лучше, это лидер.
  • avatar emmy
  • 4
Спасибо.
Гит это система для управления версиями файлов. Во время разработки ПО гит отслеживает изменения в коде и позволяет возвращаться к предыдущим версиям, если что-то пошло не так :)