медленно загружаемый javascript include блокирует остальную часть сайта

У меня есть сайт со сторонним Javascript, поступающим с внешнего URL-адреса. Однако он часто загружается очень медленно (если вообще загружается). Это служба отслеживания, используемая нашей маркетинговой командой, поэтому я не могу ее удалить (я предложил!).

В настоящее время он включен в конец моего шаблона страницы с очень простым

<script src='http://remoteurl/'></script>

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

Таким образом, проблемы с производительностью внешнего сайта вызывают проблемы на нашем сайте.

Разочаровывает то, что сайту не нужен этот скрипт для загрузки, чтобы все остальное функционировало. Итак, есть ли способ загрузить его так, чтобы он не блокировал запуск остальных скриптов сайта в случае сбоя?

(Я пробовал использовать атрибут defer, но, хотя это влияет на последовательность выполнения, это не меняет того факта, что все должно загружаться до того, как что-то произойдет)

Спасибо за любой совет.


person Spudley    schedule 19.02.2010    source источник


Ответы (2)


Можете ли вы добавить код в самый конец страницы, который добавляет тег скрипта на страницу, вместо того, чтобы добавлять тег скрипта вручную? Вот как Google Analytics обрабатывает это. Таким образом, остальная часть (вашего) кода запускается еще до того, как код трекера будет добавлен на страницу.

Образец:

<script type="text/javascript">
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>

<script type="text/javascript">
    try {
        var pageTracker = _gat._getTracker("tracker-id-removed");
        pageTracker._trackPageview();
    } catch (err) { }
</script>
person tvanfosson    schedule 19.02.2010

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

person Nick Craver    schedule 19.02.2010
comment
Я знаю несколько КРУПНЫХ популярных веб-сайтов, которые делают это. - person No Refunds No Returns; 19.02.2010