Загрузка файлов JavaScript асинхронно


Мне нужно сделать некоторые скрипты из разных социальных сетей, и кэшировать их. Я хочу, чтобы функция, чтобы быть асинхронной и неблокирующей.

Я поселился со скриптом, но я не уверен, если это не слишком сложно сделать работу.

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

// Cached scritps
var cachedScriptPromises = {};

// Location of the scripts
var Scripts : {
    twitter    : '//platform.twitter.com/widgets.js',
    facebook   : 'http://static.ak.fbcdn.net/connect.php/js/FB.Share',
    googleplus : 'https://apis.google.com/js/plusone.js',
    linkedin   : 'http://platform.linkedin.com/in.js'
};

// When the button is clicked all the scripts
// are loaded. The conainers are already
// on the website. They will be filled
// as soon as the script is loaded.
jQuery('a.share-link').click(function(){
    for( var script in Scripts ){
        jQuery.cachedGetScript( Scripts[script] );
    }
});


// Function that get and caches the scripts
jQuery.cachedGetScript = function( script ) {
    if ( !cachedScriptPromises[ script ] ) {
        cachedScriptPromises[ script ] = jQuery.Deferred(function( defer ) {
            jQuery.getScript( script ).then( defer.resolve, defer.reject );
        }).promise();
    }
    return cachedScriptPromises[ script ];
};

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

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



Комментарии
1 ответ

Я считаю, что вам не нужно использовать отложенные объекты jQuery для этой задачи. Просто использовать теги script с источниками - они будут загружаться параллельно с УСР (попробуйте использовать сети CDN, его всегда хорошая идея). Количество параллельных запросов будет ограничено ограничения браузера.

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

2
ответ дан 17 ноября 2011 в 10:11 Источник Поделиться