Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Я не улавливаю разницы... (https://javascript.ru/forum/dom-window/24947-ya-ne-ulavlivayu-raznicy.html)

melky 21.01.2012 11:29

Цитата:

Сообщение от da_ff (Сообщение 151803)
melky,
Стоп, кажется мы немного про разные вещи говорим. Речь вроде бы про шаблонизаторы на серверной стороне. Шаблонизатор bмеет свою грамматику для вывода простых конструкций логигки (ветвление, цикл, вывод другого шаблона и тд).Чтобы срендерить кусок html шаблонизатору нужнем экземпляр модели с данными. В модели как правило есть коллекция (массив/хэш) ссылок и тайтлов пунктов меню (если упрощенно и только плоский список). У нас есть выбор, либо собрать из этого ul и на этом успокоиться, либо собрать конструкцию
<javascript>
(function () {
var _ = [коллекция_пунктов_меню];
document.write(renderMenu(_));
})();
</javascript>
В чем тут выигрыш в производительности? В любом случае нам нужна модель с данными, которая будет получена только на сервере и больше ни где.

циклы для вывода не использются. ты просто выводишь массив, а не обходишь его и расставляешь хитрые классы, атрибуты. вот в этом и выигрыш.
см. хабру
Цитата:

И почему же мы все не кидаемся вовсю использовать шаблонизацию на стороне клиента?
– генерировать страницу (бОльшую её часть) становится таки уже накладно;
– если у вас используется смешанная шаблонизация (шаблоны и на javascript, и на вашем любимом скриптовом языке), то возникнет ситуация, когда они у вас дублируются;
я говорил вам о первом пункте.

Цитата:

Сообщение от trikadin (Сообщение 151802)
Куча утечек памяти, и

мм?
Цитата:

Сообщение от trikadin (Сообщение 151802)
firebug постоянно пестрит сообщениями об ошибках.

согласен, но предупреждения у jquery видел?)

da_ff 21.01.2012 11:32

Цитата:

циклы для вывода не использются. ты просто выводишь массив
Как это? Коллекцию нам все равно надо будет обойти, только это будет скрыто от нас за синтаксисом языка.

melky 21.01.2012 11:46

Цитата:

Сообщение от da_ff (Сообщение 151805)
Как это? Коллекцию нам все равно надо будет обойти, только это будет скрыто от нас за синтаксисом языка.

её выводит уже сам пользователь.

ЗЫ что-то мне кажется, что делать так - дело вкуса, не более. ощутимых минусов и плюсов нет. мне просто нравится заменять JS'oм всё, что вижу. если бы смог написать комбайнер - он был бы сейчас готов :)

trikadin 21.01.2012 11:54

Цитата:

Сообщение от melky
мм?

Открой вкладку на пару часов и посмотри на расход памяти. Где конкретно утечки происходят - сказать не могу, в код не смотрел))

melky 21.01.2012 11:56

Цитата:

Сообщение от trikadin (Сообщение 151809)
Открой вкладку на пару часов и посмотри на расход памяти. Где конкретно утечки происходят - сказать не могу, в код не смотрел))

там json раз в секунду принимается. вспомни, как кто-то жаловался на это (но не вконтакте)

хм. действительно, странная проблема.

trikadin 21.01.2012 12:02

Цитата:

Сообщение от melky
там json раз в секунду принимается.

Реже. Для стен - раз в десять, точно помню. Для сообщений они по-моему вообще long соединение держат. Хотя это не важно, по сути)

d-kaktus 21.01.2012 19:41

Цитата:

Сообщение от trikadin (Сообщение 151786)
Как люди всё-таки не любят критику и любят нравиться)

А почему я должен любить то, что мне неприемлемо (это не касательно данной теме)?
Короче говоря, куча доводов и только один факт, к которому можно найти подход - поисковики. (сюда же и отключенный 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]);}

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

Возвращаясь к говнокоду
То, что написано выше похоже на говнокод? Если да, то в каком месте?

Seva1986 22.01.2012 01:59

Цитата:

Сообщение от d-kaktus
Это навскидку, можно же придумать с вложениями слоёв и без подобного цикла, а с передачей массива в функцию для построения слоёв по данным массива. Так же групповые параметры для повторяющихся значений, для класса, к примеру.

Это называеться сборка страници на клиенте. туже задачу можно на xslt сделать на браузере... приходит xml и xslt и собираеться html. да и ещё какимто шаблонизатором можно да и без xml, главное чтобы браузер понял что с этим делать...

Действительно такие идеи есть, только зачем это выносить на клиент? если это прекрасно делается на сервере?

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

melky 22.01.2012 06:25

Цитата:

Сообщение от Seva1986 (Сообщение 152006)
Действительно такие идеи есть, только зачем это выносить на клиент? если это прекрасно делается на сервере?

а почему бы и нет? экспериментируем и познаём.

Цитата:

Сообщение от Seva1986 (Сообщение 152006)
Ну а если ещё дальше развить то можно вообще бинарник клиенту кормить, а браузер, хотя зачем тогда вообще браузер, ОС схавала бы его...

а вы знаете, что Dart собирается так делать?

Цитата:

Сообщение от Seva1986 (Сообщение 152006)
Только ведь наоборот пошли по другому пути, давали разметку а браузер это отображал, потом стали в разметку пихать инфу как это нужно отображать, а потом и сейчас поняли что нужно всё разделить информацию, отображение, и что и как будет происходить. Наверное подобное решение не с потолка взяли, и явно есть какието преимущества такого подхода...

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 (Сообщение 152006)
А то что вы предлагаете это какраз смесь, смесь от которой давно отказались.

а вот в это не могу поверить. это только начало появляться. есть ссылки, или что-нибудь в этом роде?

Seva1986 22.01.2012 13:05

Цитата:

Сообщение от melky
а вот в это не могу поверить.

Я про подход раделения даныых отображения и т.д. я не про шаблонизаторы на клиенте...

Цитата:

Сообщение от melky
MVC, да-а... ответьте мне на вопрос, как быстрее будет вывести, так ?

ну а поисковики будут "рады" этому.. да и ещё куча проблем может вылезти.... тут куча нюансов может быть... хотя данный подход я не отрицаю...

Цитата:

Сообщение от melky
а вы знаете, что Dart собирается так делать?

чесно говоря до сегодня не знал, но не удивился, оно к тому и идёт что скоро будет называться не компьютер а гугл :)


Часовой пояс GMT +3, время: 11:59.