Прототип или JQuery для манипулирования DOM (динамический контент на стороне клиента) - PullRequest
3 голосов
/ 12 июня 2010

Мне нужно знать, какая из этих двух платформ JavaScript лучше подходит для динамического изменения содержимого на стороне клиента для известных элементов DOM (по идентификатору), с точки зрения производительности, использования памяти и т. Д .:

  • Prototype's $ ('id'). Update (content)
  • jQuery в jQuery ('# id'). Html (content)

РЕДАКТИРОВАТЬ: Мои реальные проблемы выясняются в конце вопроса.

Кстати, обе библиотеки не конфликтуют в моем приложении, потому что я использую RichFaces для разработки JSF, поэтому я могу использовать «jQuery» вместо «$».

У меня есть как минимум 20 обновляемых областей на моей странице, и для каждой из них я готовлю контент (таблицы, списки опций и т. Д.) На основе определенной пользователем клиентской фильтрации критериев или некоторого события AJAX и т. Д., как это:

var html = [];
int idx = 0;
...
html[idx++] = '<tr><td class="cell"><span class="link" title="View" onclick="myFunction(';
html[idx++] = param;
html[idx++] = ')"></span>';
html[idx++] = someText;
html[idx++] = '</td></tr>';
...

Итак, возникает вопрос, что лучше использовать:

// Prototype's
$('myId').update(html.join(''));
// or jQuery's
jQuery('#myId').html(html.join(''));

Другими необходимыми функциями являются hide () и show (), которые присутствуют в обеих платформах. Что лучше? Также мне нужно включить / отключить элементы управления формой и прочитать / установить их значения.

Обратите внимание, что я знаю идентификатор моей обновляемой области (в данный момент мне не нужны CSS-селекторы). И я должен сказать, что я сохраняю эти запрашиваемые объекты в некоторой структуре данных для последующего использования, поэтому они запрашиваются только один раз при визуализации страницы, например:

MyData = {div1:jQuery('#id1'), div2:$('id2'), ...};
...
div1.update('content 1');
div2.html('content 2');

Итак, что является лучшей практикой?

РЕДАКТИРОВАТЬ: Уточнение, я в основном обеспокоен:

  • Использование памяти этими сохраненными объектами (мне кажется, что объекты jQuery добавляют слишком много накладных расходов), в то время как OTOH мои DOM-элементы уже изменены расширениями Prototype (по умолчанию загружаются Richfaces).
  • Производительность (время) и утечка памяти (сборка мусора для замененных элементов?) При обновлении DOM. Из исходного кода я мог видеть, что Prototype заменяет innerHTML и делает что-то со встроенными сценариями. jQuery освобождает память при вызове функции empty () перед заменой содержимого.

Пожалуйста, поправьте меня, если нужно ...

Ответы [ 3 ]

1 голос
/ 12 марта 2011

Вам лучше пойти с JQuery. Обе платформы хороши (и я использую их оба), но в вашем случае jQuery, вероятно, победитель.

По моему мнению, прототип обеспечивает более естественный синтаксис для разработки javascript. Это делается за счет добавления методов к некоторым базовым классам, но это также мотивируется ruby, где это является нормой.

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

1 голос
/ 12 марта 2011

Если вас интересуют только три основных метода: «обновить», «скрыть» и «показать», тогда jQuery лучше подойдет.Он нацелен больше на манипулирование DOM, что именно то, что вам нужно.С другой стороны, вы можете выполнить каждую из этих вещей в нескольких строках кода, сохранив 26 КБ, необходимые для передачи библиотеки jQuery.

Поскольку ваше беспокойство связано с использованием памяти, посмотрите на файл jQuery, он несжатый на 77 КБКак вы думаете, сколько работы нужно выполнить браузеру?Вероятно, намного больше, чем освобождается при вызове empty() на типичном DIV.

И вы упоминаете, что Prototype уже используется на сайте, и в этом случае вам не следует добавлять другую библиотеку,Способности jQuery являются подмножеством способностей Прототипа.

Этому вопросу почти год, поэтому вы, вероятно, уже приняли решение.Для всех остальных читающих ответ прост;Если что-то не сломано, не исправляйте это, у вас уже есть одна работоспособная библиотека, так что используйте это.

0 голосов
/ 12 июня 2010

Я бы пошел на JQuery. Прототип используется для изменения объектов JS по умолчанию, это хорошо, но это означает, что вы должны быть осторожны. Я считаю, что это больше не так. JQuery также имеет большой репозиторий плагинов и расширение пользовательского интерфейса jquery для виджетов. Btw. С JQuery вы также можете использовать знакомый знак доллара.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...