jQuery, переменные и радио-кнопки - PullRequest
0 голосов
/ 04 апреля 2011

Я читал, что доступ к объектам или коллекциям через jQuery через переменные гораздо эффективнее, чем постоянный доступ к ним через встроенный код.Даже в простом тесте это действительно так:

<!doctype html>
<html>
    <head>
        <title>Demo</title>
    </head>
    <body>
        <script src="/jquery-1.5.1.js"></script>
        <script>
        var SomeChoiceRadios;

        $(document).ready(function(){
            SomeChoiceRadios = $("#MyForm input:radio[name='SomeChoice']");
        });

        function DoStuff()
        {
            console.profile('Optimized'); 

            for (i=0; i < 10000; i++)
                foo = SomeChoiceRadios.filter(":checked").val();

            console.profileEnd(); 
        }

        function DoStuff2()
        {
            console.profile('Inline'); 

            for (i=0; i < 10000; i++)
                foo = $("#MyForm input:radio[name='SomeChoice']:checked").val();

            console.profileEnd(); 
        }
        </script>

        <form id="MyForm" name="MyForm">
        <input type="radio" name="SomeChoice" value="0">0<br>
        <input type="radio" name="SomeChoice" value="1">1<br>
        <input type="radio" name="SomeChoice" value="2">2<br>
        <input type="radio" name="SomeChoice" value="3">3<br>
        <input type="radio" name="SomeChoice" value="4">4<br>
        <input type="radio" name="SomeChoice" value="5">5<br>
        <input type="button" value="Time" onclick="DoStuff()">
        <input type="button" value="Time" onclick="DoStuff2()">
        </form>
    </body>
</html>

Учитывая приведенный выше пример, есть ли более быстрый способ получить значение переключателя с отметкой SomeChoice, если я пытаюсь получить к нему доступ с помощью переменной (то есть SomeChoiceRadios)?

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Я предполагаю, что это не будет справедливо для больших выбранных наборов, но это работает даже быстрее, чем ваша оптимизированная версия. Смотрите модифицированную демонстрацию здесь ->

function DoStuff3() {
    console.profile('ReallyOptimized');

    for (i = 0; i < 10000; i++) {
        $.each(SomeChoiceRadios, function() {
            if (this.checked) foo = this.value;
        });
    }

    console.profileEnd();
}
0 голосов
/ 05 апреля 2011

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

Я большой поклонник переменных, потому что это делает код более понятным и более эффективным.

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