Я должен использовать jQuery.each ()?

Старайтесь использовать компилятор C, не C++ при фактическом выполнении C. В то время как большинство программ в C будет работать с помощью компилятора C++ существует достаточно различий, что могут быть проблемы. Я согласился бы с людьми, которые предлагают использовать gcc через cygwin.

РЕДАКТИРОВАНИЕ:
http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B шоу некоторые существенные различия

34
задан pr1001 10 December 2009 в 20:03
поделиться

5 ответов

The source code for jQuery's each is as follows (Thank you John Resig and MIT License):

each: function( object, callback, args ) {
    var name, i = 0, length = object.length;

    if ( args ) {
        if ( length === undefined ) {
            for ( name in object )
                if ( callback.apply( object[ name ], args ) === false )
                    break;
        } else
            for ( ; i < length; )
                if ( callback.apply( object[ i++ ], args ) === false )
                    break;

    // A special, fast, case for the most common use of each
    } else {
        if ( length === undefined ) {
            for ( name in object )
                if ( callback.call( object[ name ], name, object[ name ] ) === false )
                    break;
        } else
            for ( var value = object[0];
                i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
    }

    return object;
}

As you can trace and see, in most cases it is using a basic for loop where the only overhead is really just the callback itself. Shouldn't make a difference in performance.

EDIT: This is with the realization that selector overhead has already occurred and you are given a populated array object.

15
ответ дан 27 November 2019 в 16:46
поделиться

This article (#3) ran some performance tests and found that the jQuery .each function was about 10x as slow as the native javascript for loop.

From 10 Ways to Instantly Increase Your jQuery Performance - 3. Use For Instead of Each
Using Firebug, it's possible to measure the time each of the two functions takes to run.

var array = new Array ();
for (var i=0; i<10000; i++) {
 array[i] = 0;
}

console.time('native');
var l = array.length;
for (var i=0;i

Приведенные выше результаты составляют 2 мс для нативного кода и 26 мс для метода jQuery "each". При условии, что я тестировал его на своей локальной машине, и они на самом деле ничего не делают (просто операция заполнения массива), каждая функция jQuery занимает в 10 раз больше времени, чем собственный цикл «for» JS. Это, безусловно, возрастет при работе с более сложными вещами, такими как установка атрибутов CSS или другие операции манипулирования DOM.

27
ответ дан 27 November 2019 в 16:46
поделиться

This method should give you a dramatic speed improvement.

var elements = $('.myLinks').get(), element = null;
for (var i = 0, length = elements.length; i < length; i++) {
    element = elements[i];
    element.title = "My New Title!";
    element.style.color = "red";
}

Caching will also improve performance.

function MyLinkCache() {
    var internalCache = $('.myLinks').get();

    this.getCache = function() {
        return internalCache;  
    }

    this.rebuild = function() {
        internalCache = $('.myLinks').get();
    }
}

In use:

var myLinks = new MyLinkCache();

function addMyLink() {
    // Add a new link.
    myLinks.rebuild();
}

function processMyLinks() {
    var elements = myLinks.getCache(), element = null;
    for (var i = 0, length = elements.length; i < length; i++) {
        element = elements[i];
        element.title = "My New Title!";
        element.style.color = "red";
    }
}
7
ответ дан 27 November 2019 в 16:46
поделиться

One way to make sure you are getting the most out of jquery is to store the returned array of results in a variable rather than re-traversing the DOM everytime you need to get something.

Example of what NOT to do:

$('.myLinks').each(function(){
    // your code here
});
$('.myLinks').each(function(){
    // some more code here
});

Better practice:

var myLinks = $('.myLinks');
myLinks.each(function(){
    // your code here
});
myLinks.each(function(){
    // some more code here
});
6
ответ дан 27 November 2019 в 16:46
поделиться

Использование собственных функций обычно быстрее , чем абстракция, такая как метод JQuery.each (). Однако метод JQuery.each () проще в использовании и требует меньше кода с вашей стороны.

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

Замена метода JQuery.each () в этих сценарии могут помочь, однако, если вы не видели ваш код, возможно, у вас есть узкие места, не связанные с методом JQuery.

6
ответ дан 27 November 2019 в 16:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: