`

js脚本阻塞

阅读更多
本文翻译整理自:http://yuiblog.com/blog/2008/07/22/non-blocking-scripts/
     所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等。直到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容。为了提高用户体验,新一代浏览器都支持并行下载JS,但是JS下载仍然会阻塞其它资源的下载(例如.图片,css文件等)
外部js脚本加载的时候常常会遇到脚本阻塞的问题,有什么解决方法呢?

1.there is an easy way to work around this problem: use dynamic scripts tags and load scripts in parallel, improving the page loading speed and the user experience.使用动态script 标签,并行加载script,提高页面加载速度。
var js = document.createElement('script');
js.src = 'myscript.js';
var head = document.getElementsByTagName('head')[0];
head.appendChild(js);


2.当然还有一种方法就是:把脚本放在页面最底端,</body>标签前。

同理,不影响ie中加载样式表时间,但是在ff中能提高加载时间,可以这样解决:
var h = document.getElementsByTagName('head')[0];
var link = document.createElement('link');
link.href = 'mycss.css';
link.type = 'text/css';
link.rel = 'stylesheet';
h.appendChild(link);


文中还指出了其他防止阻塞的几种方法:
3.Using defer attribute of the script tag使用defer属性(IE有效)
4.使用eval()--不安全,非常耗性能,不赞成使用
5.通过XHR请求创建script标签
6.使用iframe
分享到:
评论

相关推荐

    浏览器环境下JavaScript脚本加载与执行探析之defer与async特性

    defer和async特性相信是很多JavaScript开发者”熟悉而又不熟悉”的两个特性,从字面上来看,二者的功能很好理解,分别是”延迟脚本”和”异步脚本”的作用。...在《浏览器环境下JavaScript脚本加载与执行探

    探析浏览器执行JavaScript脚本加载与代码执行顺序

    1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析和执行时具有阻塞的特性,也就是说,当JavaScript代码执行时,页面的解析、渲染以及其他资源的下载都要停下来等待脚本执行完毕①。这一点是没有争议...

    浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入

    在《浏览器环境下JavaScript脚本加载与执行探析之defer与async特性》中,我们研究了延迟脚本(defer)和异步脚本(async)的执行时机、浏览器支持情况、浏览器bug以及其他的细节问题。而除了defer和async特性,动态脚本...

    5种JavaScript脚本加载的方式

    javaScript文件(下面简称脚本文件)需要被HTML文件引用才能在浏览器中运行。在HTML文件中可以通过不同的方式来引用脚本文件,我们需要关注的是,这些方式的具体实现和这些方式可能会带来的性能问题。 当浏览器遇到...

    LABjs无阻塞脚本加载工具

    开源无阻塞脚本加载工具LABjs。该工具提供了对加载过程更精细的控制,并试图同时下载尽可能多的代码。

    脚本合并提升javascript性能示例

    每个[removed]标签初始下载时都会阻塞页面渲染,所以减少页面包含的[removed]标签数量有助于改善这一情况。这不仅仅针对外链脚本,内嵌脚本的数量同样也要限制。浏览器在解析HTML页面的过程中每遇到一个[removed]...

    完美解决JS文件页面加载时的阻塞问题

    1.XHR注入:就是用ajax异步请求同域包含脚本的文件,然后将返回的字符串转化为脚本使用,该方法不会造成页面渲染和onload事件的阻塞,因为是异步处理,推荐使用。 2.iframe注入:加载一个iframe框架,通过使用iframe...

    Javascript无阻塞加载具体方式

    看了《高性能JavaScript》的读书笔记 几个原则: 1、将脚本放在底部 &lt;link&gt;还是在head中,用以保证在js加载前,能加载出正常显示的页面。 [removed]放在&lt;/body&gt;前。 2、成组脚本 由于每个[removed]标签...

    高性能Javascript--脚本的无阻塞加载策略

    在Yahoo的Yslow23条规则当中,其中一条是将JS放在底部。原因是,事实上,大多数浏览器使用单进程处理UI和更新Javascript运行等多个任务,而同一时间只能有一个任务被执行。Javascript运行了多长时间,那么在浏览器...

    JS的引入及阻塞加载 + 数据类型 + 函数三大特性 (知识小结)

    文章目录一,JS引入及阻塞加载引入js的方式js的加载方式延时加载 和 异步加载 的特点二,JS的...阻塞加载:先从上往下解析,到了js脚本时,要执行完js脚本才能解析接下来的部分 延时加载:表示脚本可以延迟到文档完全被

    load.js:用于 Javascript 和 TypeScript 的小型、全面的脚本加载器

    bower install load.js 加载.js load.js是一个用 TypeScript 编写的脚本加载器。 它提供了一个简单而强大的 API,让您可以管理代码中的脚本依赖项而不是外部 HTML 文件,并在不阻塞 CSS、图像或其他脚本的情况下并行...

    delayed-js:通过动态加载和依赖跟踪来延迟 JavaScript 文件和脚本的加载

    Delayed JS 是一种轻量级解决方案,旨在通过动态加载和依赖跟踪来延迟 JavaScript 文件和脚本的加载,而无需外部加载大型库。 它有助于防止页面呈现阻塞,从而使页面加载速度更快,并满足谷歌的页面速度建议。 使用...

    Hamibot-Tools:Hamibot自动化脚本的开发技巧总结,完整的案例和分析

    子脚本启动了,主线程脚本就阻塞了,我们有时候是需要阻塞的,那么可以使用BlockEngines BlockEngines属于伪阻塞,可以使用BlockEngines同时启动多个子脚本。按顺序执行 大家可以去写一下校园集结号上报界面自动选择...

    wind.js-API前端开发帮助文档(phpwind9.0版)

    传统上,我们加载JS文件都是使用[removed]标签:[removed][removed]。...wind.js就是为了解决脚本阻塞加载而生,使用异步、并行的方式来加载外部的javascript文件(通过gzip压缩后,wind.js文件为2.6KB)。

    01-Node.js介绍.zip

    Node.js 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。 Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器...

    Node.js技术参考手册

    它使用了一个事件驱动、非阻塞式I/O模型,使得JavaScript可以与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好,V8引擎...

    无阻塞加载脚本分析[全]

    由于浏览器是单线程的,因此脚本在载的时候会阻塞下载其它资源;虽然在现在浏览器已经有所改善,但仍然有待改进。 很显然,脚本必须按顺序执行,但没有必要按顺序下载,解决方法: 1。内嵌JS 通常由于页面大小和缓存...

    高性能的javascript之加载顺序与执行原理篇

    javascript在浏览器中的性能,可以认为是开发者所面临的最严重的可用性问题,今天,自己看完高性能的javascript的加载和执行这一章,聊聊怎么解决js的加载顺序和执行的原理,下面话不多说了,来一起看看详细的介绍:...

    提高网站性能之 如何对待JavaScript

    尤其是JavaScript 文件,在下载它时,并行下载实际上是被禁用的,并且还会阻塞页面的呈现! 关于JavaScript 的下载 在下载JavaScript 脚本文件时,浏览器不会并行启动其它下载,而是让JavaScript 脚本文件单独下载...

    Node.js(node-v21.6.0.tar.xz)

    Node.js提供了一个非阻塞I/O模型,使其轻量且高效,特别适合于实时、高并发的网络应用,如聊天室、实时通信应用等。 Node.js的应用场景主要包括以下几个方面: 实时Web应用:由于Node.js的异步和事件驱动的特性,...

Global site tag (gtag.js) - Google Analytics