В последнее время я делал много модальных всплывающих окон и что нет, для чего я использовал jQuery. Метод, который я использовал для создания новых элементов на странице, в подавляющем большинстве случаев был следующим:
$("<div></div>");
Однако у меня возникает ощущение, что это не самый лучший или самый эффективный способ сделать это. Каков наилучший способ создания элементов в jQuery с точки зрения производительности?
Этот ответ имеет ориентиры для предложений ниже.
javascript
jquery
html
dom
Darko Z
источник
источник
Ответы:
Я использую
$(document.createElement('div'));
Бенчмаркинг, показывает, что эта техника самая быстрая. Я предполагаю, что это потому, что jQuery не должен идентифицировать его как элемент и создать сам элемент.Вы должны действительно запустить тесты с различными движками Javascript и взвесить аудиторию с результатами. Примите решение оттуда.
источник
appendTo
... Поскольку комментарии были явно неправильными, я удалил их.лично я бы предложил (для удобства чтения):
некоторые цифры в предложениях (safari 3.2.1 / mac os x):
источник
Вопрос:
Ответ:
Так как дело в том,
jQuery
я думаю, что лучше использовать этот (чистый) подход (вы используете)DEMO.
Таким образом, вы даже можете использовать обработчики событий для конкретного элемента, такого как
DEMO.
Но когда вы имеете дело с большим количеством динамических элементов, вам следует избегать добавления события
handlers
в конкретный элемент, вместо этого вы должны использовать делегированный обработчик события, напримерDEMO.
Таким образом, если вы создаете и добавляете сотни элементов с одним и тем же классом, т.е. (
myClass
), тогда для обработки событий будет потребляться меньше памяти, поскольку для всех динамически вставленных элементов будет только один обработчик.Обновление: так как мы можем использовать следующий подход для создания динамического элемента
Но
size
атрибут не может быть установлен с использованием этого подхода, используяjQuery-1.8.0
или позже, и вот старый отчет об ошибке , посмотрите на этот пример, использующий,jQuery-1.7.2
который показывает, чтоsize
атрибут установлен на30
примере выше, но используя тот же подход, который мы не можем установитьsize
с помощью атрибутаjQuery-1.8.3
, здесь является нерабочей скрипкой . Итак, чтобы установитьsize
атрибут, мы можем использовать следующий подходИли этот
Мы можем передать в
attr/prop
качестве дочернего объекта , но он работает вjQuery-1.8.0 and later
версиях проверить этот пример , но он не будет работать вjQuery-1.7.2 or earlier
(не тестируется во всех предыдущих версиях).Кстати, взято из
jQuery
сообщения об ошибкеОни посоветовали использовать следующий подход ( работает и в более ранних , проверено в
1.6.4
)Так что лучше использовать этот подход, ИМО. Это обновление сделано после того, как я прочитал / нашел этот ответ и в этом ответе показывает, что если вы используете
'Size'(capital S)
вместо этого,'size'
то он будет работать нормально , даже вversion-2.0.2
Также читайте о проп , потому что есть разница
Attributes vs. Properties
, она варьируется в зависимости от версии.источник
$('<div>', {...})
вы передаете объект, который содержит все атрибуты, и$('<div>').attr({...})
вы создаете элемент без каких-либо атрибутов, но устанавливаете атрибуты, используяattr()
метод позже.jQuery.com
сайту может быть полезен @RafaelRuizTabares, или Google его :-)На самом деле, если вы делаете
$('<div>')
, JQuery также будет использоватьdocument.createElement()
.(Просто посмотрите на строку 117 ).
Существуют некоторые накладные расходы при вызове функций, но если производительность не критична (вы создаете сотни [тысяч] элементов), нет особых причин возвращаться к простому DOM .
Просто создание элементов для новой веб-страницы - это, вероятно, тот случай, когда вам лучше всего придерживаться jQuery .
источник
Если у вас много HTML-контента (больше, чем просто один div), вы можете подумать о встраивании HTML-кода в страницу в скрытом контейнере, а затем об обновлении и отображении его при необходимости. Таким образом, большая часть вашей разметки может быть предварительно проанализирована браузером и избежать срыва JavaScript при вызове. Надеюсь это поможет!
источник
Это не правильный ответ на вопрос, но все же я хотел бы поделиться этим ...
Использование Just
document.createElement('div')
и пропуск JQuery значительно улучшит производительность, если вы хотите создавать множество элементов на лету и добавлять в DOM.источник
Я думаю, что вы используете лучший метод, хотя вы можете оптимизировать его для:
источник
Вам не нужна грубая производительность от операции, которую вы будете выполнять крайне редко с точки зрения процессора.
источник
jQuery(html :: String)
метода совершенно нормально. Если ситуация не будет необычной, вряд ли кто-то достигнет лучшего восприятия . Потратьте энергию оптимизации на случаи, которые могли бы использовать его. Кроме того, JQuery оптимизирован для скорости во многих отношениях. Делайте с ним что-то вменяемое и доверяйте, но проверяйте, что это быстро.Вы должны понимать, что значение производительности создания элемента не имеет значения в контексте использования jQuery в первую очередь.
Имейте в виду, что нет реальной цели создания элемента, если вы на самом деле не собираетесь его использовать.
Вы можете захотеть тестирование производительности что - то вроде
$(document.createElement('div'))
против прогноза$('<div>')
и получить большой прирост производительности от использования ,$(document.createElement('div'))
но это только элемент , который не в DOM еще.Однако, в конце концов, вы все равно захотите использовать элемент, поэтому реальный тест должен включать f.ex. .добавить к();
Давайте посмотрим, если вы проверяете следующее друг против друга:
Вы заметите, что результаты будут отличаться. Иногда один способ лучше, чем другой. И это только потому, что количество фоновых задач на вашем компьютере со временем меняется.
Проверьте себя здесь
Итак, в конце концов, вы хотите выбрать самый маленький и самый читаемый способ создания элемента. Таким образом, по крайней мере, ваши файлы скриптов будут минимально возможными. Вероятно, более существенный фактор с точки зрения производительности, чем способ создания элемента перед его использованием в DOM.
источник
document.getElementById('target).appendChild(document.createElement('div'));
Кто-то уже сделал эталонный тест: эквивалент jQuery document.createElement?
$(document.createElement('div'))
большой победительисточник
Один момент заключается в том, что это может быть проще сделать:
Затем сделать все это с помощью вызовов jquery.
источник
Я использую jquery.min v2.0.3. Для меня лучше использовать следующее:
следующим образом:
Время обработки первого кода намного меньше, чем второго кода.
источник