Отложить разбор JavaScript - скорость страницы Google

Все мои файлы JavaScript уже находятся внизу, но Google Page Speed ​​дает это предложение для повышения скорости:

Отложить разбор JavaScript

88.6KiB JavaScript анализируется при начальной загрузке страницы. Перенести разбор JavaScript для уменьшения блокировки отображения страницы. http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js(76.8KiB) http://websiteurl/js/plugins.js (11.7KiB) http://websiteurl/(109B встроенного JavaScript)

Это мой html (пример)

<html>
<head>
<!--[if lt IE 9]><script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<head>
<body>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.5.1.min.js"%3E%3C/script%3E'))</script>
    <script src="js/plugins.js"></script>
    <script>$(document).ready(function() {
            $("#various2").fancybox({
                'width': 485,
                'height': 691,
            });
        });</script>
    </body>
    </html>

Что делать, чтобы увеличить производительность, используя defer?

Это только для Google хром или для всех?

Ответы

Ответ 1

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

Также используйте предварительную выборку dns в голове, чтобы установить базовый домен для google-code

<link rel="dns-prefetch" href="//ajax.googleapis.com">

Так как это всего лишь небольшой фрагмент кода, вы можете просто добавить его в свой файл plugins.js внизу, а затем отложить файл плагинов.

<script src="js/plugins.js" defer></script>

Что бы я ни делал, все мои сайты оптимизированы до 98 и 97 соответственно в yslow и скорости страницы.

Надеюсь, что это поможет.

-V

Ответ 2

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

Что касается встроенного Javascript, то я должен изменить все атрибуты type на text/deferred-javascript или что-то подобное, чтобы код в теге script не оценивался во время загрузки страницы. Затем я присоединяю функцию к событию onload; указанная функция находит все скрипты, соответствующие указанному выше типу, и оценивает код внутри с помощью eval(). Я вообще знаю, что eval() является злом, но, похоже, он здесь полезен.

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

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

Ответ 3

Это, вероятно, общий ответ/предложение, когда он сталкивается с определенным уровнем производительности.

Хотя в нем конкретно упоминается jQuery, плагин и 109 байтов встроенного JavaScript. У вас есть встроенный JavaScript? Вы также размещаете свой JavaScript в нижней части <body>?

Пример

Загрузка статьи о производительности

EDIT:

На основе недавно опубликованного HTML...

В качестве теста удалите эти два элемента, чтобы узнать, не имеет значения:

<!--[if lt IE 9]><script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->


<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.5.1.min.js"%3E%3C/script%3E'))</script>


Кроме того, в предупреждающем сообщении упоминается 109 байтов встроенного JS, но я не вижу ничего подобного в опубликованном HTML.

Ответ 4

Я получаю ту же проблему с Pagespeed - я предполагаю, что Pagespeed Analyzer не проверяет, находится ли Javascript в конце тела.

Ответ 5

Привет, недавно мы создали инфраструктуру opensource nodejs под названием "элегантная структура", которая помогает вам создавать быстрое веб-приложение, и нам удалось получить 100% скорость страницы Google на рабочем столе и на мобильных устройствах на всех страницах: вы можете проверить его по адресу:

https://developers.google.com/speed/pagespeed/insights/?url=getelegant.com

есть много вещей, которые вы можете узнать из него, просмотрев источник страницы и, если что-либо, что вы не можете понять, прокомментируйте, чтобы я мог помочь вам с

пока вы можете попробовать этот метод:

// Load script element as a child of the body
function loadJS(src, callback) {
    var script = document.createElement("script");
    script.type = "text/javascript";
    if (script.readyState) {  //IE
        script.onreadystatechange = function () {
            if (script.readyState == "loaded" || script.readyState == "complete") {
                script.onreadystatechange = null;
                if (callback) {
                    callback();
                }
            }
        };
    } else {  //Others
        script.onload = function () {
            if (callback) {
                callback();
            }
        };
    }
    script.src = src;
    document.body.appendChild(script);
}
// Load style element as a child of the body
function loadCSS(href,callback) {
    var element = document.createElement("link");
    element.rel = "stylesheet";
    if (element.readyState) {  //IE
        element.onreadystatechange = function () {
            if (element.readyState == "loaded" || script.readyState == "complete") {
                element.onreadystatechange = null;
                if (callback) {
                    callback();
                }
            }
        };
    } else {  //Others
        element.onload = function () {
            if (callback) {
                callback();
            }
        };
    }
    element.href = href;
    document.body.appendChild(element);
}
// Load All Resources
function loadResources() {
    // css
    loadCSS("/compressed/code-mirror-style.css?please1");
    loadCSS("/compressed/all.css?please2");

    // js
    loadJS("/compressed/code-mirror.js", function () {
        loadJS("/compressed/common.js", function () {
            $("[data-lang]").each(function () {
                var code = $(this).addClass("code").text();
                $(this).empty();

                var myCodeMirror = CodeMirror(this, {
                    value: code,
                    mode: $(this).attr("data-lang"),
                    lineNumbers: !$(this).hasClass('inline') && !$(this).hasClass('no-numbers'),
                    readOnly: true
                });
            });
        });
    });
}

// Check for browser support of event handling capability
if (window.addEventListener) {
    window.addEventListener("load", loadResources, false);
} else if (window.attachEvent) {
    window.attachEvent("onload", loadResources);
} else {
    window.onload = loadResources
}

Ответ 6

Добавьте тег <script type="text/javascript" defer="defer">, как это работает для меня.

<script type="text/javascript" defer="defer" src="<?php echo $this->getSkinUrl();?>js/jquery.bxslider.js"></script>