Мне нужно знать, какая из этих двух платформ 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 () перед заменой содержимого.
Пожалуйста, поправьте меня, если нужно ...