高性能JavaScript 加载和执行
前言
本章主要讲述如何加载脚本使得用户能有良好的用户体验,而核心内容就是JavaScript的异步加载。之前写过一篇不得不说的JavaScript异步加载,相似的内容就不多加描述,讲些不同的东西,主要讲下JavaScript文件加载器labjs的常用方法。
流水账
脚本位置:推荐将所有的<script>标签尽可能放到<body>标签的底部,也就是</body>之前,这样就能在执行js代码之前将用户界面呈现出来,改善用户体验。
组织脚本:由于每个<script>标签初始下载时都会阻塞页面渲染,所以减少页面包含的<script>标签数量有助于改善这一情况。通常一个大型网站或者网络应用需要依赖数个JavaScript文件,你可以把多个文件合并成一个,这样只需要一个<script>标签,就可以减少性能消耗,实质是减少了http请求。
无阻塞的脚本:defer、动态脚本元素、XMLHttpRequest脚本注入(和动态脚本元素技术相比的优点是你可以下载JavaScript代码但不立即执行,但是因为同源策略所以有很大的局限性)、LazyLoad类库。
LABjs
接下来就是labjs的时间了,labjs是一个js文件加载器,而requirejs和seajs则是模块加载器,模块加载器一般可以降级为文件加载器使用。labjs通过优雅的语法(script和wait 链式)实现了这两大特性,核心是性能优化,可以管理文件依赖,并且“异步”执行。下面通过具体的例子来简单讲讲这两大api的用法。
如果你只需实现动态脚本元素技术那样的多个脚本并发“异步”执行,那实在太简单不过了:
$LAB .script("script1.js")
.script("script2.js");
当然你也可以用数组或者对象的方式传参,详细可以参考文档,我也会在下一篇中详细介绍labjs的常用api。
如果说加载完两个文件(或者多个),你需要一个回调,这时候就要用到wait了:
$LAB
.script("script1.js")
.script("script2.js")
.script("script3.js")
.wait(function() { // 等待所有script加载完再执行这个代码块
// ...
});
如何管理文件依赖?也很简单:
$LAB
.script("script1.js") // script1, script2, and script3 相互不依赖, 可以按照任意的顺序执行
.script("script2.js")
.script("script3.js")
.wait(function(){
console.log("Scripts 1-3 are loaded!");
})
.script("script4.js") // 必须等待script1.js,script2.js,script3.js执行完毕之后才能执行
.wait(function(){initScript4Func();});
script4依赖script1、script2和script3,通过以上代码依赖文件能够异步并行执行,而等它们三个文件执行完后执行script4,效率大大提升。需要特别注意的是,script中只能包含.js结尾的文件(或者对象、数组),而不能是一个匿名的js函数,如果是则会立即执行。
高性能JavaScript 加载和执行的更多相关文章
- 怎么样加快JavaScript加载和执行效率
概览 无论当前 JavaScript 代码是内嵌还是在外链文件中,页面的下载和渲染都必须停下来等待脚本执行完成.JavaScript 执行过程耗时越久,浏览器等待响应用户输入的时间就越长.浏览器在下载 ...
- 加快JavaScript加载和执行效率
JavaScript 在浏览器中的性能成为开发者所面临的最重要的可用性问题.而这个问题又因 JavaScript 的阻塞特性变的复杂,也就是说当浏览器在执行 JavaScript 代码时,不能同时做其 ...
- 浏览器环境下Javascript脚本加载与执行探析之DOMContentLoaded
在”浏览器环境下Javascript脚本加载与执行探析“系列文章的前几篇,分别针对浏览器环境下JavaScript加载与执行相关的知识点或者属性进行了探究,感兴趣的同学可以先行阅读前几篇文章,了解相关 ...
- [转]JavaScript 的性能优化:加载和执行
原文链接:http://www.ibm.com/developerworks/cn/web/1308_caiys_jsload/index.html?ca=drs- JavaScript 的性能优化: ...
- 【转】js JavaScript 的性能优化:加载和执行
JavaScript 的性能优化:加载和执行 转自:https://www.ibm.com/developerworks/cn/web/1308_caiys_jsload/ 随着 Web2.0 技术的 ...
- JavaScript 的性能优化:加载和执行
随着 Web2.0 技术的不断推广,越来越多的应用使用 javascript 技术在客户端进行处理,从而使 JavaScript 在浏览器中的性能成为开发者所面临的最重要的可用性问题.而这个问题又因 ...
- 浏览器中Javascript的加载和执行
在刚学习Javascript时曾对该问题在小组内做个一次StudyReport,发现其中的基础还是值得分析的. 从标题分析,可以加个Javascript的加载和执行分为两个阶段:加载.执行.而加载即浏 ...
- 高性能JavaScript-JS脚本加载与执行对性能的影响
在web产品优化准则中,很重要的一条是针对js脚本的加载和执行方式的优化.本篇文章简单描述一下其中的优化准则. 1. 脚本加载优化 1.1 脚本位置对性能的影响 优化页面加载性能的原则之一是将scri ...
- 浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
在<浏览器环境下JavaScript脚本加载与执行探析之defer与async特性>中,我们研究了延迟脚本(defer)和异步脚本(async)的执行时机.浏览器支持情况.浏览器bug以及 ...
随机推荐
- 记一次ORACLE的UNDO表空间爆满分析过程
这篇文章是记录一次ORACLE数据库UNDO表空间爆满的分析过程,主要整理.梳理了同事分析的思路.具体过程如下所示: 早上收到一数据库服务器的UNDO表空间的告警邮件,最早一封是7:55发出的(监控作 ...
- CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13
CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.132013-10-24 15:31:12标签:服务器 防火墙 file 配置文件 written 一.配置好I ...
- [.net程序员必看]微软新动向之Android和IOS应用 visual studio 2015 Cordova[原创]
自萨蒂亚·纳德拉(Satya Nadella)上任微软CEO以来,可谓是惊喜不断,仿佛让世界尤其是我们.net程序员心中又燃起了希望.先是免费提供 iOS 版和安卓版 Office:然后在 xbox ...
- 设计模式C#实现(十二)——装饰模式
意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 动态的给一个对象添加一些额外的职责. 适用性 动态的为单个对象添加职责而不影响其他对象 处理那些可以撤销的职责(? 在某些功能不需要 ...
- Linux中的SWAP交换分区
大多数 Linux 在系统安装时都会提醒并建议你划分一个 SWAP 交换分区,如果你是从 Windows 切换到 Linux 的新用户,兴许对这个 SWAP 会感到十分疑惑. SWAP 交换分区到底是 ...
- nginx有关.htaccess小结
可能很多朋友都常用nginx不支持.htaccess,只有apache才支持.htaccess文件,其实这是错误的看法nginx也是支持.hatccess的哦. 其实nginx和.htaccess一点 ...
- HTTP状态码分类说明
状态码分类 HTTP状态码被分为五大类, 目前我们使用的HTTP协议版本是1.1, 支持以下的状态码.随着协议的发展,HTTP规范中会定义更多的状态码. 小技巧: 假如你看到一个状态码518, 你并 ...
- Android学习笔记之AndroidManifest.xml文件解析(转)
//自已备注: <?xml version="1.0" encoding="utf-8"?>//说明了版本号,字符集 <manifest xm ...
- exe文件无法打开
1.现象 在一个XP 64位机子上从IE下载一个exe文件后,双击竟然无任何反应,以为文件有问题,但多次尝试后仍是如此,但打开cmd通过命令行启动是正常,双击该机子上其他exe文件也都能启动,但从IE ...
- CPU和GPU性能对比
计算20000次10000点的fft,分别使用CPU和GPU,得 the running time of cpu is : 2.3696s the running time of gpu is : 0 ...