Блокировка рендеринга с помощью библиотеки jquery и bootstrap

У меня есть файл index.html, где у меня есть библиотека Jquery и библиотека начальной загрузки для загрузки JS в <head> В теге они указываются как причина блокировки рендеринга, где jquery.min.js занимает 932 мс, а bootstrap.min.js 765 мс для загрузки. Здесь я решил загрузить файлы jquery и boostrap после загрузки страницы, следующей за этой статьей. Но так как у меня были и другие зависимые файлы JS, я решил создать массив Javascript и повторить его для создания динамических тегов сценария. Что делает свое дело, но страница не загружается, потому что другие зависимые файлы не находят файл jquery.

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

Примечание: поскольку все js-файлы взяты из кодовой базы, нет смысла использовать defer или async.

Ниже приведен код, который я использую в нижней части страницы, прежде чем </body> тег.

<script type="text/javascript">
        var source = [
            "common/scripts/external/jquery-3.2.1.min.js",
            "common/scripts/external/bootstrap.min.js",
            "common/scripts/other/utility.min.js?v=1.0.0",
            "common/scripts/external/jquery.ui.widget.min.js",
            "common/scripts/external/jquery.fileupload.min.js",
            "common/scripts/external/jquery.fileupload-process.min.js",
            "common/scripts/external/jquery.fileupload-validate.min.js",
            "common/scripts/external/jquery.knob.min.js",
            "common/scripts/external/jquery.payform.min.js"
        ]
        function downloadJSAtOnload(source) {
            for (var i = 0; i < source.length; i++) {
                var element = document.createElement("script");
                element.src = source[i];
                document.body.appendChild(element);
            }

        }
        if (window.addEventListener) {
            window.addEventListener("load", downloadJSAtOnload(source), false);
        } else if (window.attachEvent) {
            window.attachEvent("onload", downloadJSAtOnload(source));
        } else {
            window.onload = downloadJSAtOnload(source);
        } 
    </script>

Ошибки при загрузке страницы:

Пожалуйста, предложите, как правильно решить проблему блокировки рендеринга, и, если это правильное направление, как я могу разрешить Jquery загружаться до загрузки всех остальных файлов?

1 ответ

Вы должны добавить jquery перед этим js-скриптом:

<script src='common/scripts/external/jquery-3.2.1.min.js' async></script>
<script src='common/scripts/external/jquery.ui.widget.min.js' async></script>
<script src='common/scripts/external/jquery.fileupload.min.js' async></script>
<script src='common/scripts/external/jquery.fileupload-process.min.js' async></script>
<script src='common/scripts/external/jquery.fileupload-validate.min.js' async></script>
<script src='common/scripts/external/jquery.knob.min.js' async></script>
<script src='common/scripts/external/jquery.payform.min.js' async></script>
<script type="text/javascript">
        var source = [            
            "common/scripts/external/bootstrap.min.js",
            "common/scripts/other/utility.min.js?v=1.0.0"               
        ]
        function downloadJSAtOnload(source) {
            for (var i = 0; i < source.length; i++) {
                var element = document.createElement("script");
                element.src = source[i];
                document.body.appendChild(element);
            }

        }
        if (window.addEventListener) {
            window.addEventListener("load", downloadJSAtOnload(source), false);
        } else if (window.attachEvent) {
            window.attachEvent("onload", downloadJSAtOnload(source));
        } else {
            window.onload = downloadJSAtOnload(source);
        } 
    </script>

Я думаю, что вы должны вызвать bootstrap перед этим скриптом тоже. проверьте, не работает ли он, и переместите bootstrap.js перед сценарием.

Другие вопросы по тегам