当前位置: 首页 > 知识库问答 >
问题:

渲染块延迟与底部移动脚本

艾星河
2023-03-14

我假设在底部移动脚本与使用defer或async属性相同。由于defer和async不完全兼容传统浏览器,因此我选择在页面底部加载脚本。

<html>
<body>
<!-- whole block of html -->
<script type='text/javascript' src='app.js'></script>
</body>
</html>

在此之前,我运行了性能基准测试工具,如GTmetrix和Google PageSpeed insight。两者都显示“渲染阻塞”参数是主要问题。我现在有点困惑,因为即使我移动了底部的这些脚本以允许首先加载内容/html;这些工具仍然报告渲染阻塞是一个主要问题。

我确实看过其他StackOverflow文章,强调尽管底部加载的脚本必须具有“defer”属性。

我有几个问题:

  1. 以上是真的吗?
  2. 这些工具是否专门寻找延迟或异步属性?
  3. 如果我必须给出一个回退w. r. t延迟(特别是对于IE浏览器),我需要使用条件语句来加载IE的非失败脚本吗?

请建议最好的方法。先谢谢你。

共有3个答案

柯河
2023-03-14

根据HTML规范1.1,HTML页面中的脚本块将阻止页面的呈现,直到下载并处理url中的javascript文件。

在页面末尾添加脚本:允许浏览器继续页面呈现,因此用户将能够尽快看到页面呈现。

[首选]向脚本标记添加延迟:向浏览器promise脚本中不包含任何document.write或document-changing代码,从而允许它继续呈现。

因为前面的线程可能对您有用

使用“延迟”属性时是否需要将脚本放在页面底部?

唐宏壮
2023-03-14

而不是async,也许像这样的东西(感谢@guest271314的想法)

<!DOCTYPE html>
<html>
<body>
<!-- whole block of  html -->

<!-- inline scripts can't have async -->
<script type='text/javascript'>
function addScript(url){
document.open();
document.write("<scrip" + "t src = \"" + url + "\"></scr" + "ipt>");//weird quotes to avoid confusing the HTML parser
document.close();
}
//add your app.js last to ensure all libraries are loaded
addScript("jquery.js");
addScript("lodash.js");
addScript("app.js");
</script>
</body>
</html>

这是你想要的吗?您可以在文档中添加asyncdefer属性。如果需要,可以编写调用。

乐正瑞
2023-03-14

>

不,这些工具寻找解析的完成

根据您想要支持的IE版本,他们会有不同的建议

现在解释一下简单的脚本延迟异步,以帮助您理解原因:

脚本简单

异步如果您将使用Async,那么脚本将不会停止下载解析,因为它将继续与其余html内容并行下载。但是,脚本将停止解析以执行,只有在执行之后,html的解析才会继续或完成

Defer如果您使用Defer,脚本将不会停止下载或执行脚本时对html数据的解析。所以这是避免网页加载时间增加的最佳方式。

请注意,“延迟”有助于减少html的解析时间,但在每个Web设计流程中并不总是最好或合适的,所以使用它时要小心。

 类似资料:
  • 问题内容: 我有一个React组件,其中有许多子组件。我不希望立即渲染子组件,而是要经过一段时间的延迟(对于每个子组件而言,它们是统一的还是不同的)。 我想知道-有没有办法做到这一点? 问题答案: 我认为最直观的方法是给孩子一个“ wait” ,在从父代传递过来的持续时间内隐藏该组件。通过将默认状态设置为隐藏,React仍会立即渲染组件,但是直到状态更改后它才可见。然后,您可以设置为调用一个函数,

  • 到目前为止我们实现的延迟渲染效果还算不错,但是当你将相机靠近物体观察时会出现在上一课的结尾提到的问题。第一个问题就是由于背面剔除的存在,当相机进入到光源体之后这个光源的光照效果就会消失。第二个问题则与光源的范围有关,这是因为在将光源的包围球投影到屏幕坐标系之后,我们会对被这个球体覆盖的所有像素都进行光照计算,即使这个像素离光源很远(也就是位于光源体之外)。 OpenGL 中的模板缓存可以帮助我们解

  • 在前面的课程中我们学习了延迟渲染的基础部分,而且将几何阶段的结果输出到了 G-Buffer 中。如果你运行了演示程序你就知道 G-Buffer 里面的内容是什么了。今天我们将完成延迟渲染的基本实现,并且使得最后渲染出来的场景看起来和使用正向渲染的结果一样!在这一课的最后会有一个问题显现出来,这个问题将在下一课中解决。 现在 G-buffer 中已经存放和合适的数据,我们要借助于它们来进行光照计算。

  • 从第十七课起到目前为止,我们所做的光照计算都叫做前向渲染(着色),这是一个十分直接的方式,我们在 VS 中对所有对象的顶点进行一系列的变换(这些变换通常是将顶点法线和顶点位置变换到裁剪空间中),之后在 FS 中逐像素进行光照计算。由于每个像素都只调用 FS 一次,所以当我们逐像素的计算每个像素的光照效果时,我们需要将所有的光照信息都传递到 FS 中。这个方法十分简单但是却有一些缺陷,如果场景十分复

  • UIView animateWithDuration的文档称,在动画期间,所有用户交互都被阻止。但我想知道它是否也会在预动画延迟期间阻塞。 文件上说 “在动画制作过程中,将暂时禁用正在制作动画的视图的用户交互。(在iOS 5之前,将禁用整个应用程序的用户交互。)如果希望用户能够与视图交互,请在选项参数中包含UIViewAnimationOptionAllowUserInteraction常量。"