我的网站使用RequireJS加载其他脚本。不幸的是,页面是作为HTML片段提供的独立小应用程序的组合(实际上它是一个Java ),其中一些包含依赖于RequireJS模块的内联脚本。
问题是,当RequireJS在底部加载时,主体中的应用程序无法使用它,因为它还不可用。
所以我们想出了两个解决方案:
<head>标记head的第一个<script>中定义一个承诺变量requireJsLoadedPromise,该变量将在加载RequireJS后解析。由于它是第一个脚本,每个应用程序都可以注册一个处理程序,一旦RequireJS可用,它就会被调用。脚本可以这样使用:requireJsLoadedPromise.then(requirejs => requirejs(['my/module'], /* ... */);如您所见,解决方案2更复杂,是一种非标准解决方案,只适用于专门为其设计的应用程序。由于附加的承诺处理程序,它还会导致更多的嵌套。此外,它还会导致类似于解决方案1的<head>中的脚本,因此在页面加载性能方面可能与解决方案1一样糟糕。
我想知道解决方案1的缺点是什么。如果在头中加载RequireJS会对页面加载性能产生明显的影响,这可能会证明解决方案2是合理的。但我宁愿假设RequireJS在加载过程中所做的工作很少,并且将在脚本开始调用requirejs()时立即执行其主要工作。不过,我不太确定。
移动到<head>会产生明显的影响吗?
对于这个问题,还有什么更好的解决办法吗?
发布于 2021-07-28 13:21:11
我们在这个项目中也遇到了类似的问题。
我们实现了类似于Google DataLayer的机制。在页面的开头,我们做了一个与RequireJS具有相同API的小脚本,但是它只是排队等待脚本,直到真正的RequireJS加载。加载后,它弹出每个项目并调用真正的RequireJS。
如果你有更多的问题,请随便问。
https://stackoverflow.com/questions/68526589
复制相似问题