2015-07-10 1 views
1

Если вы хотите ускорить первоначальную загрузку одного из наших сайтов, у нас есть весь наш javascript в комбинированном файле, довольно большой - около 90 КБ. Все инструменты анализа там говорят: «Вы должны переключиться на async, чтобы у вас не было JavaScript-блока вашего веб-сайта».Объединение jQuery + пользовательский скрипт с асинхронным или нет?

Это то, что мы имеем перед тегом тела закрытия сегодня

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 
<script src="/js/script.js"></script> 

Наш сценарий зависит от JQuery. Итак, мой вопрос: лучше ли иметь скрипт около 200kb, то есть jQuery, связанный с нашим скриптом, поэтому мы знаем, что jQuery загружается перед нашим собственным скриптом и загружает его асинхронно или есть другой способ обойти это без привлечения слишком многие сторонние решения, такие как headjs, reactjs и т.д.

Помещенный в коде, это

<script src="/js/combined.js" async></script> 

лучше, чем это

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 
<script src="/js/script.js" async></script> 

помогает ли это какой-либо, если мы сохраним JQuery синхронизации, и поставить наш сценарий асинхронный или опасен в том смысле, что мы не можем точно знать, что jQuery загружен до нашего?

Или, как не-решение, мы просто не заботимся об этом и сосредоточимся на других вещах, то есть действительно ли стоит выиграть этот последний выигрыш в производительности?

Любые идеи были бы очень признательны.

+0

@Adergarrd Когда вы говорите, «все наши JavaScript», вы имеете в виду для всего сайта? E.G более одной страницы? – bassxzero

+0

Да. По многим причинам у нас есть базовая логика нашего приложения в одном, довольно большом (90kb) js-файле. Графики для статистики, datetimepickers и т. Д., У нас есть вне сценария, и они загружаются на нужные им страницы. Это не проблема. Проблема в том, как мы достигаем async без прерывания последовательности. – Adergaard

+0

@Adergarrd - это ужасная идея зацикливаться до (window.jQuery! == undefined) в верхней части вашего пользовательского js-файла? – bassxzero

ответ

0

Лучшим подходом является использование загрузчика сценариев, такого как RequireJS или Head.JS. Например, с Head.JS:

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/headjs/1.0.3/head.min.js"></script> 

<script type="text/javascript"> 
    head.js(
    "//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js", 
    "/js/script.js", 

    function() { 
     startMyCode(); 
    } 
); 
</script> 

RequireJS является немного более мощным, что он не выполняет скрипт в порядке, но по зависимости, но требует, чтобы организовать свой код в модулях (в отличие от головы. JS, которые вы можете использовать без каких-либо изменений в вашем коде).

EDIT: На самом деле, может быть, лучше идти с $script.js, учитывая, что Head.JS представляется, не поддерживается больше. Чтобы прояснить - что это такое - это управлять асинхронной загрузкой для вашего кода, а затем убедиться, что он выполняется в правильном порядке, когда все биты загружаются (либо последовательно, как и Head.JS, либо каким-то образом на основе зависимостей).

+0

Возможно, мой вопрос не был понятен, но основная проблема заключается в том, чтобы перенести наши скрипты на асинхронную загрузку. Ваше решение все еще загружает синхронно afaik. Спасибо еще. – Adergaard

+0

Нет, единственной синхронной нагрузкой является 'head.js', которая действительно маленькая. Первоначально я пропустил, что вы не хотите привлекать стороннее программное обеспечение, но это действительно лучший выбор здесь. – Amadan