Почему так долго грузит скрипт метрики и jquery?


#1

после обновления заметил интересную картину: Метрика и jQuery CDN вместе весят меньше пикселя Фейсбука, а систему вешают гораздо ощутимее. Кто-нибудь знает работающий рецепт?


PageSpeed Insights PageSpeed Insights отображает непонятные данные!
#2

У вас еще быстро :slight_smile:

Не совсем понимаю: скорость ответа/загрузки jQuery CDN - это же по больше части относится к хостингу?

Тема Uni2, хостинг @zahidhost :


PageSpeed Insights PageSpeed Insights отображает непонятные данные!
#3

Обратите внимание что загрузка скрипта происходит с внешнего CDN сервиса code.jquery.com , потому к хостингу отношения оно не имеет. Для своих пользователей рекомендуем использовать локальные файлы так как по умолчанию мы уже используем свой CDN сервис который менее нагружен чем публичные.


#5

А что это за магия в файле scripts.tpl? Не очень понятно. Как его скорректировать правильно, чтобы jquery загружались со своего CDN Zahist?

{if !$config.tweaks.dev_js}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
        crossorigin="anonymous"
        data-no-defer
></script>
<script src="https://code.jquery.com/jquery-migrate-3.0.1.min.js"
        integrity="sha256-F0O1TmEa4I8N24nY0bya59eP6svWcshqX1uzwaWC4F4="
        crossorigin="anonymous"
        data-no-defer
></script>
<script data-no-defer>
    if (!window.jQuery) {
        document.write('{script src="js/lib/jquery/jquery-3.3.1.min.js" no-defer=true escape=true}');
        document.write('{script src="js/lib/jquery/jquery-migrate-3.0.1.min.js" no-defer=true escape=true}');
    }
</script>
{/if}

{scripts}

{if $config.tweaks.dev_js}
    {script src="js/lib/jquery/jquery-3.3.1.min.js"}
    {script src="js/lib/jquery/jquery-migrate-3.0.1.min.js"}
{/if}

#6

Попробуйте поменять

{if !$config.tweaks.dev_js}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
        crossorigin="anonymous"
        data-no-defer
></script>
<script src="https://code.jquery.com/jquery-migrate-3.0.1.min.js"
        integrity="sha256-F0O1TmEa4I8N24nY0bya59eP6svWcshqX1uzwaWC4F4="
        crossorigin="anonymous"
        data-no-defer
></script>
<script data-no-defer>
    if (!window.jQuery) {
        document.write('{script src="js/lib/jquery/jquery-3.3.1.min.js" no-defer=true escape=true}');
        document.write('{script src="js/lib/jquery/jquery-migrate-3.0.1.min.js" no-defer=true escape=true}');
    }
</script>
{/if}

на

{if !$config.tweaks.dev_js}
    {script src="js/lib/jquery/jquery-3.3.1.min.js"}
    {script src="js/lib/jquery/jquery-migrate-3.0.1.min.js"}
{/if}

Нужно будет скинуть кэш


#7

Попробовал заменить - не работает. Просто перестают скрипты грузиться. Только текст и стили.


#8

Киньте сюда все содержимое файла, которое у вас получилось


#9
{*
{if !$config.tweaks.dev_js}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
        crossorigin="anonymous"
        data-no-defer
></script>
<script src="https://code.jquery.com/jquery-migrate-3.0.1.min.js"
        integrity="sha256-F0O1TmEa4I8N24nY0bya59eP6svWcshqX1uzwaWC4F4="
        crossorigin="anonymous"
        data-no-defer
></script>
<script data-no-defer>
    if (!window.jQuery) {
        document.write('{script src="js/lib/jquery/jquery-3.3.1.min.js" no-defer=true escape=true}');
        document.write('{script src="js/lib/jquery/jquery-migrate-3.0.1.min.js" no-defer=true escape=true}');
    }
</script>
{/if}
*}

{if !$config.tweaks.dev_js}
{script src="js/lib/jquery/jquery-3.3.1.min.js"}
{script src="js/lib/jquery/jquery-migrate-3.0.1.min.js"}
{/if}

{scripts}

{if $config.tweaks.dev_js}
    {script src="js/lib/jquery/jquery-3.3.1.min.js"}
    {script src="js/lib/jquery/jquery-migrate-3.0.1.min.js"}
{/if}

{script src="js/lib/jqueryui/jquery-ui.custom.min.js" no-defer=true}

{script src="js/lib/modernizr/modernizr.custom.js"}
{script src="js/tygh/core.js"}
{script src="js/tygh/ajax.js"}
{script src="js/tygh/history.js"}
{script src="js/lib/autonumeric/autoNumeric.js"}
{script src="js/lib/appear/jquery.appear-1.1.1.js"}

{if !$runtime.customization_mode.live_editor}
{script src="js/lib/tools/tooltip.min.js"}
{/if}

{script src="js/tygh/editors/`$settings.Appearance.default_wysiwyg_editor`.editor.js"}

{script src="js/tygh/responsive.js"}

{if $runtime.customization_mode.live_editor}
{script src="js/lib/autosize/jquery.autosize.js"}
{script src="js/tygh/live_editor_mode.js"}
{/if}

<script type="text/javascript">
(function(_, $) {

_.tr({
    cannot_buy: '{__("cannot_buy")|escape:"javascript"}',
    no_products_selected: '{__("no_products_selected")|escape:"javascript"}',
    error_no_items_selected: '{__("error_no_items_selected")|escape:"javascript"}',
    delete_confirmation: '{__("delete_confirmation")|escape:"javascript"}',
    text_out_of_stock: '{__("text_out_of_stock")|escape:"javascript"}',
    items: '{__("items")|escape:"javascript"}',
    text_required_group_product: '{__("text_required_group_product")|escape:"javascript"}',
    save: '{__("save")|escape:"javascript"}',
    close: '{__("close")|escape:"javascript"}',
    notice: '{__("notice")|escape:"javascript"}',
    warning: '{__("warning")|escape:"javascript"}',
    error: '{__("error")|escape:"javascript"}',
    empty: '{__("empty")|escape:"javascript"}',
    text_are_you_sure_to_proceed: '{__("text_are_you_sure_to_proceed")|escape:"javascript"}',
    text_invalid_url: '{__("text_invalid_url")|escape:"javascript"}',
    error_validator_email: '{__("error_validator_email")|escape:"javascript"}',
    error_validator_phone: '{__("error_validator_phone")|escape:"javascript"}',
    error_validator_phone_mask: '{__("error_validator_phone_mask")|escape:"javascript"}',
    error_validator_integer: '{__("error_validator_integer")|escape:"javascript"}',
    error_validator_multiple: '{__("error_validator_multiple")|escape:"javascript"}',
    error_validator_password: '{__("error_validator_password")|escape:"javascript"}',
    error_validator_required: '{__("error_validator_required")|escape:"javascript"}',
    error_validator_zipcode: '{__("error_validator_zipcode")|escape:"javascript"}',
    error_validator_message: '{__("error_validator_message")|escape:"javascript"}',
    text_page_loading: '{__("text_page_loading")|escape:"javascript"}',
    error_ajax: '{__("error_ajax")|escape:"javascript"}',
    text_changes_not_saved: '{__("text_changes_not_saved")|escape:"javascript"}',
    text_data_changed: '{__("text_data_changed")|escape:"javascript"}',
    placing_order: '{__("placing_order")|escape:"javascript"}',
    file_browser: '{__("file_browser")|escape:"javascript"}',
    browse: '{__("browse")|escape:"javascript"}',
    more: '{__("more")|escape:"javascript"}',
    text_no_products_found: '{__("text_no_products_found")|escape:"javascript"}',
    cookie_is_disabled: '{__("cookie_is_disabled")|escape:"javascript"}',
    insert_image: '{__("insert_image")|escape:"javascript"}',
    image_url: '{__("image_url")|escape:"javascript"}',
    loading: '{__("loading")|escape:"javascript"}'
});

$.extend(_, {
    index_script: '{$config.customer_index|escape:javascript nofilter}',
    changes_warning: /*'{$settings.Appearance.changes_warning|escape:javascript nofilter}'*/'N',
    currencies: {
        'primary': {
            'decimals_separator': '{$currencies.$primary_currency.decimals_separator|escape:javascript nofilter}',
            'thousands_separator': '{$currencies.$primary_currency.thousands_separator|escape:javascript nofilter}',
            'decimals': '{$currencies.$primary_currency.decimals|escape:javascript nofilter}'
        },
        'secondary': {
            'decimals_separator': '{$currencies.$secondary_currency.decimals_separator|escape:javascript nofilter}',
            'thousands_separator': '{$currencies.$secondary_currency.thousands_separator|escape:javascript nofilter}',
            'decimals': '{$currencies.$secondary_currency.decimals|escape:javascript nofilter}',
            'coefficient': '{$currencies.$secondary_currency.coefficient}'
        }
    },
    default_editor: '{$settings.Appearance.default_wysiwyg_editor}',
    default_previewer: '{$settings.Appearance.default_image_previewer}',
    current_path: '{$config.current_path|escape:javascript nofilter}',
    current_location: '{$config.current_location|escape:javascript nofilter}',
    images_dir: '{$images_dir}',
    notice_displaying_time: {if $settings.Appearance.notice_displaying_time}{$settings.Appearance.notice_displaying_time}{else}0{/if},
    cart_language: '{$smarty.const.CART_LANGUAGE}',
    language_direction: '{$language_direction}',
    default_language: '{$smarty.const.DEFAULT_LANGUAGE}',
    cart_prices_w_taxes: {if ($settings.Appearance.cart_prices_w_taxes == 'Y')}true{else}false{/if},
    regexp: [],
    current_url: '{$config.current_url|fn_url|escape:javascript nofilter}',
    current_host: '{$config.current_host|escape:javascript nofilter}',
    init_context: '{$smarty.request.init_context|escape:javascript nofilter}',
    phone_validation_mode: '{$settings.Appearance.phone_validation_mode}'
});

{if $live_editor_objects}
    $.extend(_, {
        live_editor_mode: true,
        live_editor_objects: {$live_editor_objects|json_encode nofilter}
    });
{/if}

{if !$smarty.request.init_context}

    $(document).ready(function(){
        $.runCart('C');
    });

{/if}

{if $config.tweaks.anti_csrf}
    // CSRF form protection key
    _.security_hash = '{""|fn_generate_security_hash}';
{/if}
}(Tygh, Tygh.$));
</script>

{script src="js/lib/maskedinput/jquery.maskedinput.min.js"}

{script src="js/lib/inputmask/jquery.inputmask.min.js"}
{script src="js/lib/jquery-bind-first/jquery.bind-first-0.2.3.js"}
{script src="js/lib/inputmask-multi/jquery.inputmask-multi.js"}
{script src="js/lib/owlcarousel/owl.carousel.min.js"}

{script src="js/tygh/phone_mask.js"}


{hook name="index:scripts"}
{/hook}

{/scripts}

#10

Должно работать. Кэш весь почистили? Не только шаблоны, но и системный?


#11

Да, кэш чистил удалением папки cash. Отправил вам личное сообщение.


#12

Заработало, но немного по другому нужно было:

{if !$config.tweaks.dev_js}
    <script src="js/lib/jquery/jquery-3.3.1.min.js"></script>
    <script src="js/lib/jquery/jquery-migrate-3.0.1.min.js"></script>
{/if}

JQuery теперь грузиться с локальной установки, но вот время выполнения jquery-3.3.1.min.js ну очень долгое. От чего это зависит?


#13

Приветствую! Вам удалось решить вопрос с долгим временем?


#14

тоже, кстати, интересно


#15

А кто подскажет что сделать с этим скриптом(чат) чтобы он не мешал загрузке? например грузился через 3 секунды после того как загрузился сайт.

<script>
window.replainSettings = { id: 'de2afea5-6711-4a66-bd24-4b0235d64d80' };
(function (u){var s=document.createElement('script');s.type='text/javascript';s.async=true;s.src=u;
var x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);
})('https://widget.replain.cc/dist/client.js');
</script>

#16

То же самое, переделал запуск jquery с локальной установки, картина как на скрине выше. Мне кажется только хуже стало.


#17

Сделал вызов с CDN Яндекса:
<script src="https://yastatic.net/jquery/3.3.1/jquery.min.js"></script>

Вроде получше стало. У кого на хостинге нет своего CDN, лучше наверное оставить стандартный код, у самого JQuery код уже на CDN расположен.


#18

Здраствуйте. Также сделала такое улучшение, как тут написано:
{if !$config.tweaks.dev_js}
script asynс src=“js/lib/jquery/jquery-3.3.1.min.js”>
script async src=“js/lib/jquery/jquery-migrate-3.0.1.min.js”>
{/if}

но еще добавила, async, для оптимизации в скрипт и после чего jquery не подгружает и пропал баннер и карусели а по логике должно адекватно работать?


#19

Нужно быть осторожным с async для jQuery. Т. к. практически все скрипты завязаны на него. И он должен загружаться перед всеми ними для их корректной работы.


#20

Спасибо за рекомендации)


#21

Добрый день,

Как решили проблему долгой загрузки jQuery CDN? Сейчас это один из главных факторов, на которые ругается Google Pagespeed Insights. Время блокировки основного потока показывает 10-20 сек.