移除阻止呈现的JavaScript

个人原创网址:  http://www.phpthinking.com/archives/443

浏览器必须先解析网页,然后才能将其呈现给用户。如果浏览器在解析过程中遇到系统阻止的外部脚本,必须停止解析并且下载该JavaScript。每次遇到这种情况时,浏览器都会增加一个网络往返过程,这样就会导致首次呈现网页的时间延迟。

建议

建议您以内嵌方式处理呈现首屏区域所需的JavaScript,并让为网页添加其他功能所需的JavaScript延迟加载,直到首屏内容发送完毕为止。请注意,要通过这种方式缩短加载时间,您还必须优化CSS发送过程

内嵌较小的JavaScript

如果外部脚本较小,您可以直接将它们添加到HTML文档。通过这种方式内嵌较小文件可让浏览器继续呈现网页。例如,如果HTML文档如下所示:

<html>  <head>    <scripttype="text/javascript"src="small.js"></script>  </head>  <body>    <div>      Hello, world!
    </div>  </body></html>

资源small.js如下所示:

  /* contents of a small JavaScript file */

那么,您即可按如下这样内嵌脚本:

<html>  <head>    <scripttype="text/javascript">      /* contents of a small JavaScript file */    </script>  </head>  <body>    <div>      Hello, world!
    </div>  </body></html>

这样,您就可以将small.js内嵌在HTML文档中,从而消除对它的外部请求。

延迟加载JavaScript

为防止JavaScript阻止网页加载,建议您在加载JavaScript时使用HTML异步属性。例如:

<script async src="my.js">

如果您的JavaScript资源使用的是document.write,则使用异步加载就会不安全。我们建议您重写使用document.write的脚本,以改用其他技术。

此外,异步加载JavaScript时,如果您的网页加载互相依赖的脚本,请务必谨慎,以确保您的应用以合适的依赖顺序加载脚本。

常见问题解答

  • 如果我使用的是JavaScript库(例如jQuery),该怎么做?
  • 很多JavaScript库(例如jQuery)都可用来增强网页,从而为网页增添额外的互动性、动画和其他效果。不过,这些行为大多可在首屏内容呈现后再安全添加。请考虑是否可以将此类JavaScript的执行和加载延迟到网页加载后。
  • 如果我使用JavaScript框架来构造网页,该如何操作?
  • 如果网页内容由客户端JavaScript构造,那么您应考虑一下是否可以嵌入相关的JavaScript模块,从而避免产生额外的网络往返过程。同样,利用服务器端呈现可显著提升首次网页加载的效果,方式如下:在服务器上呈现JS模板,并将结果内嵌到HTML,然后在应用加载后使用客户端模板。
时间: 2024-08-26 23:53:16

移除阻止呈现的JavaScript的相关文章

css、js的相互阻塞

先决条件:脚本前面存在外部样式 以下试验虽然是在chrome下,但是对于IE8+以及其他浏览器也适用. 1.内联脚本(http://jsbin.com/mudab/1) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JS Bin</title> <script>var start = +new Date;</script&g

Web前端性能分析

Web前端性能通常上代表着一个完全意义上的用户响应时间,包含从开始解析HTML文件到最后渲染完成开始的整个过程,但不包括在输入url之后与服务器的交互阶段.下面是整个过程的各个步骤: 开始解析html文件,从head到body按顺序从上到下. 当解析到head部分的css外部链接时,同步去下载,如果遇到外部js链接也是下载 接着解析body部分,边解析边开始生成对应的DOM树,同时等待css文件下载 等到css文件下载完毕,那么就同步去用已经生成的DOM节点+css去生成渲染树 渲染树生成结构模

软件測试基本方法(六)之集成測试和系统測试

在软件开发中.常常会遇到这种情况.单元測试时确认每一个模块都能单独工作,但这些模块集成在一起之后会出现有些模块不能正常工作.比如,在chrome环境下用js写了一个实时捕捉video中特定区域的模块,正常工作:利用worker线程进行webgl场景渲染,也正常.但是当两个运算合并时.出现一个模块不能正常执行,原因在于两个模块不适合在worker线程中结合.基于worker本身的局限性,仅仅能有一个模块正常工作. 所以,非常有必要进行集成測试. (1)集成測试定义: 集成測试是将软件集成起来,对模

前台页面优化全攻略(四)

通过前几篇文章,你应该已经掌握了很多优化网站的方法.现在你的网站加载速度已经很快了,但是你必须持续的监控你的网站,了解它的大小变化,要不然一段时间过去之后,它可能又成为了一个胖子. 如今每个页面平均已经达到1.7M,每年增长大概32%.你可以通过以下几个工具来查看你的网站是不是又在暴饮暴食,而且它们都是免费的. 1. Pingdom Pingdom是我喜欢的一个在线测试工具.它会揭露出所以你想知道的细节,你可以一清二楚的看到网站的现状:重量.加载速度.代码分析.性能评分.开发者建议,它还提供了一

软件测试基本方法(六)之集成测试和系统测试

在软件开发中,经常会遇到这样的情况,单元测试时确认每个模块都能单独工作,但这些模块集成在一起之后会出现有些模块不能正常工作.例如,在chrome环境下用js写了一个实时捕捉video中特定区域的模块,正常工作:利用worker线程进行webgl场景渲染,也正常:可是当两个运算合并时,出现一个模块不能正常运行,原因在于两个模块不适合在worker线程中结合,基于worker本身的局限性,只能有一个模块正常工作.所以,很有必要进行集成测试. (1)集成测试定义: 集成测试是将软件集成起来,对模块之间

前端性能优化(七)

PageSpeed 规则和建议 删除阻止呈现的 JavaScript 和 CSS 若要尽快完成首次呈现,您需要尽量减少甚至删除(如果有可能)网页所呈现关键资源的数量.尽量减少下载的关键字节数以及尽量缩短关键路径的长度. 优化 JavaScript 的使用 默认情况下,JavaScript 资源会阻止解析器,除非将其标为 async,或者使用特殊的 JavaScript 代码段进行添加.阻塞解析器的 JavaScript 强制浏览器等待 CSSOM,并暂停 DOM 的构建,继而大大延迟首次呈现的时

前台页面优化全攻略(四)

如今每个页面平均已经达到1.7M,每年增长大概32%.你可以通过以下几个工具来查看你的网站是不是又在暴饮暴食,而且它们都是免费的. 1. Pingdom Pingdom是我喜欢的一个在线测试工具.它会揭露出所以你想知道的细节,你可以一清二楚的看到网站的现状:重量.加载速度.代码分析.性能评 分.开发者建议,它还提供了一个历史的时间轴帮你查看网站瘦身的成果.如果你只想用一个工具完成所有的检测,Pingdom再合适不过了. 2. Firefox Web Developer Add-on Web De

软件测试基本方法_之集成测试和系统测试

转:https://blog.csdn.net/BlueCloudMatrix/article/details/31821203 (建议打开链接看) 在软件开发中,经常会遇到这样的情况,单元测试时确认每个模块都能单独工作,但这些模块集成在一起之后会出现有些模块不能正常工作.例如,在chrome环境下用js写了一个实时捕捉video中特定区域的模块,正常工作:利用worker线程进行webgl场景渲染,也正常:可是当两个运算合并时,出现一个模块不能正常运行,原因在于两个模块不适合在worker线程

浏览器内核、引擎、页面呈现原理及其优化

浏览器内核.引擎.页面呈现原理及其优化 介绍浏览器内核.JavaScript 引擎以及页面呈现原理等基础知识,同时根据原理提出页面呈现优化方案. 浏览器内核 浏览器内核又叫渲染引擎,主要负责 HTML.CSS 的解析,页面布局.渲染与复合层合成.浏览器内核的不同带来的主要问题是对 CSS 的支持度与属性表现差异. 现在主流的内核有:Blink.Webkit.Gecko.EdgeHTML.Trident,这里面有几个需要注意的地方: Blink 是在 Webkit 的基础上的改进,是现在对新特性支