对于Javascript的代码速度,我们一般可以将它分为下载时间和执行速度两部分,所以,要做优化的话,我们可以从这两部分来入手。
一、优化代码下载速度
- 在单个TCP-IP包中,最多能放入的字节数是1160,所以每个js文件的字节大小,最好不要超过这个数,以便获得最优的下载时间。
- 合并js文件。如果一个页面中存在加载多个js外部文件的情况,则最好将它们合并为一个,这样可以有效减少HTTP请求数,从而节省下载时间。
- 为外部js使用不同的域名。我们知道,浏览器在下载页面时,对于同一个域名下的最大并发数是一定的(例如IE6/7在HTTP1.0下是2个,而 Firefox3是6个),所以,假如前端页面的域名是www.phpblog.cn的话,外部js文件的域名可以改为js.phpblog.cn,这样 做就可以使浏览器在js.phpblog.cn域名上也使用最大并发数下载,从而加快下载速度。(以上只是拿我的域名作为例子,目前我的站点还没有这样 做)
- 浏览器缓存。在页面中引用的外部js文件是可以被浏览器缓存的,缓存时间由服务器发给客户端代理头部中的Last-modified、Etag或
者Expires决定,所以缓存的时间长短,也成了优化速度的一个方面。我建议将js的缓存时间设置的较长,而如果一旦更改了js文件后,可以在引用
url的js文件后加个自定义参数,来强迫客户端重新下载js。例如:
<script src=”http://js.phpblog.cn/jquery.js?var=2.0″ type=”text/javascript”></script>
- 删除代码中的注释、制表符、空格、换行,这样做可以有效减小 js文件的体积。我们可以使用现成的工具来做这件事情,例如我之前介绍过的Google Closure Compiler 。
- 替换变量名,将较长的变量名替换为较短的变量名,以减少js文件体积。这方面,用Google Closure Compiler 也可以完成。
- 替换布尔值。我们知道,对于比较来说,true等于1,false等于0。因此,在脚本中的true、false都可以用1和0来代替,这样可以减少几个字节。
- 使用数组和对象字面量。例如,定义数组时,使用var o = new []而不使用var o = new Array;定义对象时,使用var o = {}而不使用var o = new Object,它们是完全等价的。
二、优化代码执行时间
- 关注变量范围。在js中,变量范围是很重要的。我们可以认为变量的范围在浏览器中是一个树状层级,查找一个变量时,浏览器首先会在最近的范围中查 找,如果没有找到,则会到它的父范围中查找,如果还没有找到,则再去父父的范围中查找,直到查找到window对象范围(浏览器默认的全局变量属于 window对象)。这就说明,让浏览器最快的找到变量,就可以加快代码的执行速度。在js中,使用var定义的变量为局部范围变量,而不使用var定义 的变量属于全局范围变量,所以,如果我们在某个方法中用到的变量,一定要将它定义成局部变量,这样就不会使浏览器一直找到window对象才获得该变量。 和变量范围有关的另一个优化技巧就是,不使用with语句。因为with语句会创建另一个范围,增加了不必要的查找。
- 反转循环。在使用for循环时,我们经常这样用:
for(i=0; i<100; i++) {}
但是,你需要知道,将循环反转后,它的速度将更快:
for(i=100; i>=0; i–) {}
这是因为,使用常数0来做为判断依据速度更快。当然,使用while循环也可以反转(变换成do..while),具体方法,我就在这里不再赘述。
- 除了反转循环,我们还可以使用循环合并,来进一步提高循环的速度。关于循环合并的具体方法,我在这篇文章 里已经介绍过。这里要特别说明的是,while循环也可以合并,方法和反转循环一样,也是使用do…while来替。
- 使用js的内置方法。例如,我们要计算一个数的阶乘,假如你不知道Math对象有个pow()方法的话,你很可能会自己写一个阶乘计算函数,但是 要知道,这样做的效率是远远不如直接调用内置方法Math.pow()的,因为内置方法是用C++或C语言编译过的,速度要远远高于解释运行的js。
- 字符串连接优化。使用”+”来连接字符串的效率是很差的,尤其表现在一次连接多个字符串时,例如:
var s = “a” + “b” + “c” + “d”;
因为此时js内部会进行多次连接操作,从而导致效率的下降。为了避免这个问题,我们可以使用Array.join()方法来代替:
var a = ["a", "b", "c", "d"];
var s = a.join(); - 存储常用的值。在js中,访问某个对象的属性,从效率上来说,都是非常昂贵的操作。所以可以将多次用到的值存储到一个变量里。例如,下面这个代码速度较慢:
o1.style.left = document.body.clientWidth;
o2.style.left = document.body.clientWidth;而下面的代码速度较快:
var left = document.body.clientWidth;
o1.style.left = left;
o2.style.left = left; - 在js中,脚本中的语句越少,执行速度越快。基于这个原则,我们可以知道,使用一个var来定义多个变量,要快于多个var定义。例如:
var a = 1, b = 2, c = 3;
要快于:
var a = 1;
var b = 2;
var c = 3;同样,以下的代码:
var s = a[i++];
要快于:
var s = a[i];
i++; - 节约使用DOM。在用js改变页面上任何一个元素的样式时(或者增加删除元素),都会导致浏览器重新渲染页面,这个开销是不小的。因此,在连续多次操作DOM时,我们可以先将所有变化保存到DOM碎片(fragment)中,然后再一次性操作页面DOM。例如:
var arrText=["1","2","3","4","5","6","7","8","9","10"];
var oFrag=document.createDocumentFragment();
for(var i=0;i
{
var op=document.createElement(“P”);
var oText=document.createTextNode(arrText[i]);
op.appendChild(oText);
oFrag.appendChild(op);}
document.body.appendChild(oFrag);
以上这些,只是我知道的一些优化方法,当然,js中的优化方法肯定不止这一些,我只能是抛砖引玉,更多的方法,还需要大家一起补充。
转载请注明出处:http://www.phpblog.cn/archives/328
相关推荐
"JavaScript_优化SVG文件的Nodejs工具.zip" 提供的是一套使用JavaScript编写的、基于Node.js环境的SVG优化工具。Node.js是一个开放源代码、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,...
标题中的"XP-menu.rar"指的是一个使用JavaScript实现的XP风格的菜单系统,它旨在为网页添加类似微软Windows XP操作系统中的下拉菜单效果。...对于有经验的开发者,它可以作为优化和自定义菜单功能的起点。
7. **性能优化**:包括DOM操作优化、事件处理优化、内存管理、代码执行效率提升等,这些都是高级JavaScript开发者必须关注的话题。 8. **错误处理**:学会有效地捕获和处理错误,是保证程序稳定运行的关键。理解try...
7. **性能优化**:讨论JavaScript性能的关键因素,如减少DOM操作、避免全局变量和优化循环。 8. **调试技巧**:利用开发者工具进行代码调试,包括断点、步进执行和查看变量状态。 9. **JavaScript库与框架**:简要...
**前端开源库——Jeefo_Javascript_Beautifier详解** Jeefo_Javascript_Beautifier是一款专门针对JavaScript代码的开源美化工具,它旨在帮助...通过学习和掌握它的使用,你将能够更好地管理和优化你的JavaScript项目。
《高性能JavaScript》是一本专为中级前端程序员设计的编程教程,旨在帮助开发者深入理解JavaScript语言,优化代码性能,提升Web应用的效率。本书的核心内容涵盖了JavaScript的诸多关键知识点,包括但不限于: 1. **...
而“javascript bottomc5y”可能是特定的实现细节或是版本标记,没有明确的公开资料,但可以理解为MUJS在JavaScript解析和执行过程中的一个优化或特性。 MUJS的核心是其对ECMAScript标准的实现,这使得它能够支持大...
此外,书中还会涉及一些实用技巧,如错误处理、性能优化和测试驱动开发(TDD),这些都是高质量JavaScript开发不可或缺的部分。通过实际案例分析,读者将学习如何在实际项目中应用这些设计模式,提升代码质量和可...
"Automate_JavaScript_compression"这个主题正是围绕这一核心展开的,旨在利用工具和脚本自动压缩JavaScript代码,以减小文件大小,提高网页加载速度,降低用户等待时间,并优化网络资源的使用。以下是关于这个主题...
【标题】"VBCABLE_Driver_Pack43b_javascript_zip_vbdriver_" 指的是一款名为“VBCABLE”的驱动程序包,版本号为43b,该包采用了JavaScript语言进行部分处理,并被封装在一个ZIP压缩文件中。这里的“vbdriver”可能...
10. **性能优化**:理解V8引擎的工作原理,了解如何编写高性能的JavaScript代码,如避免全局变量、合理使用闭包和定时器等。 通过阅读《JavaScript 语言参考》中文版(CHM),读者不仅可以掌握JavaScript的基本用法,...
在JavaScript中实现粒子群优化的可视化,可以为开发者提供直观的方式来理解和调试算法。下面将详细介绍PSO算法的基本原理、其在JavaScript中的实现以及可视化技术。 **1. 粒子群优化算法基本原理** 粒子群优化算法...
配置这些工具能够定制开发环境,满足特定项目的需求,例如优化性能、添加热加载、处理源代码转换等。 "oin neiann ebemm"这部分描述看似不太清晰,但我们可以尝试推测其含义。"neiann"可能是指“内部”或“内在”,...
这些库提供了丰富的功能和良好的性能优化,同时减少了自己从头实现的复杂度。 总结一下,JavaScript实现树形菜单涉及到了JavaScript基础、DOM操作、事件处理以及数据结构的理解。通过分析和理解提供的资源,我们...
5. **优化技巧**:为了提高性能,应该避免频繁的JavaScript与Flash通信。可以考虑批量处理数据,或者使用缓存机制减少不必要的通信。 6. **调试与错误处理**:在开发过程中,使用Flash的调试版本和浏览器的开发者...
JavaScript是一种广泛应用于Web开发的脚本语言,它主要在客户端运行,为网页添加交互性和动态功能。...通过实践和调试这些小程序,不仅可以掌握基本的jQuery用法,还能了解如何在实际项目中整合和优化代码。
虽然JavaScript_Diffusion Bee简化了流程,但对相关技术的理解可以帮助用户更好地定制和优化结果。 总的来说,JavaScript_Diffusion Bee是一个创新的工具,它利用JavaScript的普及性和易用性,为M1 Mac用户提供了一...
同时,为了提高性能,开发者可能使用了延迟加载图片、压缩CSS和JavaScript文件、减少HTTP请求等优化策略。 通过学习和分析"Html5_Javascript_E_Shop"项目,我们可以深入理解如何结合HTML5、JavaScript和CSS3构建...
"qf-report_javascript_" 小程序是一款基于JavaScript技术实现的数据上报工具,它利用了当前全球最前沿...通过深入研究其源代码,开发者可以学习到很多关于JavaScript开发、数据处理、前端架构设计以及性能优化的知识。
JavaScript是Web开发中不可或缺的一部分,它用于实现网页的动态交互功能。为了确保代码的正确运行和优化,开发者需要使用调试工具。"javascript脚本调试器javascript_editor" 提供了一个集成的环境,帮助开发者高效...