Производительность Javascript - добавление сценариев с помощью $ .getScript () - PullRequest
1 голос
/ 12 марта 2012

В настоящее время я создаю своего рода веб-приложение, и его часть работает путем динамической загрузки и добавления js-скриптов на страницу.Для этого я использую метод JQuery $.getScript(), который загружает его.

У меня он установлен как кэшированный.

С моей программой, если скрипт уже существует, онвсе равно снова загружается, из того, что кажется кешем.Что мне интересно, так это то, насколько это повлияет на сайт и производительность.Перезаписывает ли недавно загруженный скрипт, который имеет тот же src, что и существующий, предыдущий или новый добавляется вместе со старым?

Более того, поскольку мой сайт является сайтом AJAX, возможно несколько сценариев изразличные страницы, которые в конечном итоге будут загружены со временем.Существуют ли какие-либо ограничения браузера на количество загружаемых скриптов?

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Это повлияет на производительность сайта. Даже если ваш сценарий кэшируется на клиенте с установленным сроком действия, браузеру все равно необходимо проанализировать и выполнить вновь включенный сценарий. Более того, очень велика вероятность того, что вы столкнетесь с ошибками JavaScript, потому что ваши скрипты будут переопределять переменные, уже установленные предыдущей версией. Разбор и выполнение JavaScript по-прежнему является блокирующей операцией во всех браузерах, поэтому во время обработки файла пользовательский интерфейс будет заблокирован.

Чтобы ответить на вторую часть вопроса, насколько я знаю, на данной странице нет ограничений на количество файлов javascript. Я видел страницы с более чем 200 javascript, которые не генерировали никаких исключений.

1 голос
/ 12 марта 2012

Я думаю, что Илья дал несколько важных замечаний, и я думаю, что это отвечает на ваш конкретный вопрос. Однако если вы пытаетесь выполнить обработчик $(document).ready(), вы можете сделать:

(function(){
    var myreadyfunction = function(){
        $('#affected').toggleClass('blue');
    };

    $(document).ready(myreadyfunction);

    $(document).ready(function(){
        $('button').click(myreadyfunction);
    });
})();

http://jsfiddle.net/Z97cm/

Я выделил его в анонимный (function(){})();, чтобы не попасть в глобальную область, поэтому вы можете подумать об этом, если вам нужен доступ к этой функции за пределами этой области. Но это дает вам общее представление о том, о чем я говорил.

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