速度优化:使用异步优化渲染阻止脚本

问题描述

https://bm-translations.de(完全自编码,没有cms等)上,我试图消除<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>的渲染阻塞。 Defer无法正常工作,因为页面<script src="globaljs.js"></script>的末尾还有另一个脚本,其中包含Bootstrap和jquery延迟加载等,以及其后的内联Javascript。我以为我可以给所有人async。起初,我认为它可以正常工作,但有时(如随机显示如下:

我想知道是否还有其他选项或方法可以确保在页面底部的脚本之前加载渲染阻止jQuery,但没有渲染阻止?

解决方法

您可以使用以下方法按顺序依次加载带有诺言的脚本。

在DOMContentLoaded上,按顺序加载脚本并异步加载脚本,您可以使用ES6 Promise。

示例代码:

document.addEventListener('DOMContentLoaded',async function(event) {
    await loadScript("https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js");
    await loadScript("globaljs.js");
});

function loadScript(src) {
    return new Promise((resolve,reject) => {
        let file = document.createElement('script');
        file.src = src;
        document.body.appendChild(file);
        file.onload = file.onreadystatechange = function() {
            resolve(true);
        };
    });
}
,

bm-translations.de不需要优化jquery加载,个人观点。 jQuery脚本不会阻止渲染,它已经放在底部

据我了解,在页面底部有两个脚本。第一个是jquery,第二个是动态的,由服务器端分别为每个页面生成,它将动态行为连接到HTML

BTW-将JS放在</body>结束标记之前的可能替代方法:

  • 构建脚本
    • 仅通过脚本连接脚本(对于旧项目,这可能会很好地工作)
    • 使用browserifywebpack
  • 使用RequireJS可以处理异步脚本加载和加载依赖项
  • 编写保证加载顺序的自定义JS

但是所有这些方法似乎不适用于bm-translations.de

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...