асинхронный синтаксис загрузки файлов .js - PullRequest
16 голосов
/ 05 мая 2010

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

Метод первый

(function() {
    var d=document,
    h=d.getElementsByTagName('head')[0],
    s=d.createElement('script');
    s.type='text/javascript';
    s.src='/js/myfile.js';
    h.appendChild(s);
})(); /* note ending parenthesis and curly brace */


Метод второй (увидел это в коде Facebook)

(function() {
    var d=document,
    h=d.getElementsByTagName('head')[0],
    s=d.createElement('script');
    s.type='text/javascript';
    s.async=true;
    s.src='/js/myfile.js';
    h.appendChild(s);
}()); /* note ending parenthesis and curly brace */

Ответы [ 2 ]

16 голосов
/ 05 мая 2010

Единственное отличие, которое я заметил, это s.async=true; в методе Facebook.

Атрибуты async и defer являются логическими атрибутами, которые указывают, как должен выполняться скрипт.

Существует три возможных режима, которые можно выбрать с помощью этих атрибутов. Если присутствует атрибут async, то сценарий будет выполняться асинхронно, как только он станет доступен. Если атрибут async отсутствует, но присутствует атрибут defer, тогда сценарий выполняется, когда страница закончила анализ. Если ни один из атрибутов не присутствует, сценарий извлекается и выполняется немедленно, прежде чем пользовательский агент продолжит анализ страницы.

Источник и дополнительные материалы: Whatwg.org HTML 5: элемент сценария

Что касается преимуществ, вы можете проверить, что Google сказал в декабре прошлого года:

0 голосов
/ 14 декабря 2010

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

Sigma.async_script_load('http://example.com/underscore-min.js', '_', function() {
  _([1,2,3,2,3,1]).uniq();
});

https://github.com/ssoroka/sigma

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