21.01.2012, 11:29
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от da_ff
|
melky,
Стоп, кажется мы немного про разные вещи говорим. Речь вроде бы про шаблонизаторы на серверной стороне. Шаблонизатор bмеет свою грамматику для вывода простых конструкций логигки (ветвление, цикл, вывод другого шаблона и тд).Чтобы срендерить кусок html шаблонизатору нужнем экземпляр модели с данными. В модели как правило есть коллекция (массив/хэш) ссылок и тайтлов пунктов меню (если упрощенно и только плоский список). У нас есть выбор, либо собрать из этого ul и на этом успокоиться, либо собрать конструкцию
<javascript>
(function () {
var _ = [коллекция_пунктов_меню];
document.write(renderMenu(_));
})();
</javascript>
В чем тут выигрыш в производительности? В любом случае нам нужна модель с данными, которая будет получена только на сервере и больше ни где.
|
циклы для вывода не использются. ты просто выводишь массив, а не обходишь его и расставляешь хитрые классы, атрибуты. вот в этом и выигрыш.
см. хабру
Цитата:
|
И почему же мы все не кидаемся вовсю использовать шаблонизацию на стороне клиента?
– генерировать страницу (бОльшую её часть) становится таки уже накладно;
– если у вас используется смешанная шаблонизация (шаблоны и на javascript, и на вашем любимом скриптовом языке), то возникнет ситуация, когда они у вас дублируются;
|
я говорил вам о первом пункте.
Сообщение от trikadin
|
Куча утечек памяти, и
|
мм?
Сообщение от trikadin
|
firebug постоянно пестрит сообщениями об ошибках.
|
согласен, но предупреждения у jquery видел?)
|
|
21.01.2012, 11:32
|
Профессор
|
|
Регистрация: 12.05.2009
Сообщений: 317
|
|
Цитата:
|
циклы для вывода не использются. ты просто выводишь массив
|
Как это? Коллекцию нам все равно надо будет обойти, только это будет скрыто от нас за синтаксисом языка.
|
|
21.01.2012, 11:46
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от da_ff
|
Как это? Коллекцию нам все равно надо будет обойти, только это будет скрыто от нас за синтаксисом языка.
|
её выводит уже сам пользователь.
ЗЫ что-то мне кажется, что делать так - дело вкуса, не более. ощутимых минусов и плюсов нет. мне просто нравится заменять JS'oм всё, что вижу. если бы смог написать комбайнер - он был бы сейчас готов
|
|
21.01.2012, 11:54
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Открой вкладку на пару часов и посмотри на расход памяти. Где конкретно утечки происходят - сказать не могу, в код не смотрел))
|
|
21.01.2012, 11:56
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от trikadin
|
Открой вкладку на пару часов и посмотри на расход памяти. Где конкретно утечки происходят - сказать не могу, в код не смотрел))
|
там json раз в секунду принимается. вспомни, как кто-то жаловался на это (но не вконтакте)
хм. действительно, странная проблема.
|
|
21.01.2012, 12:02
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Сообщение от melky
|
там json раз в секунду принимается.
|
Реже. Для стен - раз в десять, точно помню. Для сообщений они по-моему вообще long соединение держат. Хотя это не важно, по сути)
|
|
21.01.2012, 19:41
|
Аспирант
|
|
Регистрация: 05.01.2012
Сообщений: 38
|
|
Сообщение от trikadin
|
Как люди всё-таки не любят критику и любят нравиться)
|
А почему я должен любить то, что мне неприемлемо (это не касательно данной теме)?
Короче говоря, куча доводов и только один факт, к которому можно найти подход - поисковики. (сюда же и отключенный js можно отнести)
Я открыл главную страницу мэйл.ру - мне не впадлу стало подсчитать количество div`ов - 266. При чём это количество можно разбить на несколько групп с одинаковым классом. Меня посещает отличная идея - почему бы не озадачить js подобным образом:
function div(id,class,text){
return "<div id='"+id+"' class='"+class+"'>"+text+"</div>";
}
var i,divs=['<?=implode("','",$someLongArray)?>'];
for(i=0;i<divs.length;i++){document.body.innerHTML+=div(divs[i][0],divs[i][1],divs[i][2]);}
Это навскидку, можно же придумать с вложениями слоёв и без подобного цикла, а с передачей массива в функцию для построения слоёв по данным массива. Так же групповые параметры для повторяющихся значений, для класса, к примеру.
Возвращаясь к говнокоду
То, что написано выше похоже на говнокод? Если да, то в каком месте?
|
|
22.01.2012, 01:59
|
Профессор
|
|
Регистрация: 01.10.2011
Сообщений: 422
|
|
Сообщение от d-kaktus
|
Это навскидку, можно же придумать с вложениями слоёв и без подобного цикла, а с передачей массива в функцию для построения слоёв по данным массива. Так же групповые параметры для повторяющихся значений, для класса, к примеру.
|
Это называеться сборка страници на клиенте. туже задачу можно на xslt сделать на браузере... приходит xml и xslt и собираеться html. да и ещё какимто шаблонизатором можно да и без xml, главное чтобы браузер понял что с этим делать...
Действительно такие идеи есть, только зачем это выносить на клиент? если это прекрасно делается на сервере?
Ну а если ещё дальше развить то можно вообще бинарник клиенту кормить, а браузер, хотя зачем тогда вообще браузер, ОС схавала бы его... Только ведь наоборот пошли по другому пути, давали разметку а браузер это отображал, потом стали в разметку пихать инфу как это нужно отображать, а потом и сейчас поняли что нужно всё разделить информацию, отображение, и что и как будет происходить. Наверное подобное решение не с потолка взяли, и явно есть какието преимущества такого подхода...
А то что вы предлагаете это какраз смесь, смесь от которой давно отказались.
Последний раз редактировалось Seva1986, 22.01.2012 в 03:40.
|
|
22.01.2012, 06:25
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Seva1986
|
Действительно такие идеи есть, только зачем это выносить на клиент? если это прекрасно делается на сервере?
|
а почему бы и нет? экспериментируем и познаём.
Сообщение от Seva1986
|
Ну а если ещё дальше развить то можно вообще бинарник клиенту кормить, а браузер, хотя зачем тогда вообще браузер, ОС схавала бы его...
|
а вы знаете, что Dart собирается так делать?
Сообщение от Seva1986
|
Только ведь наоборот пошли по другому пути, давали разметку а браузер это отображал, потом стали в разметку пихать инфу как это нужно отображать, а потом и сейчас поняли что нужно всё разделить информацию, отображение, и что и как будет происходить. Наверное подобное решение не с потолка взяли, и явно есть какието преимущества такого подхода...
|
MVC, да-а... ответьте мне на вопрос, как быстрее будет вывести, так ?
$proto = "<div>{user} - {message}</div>";
foreach($long_array as $user => $messages) result .= strtr($proto, array($user => $messages));
# не уверен, что он будет работать. просто пример.
или же так :
var data = <? echo json_encode($long_array); ?>;
build(data);
как долго формируется вывод у Вас на сайте? вот это время как раз можно убрать, перенеся на клиента.
Сообщение от Seva1986
|
А то что вы предлагаете это какраз смесь, смесь от которой давно отказались.
|
а вот в это не могу поверить. это только начало появляться. есть ссылки, или что-нибудь в этом роде?
|
|
22.01.2012, 13:05
|
Профессор
|
|
Регистрация: 01.10.2011
Сообщений: 422
|
|
Сообщение от melky
|
а вот в это не могу поверить.
|
Я про подход раделения даныых отображения и т.д. я не про шаблонизаторы на клиенте...
Сообщение от melky
|
MVC, да-а... ответьте мне на вопрос, как быстрее будет вывести, так ?
|
ну а поисковики будут "рады" этому.. да и ещё куча проблем может вылезти.... тут куча нюансов может быть... хотя данный подход я не отрицаю...
Сообщение от melky
|
а вы знаете, что Dart собирается так делать?
|
чесно говоря до сегодня не знал, но не удивился, оно к тому и идёт что скоро будет называться не компьютер а гугл
Последний раз редактировалось Seva1986, 22.01.2012 в 13:18.
|
|
|
|