Статьи

JQuery: производительность кеширования DOM

Я решил проверить производительность кеширования DOM в базовом шаблоне пространства имен JavaScript, который я довольно часто использую при повседневном кодировании. Обновление 10/04/2013: я добавил базовую логику в циклы. Обновленный jsfiddle , Обновленный jsperf .

При использовании кеширования DOM вы можете увеличить скорость работы на 76% (на основе операций в секунду).

Вот полные результаты теста производительности jsperf, сгруппированные в пары. Поэтому сравните 1 с 2, сравните 3 с 4 и так далее …

дом-кэширование test3

Результаты показывают, что кэширование ваших DOM-элементов значительно повышает скорость выполнения вашего кода. Это хорошо видно при сравнении тестов 3 и 4, в которых вы получаете повышение от 32 889 до 60 2620 операций в секунду!

петля-только-результаты

Расчет процентного прироста.

Сравнение 2a и 2b показывает увеличение скорости на 76% (на основе операций в секунду). ((98,072-23,358) / 98,072) * 100 = 76,18% увеличения.

Некоторая базовая разметка.

  • list nested 1 nested 2 nested 3 list list list
    • list nested 1 nested 2 nested 3 list list list
    • list nested 1 nested 2 nested 3 list list list
    • list nested 1 nested 2 nested 3 list list list
  • list nested 1 nested 2 nested 3 list list list
  • list nested 1 nested 2 nested 3 list list list
  • list nested 1 nested 2 nested 3 list list list

Базовый объект js с некоторым кэшированием.

 MY_OBJECT = { cache: {}, init: function() { this.cache.c = $('#container'); this.cache.n = this.cache.c.find('.nested'); this.cache.s = this.cache.c.find('#status'); } } MY_OBJECT.init(); 

Несколько стандартных тестов.

 //no cache container find $.each($('#container').find('li'), function(i,v) { //... }); //cache container find $.each(MY_OBJECT.cache.c.find('li'), function(i,v) { //... }); //no cache class elements loop $.each($('.nested'), function(i,v) { //... }); //cache class elements loop $.each(MY_OBJECT.cache.n, function(i,v) { //... }); //no cache update status $('.nested').each(function(i,v) { $('#status').text($(this).text()); }); //cache update status $.each(MY_OBJECT.cache.n, function(i,v) { MY_OBJECT.cache.s.text($(this).text()); });