js性能优化 如何更快速加载你的JavaScript页面


Posted in Javascript onMarch 17, 2012

确保代码尽量简洁

不要什么都依赖JavaScript。不要编写重复性的脚本。要把JavaScript当作糖果工具,只是起到美化作用。别给你的网站添加大量的JavaScript代码。只有必要的时候用一下。只有确实能改善用户体验的时候用一下。

尽量减少DOM访问

使用JavaScript访问DOM元素很容易,代码更容易阅读,但是速度很慢。下面介绍几个要点:限制使用JavaScript来修饰网页布局,把针对访问元素的引用缓存起来。有时,当你的网站依赖大量的DOM改动时,就应该考虑限制你的标记。这是改用HTML5、舍弃那些原来的XHTML和HTML4的一个充分理由。你可以查看DOM元素的数量,只要在Firebug插件的控制台中输入:document.getElementsByTagName('*').length。

压缩代码

要提供经过压缩的JavaScript页面,最有效的办法就是先用JavaScript压缩工具对你的代码压缩一下,这种压缩工具可以压缩变量和参数名称,然后提供因而获得的代码,使用了gzip压缩。

是的,我没有压缩我的main.js,但你要检查有没有未经压缩的任何jQuery插件,别忘了压缩。下面我列出了压缩方面的几个方案。

◆ YUI压缩工具(jQuery开发团队就使用它),初学者指南

(http://www.slideshare.net/nzakas/extreme-JavaScript-compression-with-yui-compressor)、第二指南 (http://vilimpoc.org/research/js-speedup/)和官方网站(http://developer.yahoo.com/yui/compressor/)。

◆ Dean Edwards Packer(http://dean.edwards.name/packer/)

◆ JSMin(http://crockford.com/JavaScript/jsmin)

  GZip压缩:其背后的想法是,缩短在浏览器和服务器之间传送数据的时间。缩短时间后,你得到标题是Accept-Encoding: gzip,deflate的一个文件。不过这种压缩方法有一些缺点。它在服务器端和客户端都要占用处理器资源(以便压缩和解压缩),还要占用磁盘空间。

避免eval():虽然有时eval()会在时间方面带来一些效率,但使用它绝对是错误的做法。eval()导致你的代码看起来更脏,而且会逃过大多数压缩工具的压缩。

加快JavaScript装入速度的工具:Lab.js

有许多出色的工具可以加快JavaScript装入的速度。值得一提的一款工具是Lab.js。

借助LAB.js(装入和阻止JavaScript),你就可以并行装入JavaScript文件,加快总的装入过程。此外,你还可以为需要装入的脚本设置某个顺序,那样就能确保依赖关系的完整性。此外,开发者声称其网站上的速度提升了2倍。

使用适当的CDN

现在许多网页使用内容分发网络(CDN)。它可以改进你的缓存机制,因为每个人都可以使用它。它还能为你节省一些带宽。你很容易使用ping检测或使用Firebug调试那些服务器,以便搞清可以从哪些方面加快数据的速度。选择CDN时,要照顾到你网站那些访客的位置。记得尽可能使用公共存储库。

面向jQuery的几个CDN方案:

◆ http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js——谷歌Ajax,关于更多库的信息请参阅http://code.google.com/apis/libraries/devguide.html#Libraries。

◆ http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js——微软的CDN

•http://code.jquery.com/jquery-1.4.2.min.js——Edgecast (mt)。

网页末尾装入JavaScript

如果你关注用户,用户因互联网连接速度慢而没有离开你的网页,这是一个非常好的做法。易用性和用户放在首位,JavaScript放在末位。这也许很痛苦,但是你应该有所准备,有些用户会禁用JavaScript。可以在头部分放置需要装入的一些JavaScript,但是前提是它以异步方式装入。

异步装入跟踪代码

这一点非常重要。我们大多数人使用谷歌分析工具(Google Analytics)来获得统计数据。这很好。现在看一下你把你的跟踪代码放在哪里。是放在头部分?还是说它使用document.write?然后,如果你没有使用谷歌分析工具异步跟踪代码,那也只能怪你自己。

这就是谷歌分析工具异步跟踪代码的样子。我们必须承认,它使用DOM,而不是使用document.write,这可能更适合你。它可以在网页装入之前检测到其中一些事件,这非常重要。现在想一想这种情况,你的网页甚至还没有装入,所有用户都关闭了网页。已找到了解决页面浏览量错失的办法。

var _gaq = _gaq || []; 
_gaq.push(['_setAccount', 'UA-XXXXXXX-XX']); 
_gaq.push(['_trackPageview']); 
(function() { 
var ga = document.createElement('script'); ga.type = 'text/JavaScript'; ga.async = true; 
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
})();

没有使用谷歌分析工具?这不是问题,今天的分析工具提供商大多允许你使用异步跟踪。

Ajax优化

Ajax请求对你网站的性能有重大影响。下面我介绍关于Ajax优化的几个要点。

缓存你的ajax

先看一下你的代码。你的ajax可以缓存吗?是的,它依赖数据,但是你的ajax请求大多应该可以缓存。在jQuery中,你的请求在默认情况下已被缓存,不包括script和jsonp数据类型。

针对Ajax请求使用GET

POST类型请求要发送两个TCP数据包(先发送标题,然后发送数据)。GET类型请求只需要发送一个数据包(这可能取决于你的cookie数量)。所以,当你的URL长度不到2K,你又想请求一些数据时,不妨使用GET。

使用ySlow

说到性能,ySlow既简单,又极其有效。它可以对你的网站进行评分,显示哪些方面需要改正,以及应关注哪些方面。

另外支一招:把你的JavaScript打包成PNG文件

设想一下:把你的JS和CSS添加到图片的末尾,然后用CSS来裁切,通过一次HTTP请求来获得应用程序中所需的所有信息。

我最近找到了这个方法。它基本上把你的JavaScript/css数据打包成PNG文件。之后,你可以拆包,只要使用画布API的getImageData()。此外,它非常高效。你可以在不缩小数据的情况下,多压缩35%左右。而且是无损压缩!我得指出,对比较庞大的脚本来说,在图片指向画布、读取像素的过程中,你会觉得有“一段”装入时间。
英文原文:http://www.1stwebdesigner.com/design/load-JavaScript-faster/

Javascript 相关文章推荐
JQUBar 基于JQUERY的柱状图插件
Nov 23 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
Jun 03 Javascript
JavaScript合并两个数组并去除重复项的方法
Jun 13 Javascript
用户代理字符串userAgent可实现的四个识别
Sep 20 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
Jan 14 Javascript
实践中学习AngularJS表单
Mar 21 Javascript
开启BootStrap学习之旅
May 04 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
May 15 Javascript
Javascript闭包与函数柯里化浅析
Jun 22 Javascript
深入理解jQuery3.0的domManip函数
Sep 01 Javascript
Vuex中实现数据状态查询与更改
Nov 08 Javascript
keep-alive不能缓存多层级路由菜单问题解决
Mar 10 Javascript
Jquery命名冲突解决的五种方案分享
Mar 16 #Javascript
让人期待的2011年度最佳 jQuery 插件分享
Mar 16 #Javascript
JavaScript异步调用定时方法并停止该方法实现代码
Mar 16 #Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
Mar 16 #Javascript
jquery $.ajax相关用法分享
Mar 16 #Javascript
灵活应用js调试技巧解决样式问题的步骤分享
Mar 15 #Javascript
3款实用的在线JS代码工具(国外)
Mar 15 #Javascript
You might like
快速开发一个PHP扩展图文教程
2008/12/12 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
Node.js实现在目录中查找某个字符串及所在文件
2014/09/03 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
跟老齐学Python之正规地说一句话
2014/09/28 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
Python处理session的方法整理
2019/08/29 Python
Python面向对象实现方法总结
2020/08/12 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
大学生护理专业自荐信
2013/10/03 职场文书
公司司机岗位职责
2014/02/07 职场文书
知识竞赛主持词
2014/03/26 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
高中教师个人总结
2015/02/10 职场文书
办公用品质量保证书
2015/05/11 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
go开发alertmanger实现钉钉报警
2021/07/16 Golang
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS