javaScript是一门解释性的语言、它不像java、C#等程序设计语言、由编译器先进行编译再运行、而是直接下载到用户的客户端进行执行。因此代码本身的优劣就直接决定了代码下载的速度以及执行的效率。
1、减缓代码下载时间:
Web浏览器下载的是javaScript的源码、其中包含的长变量名、注释、空格和换行等多余字符大大减缓了代码下载的时间。这些字符对于团队编写时十分有效、但在最后工程完成上传到服务器时、应当将它们全部删除。例如:
-
functionshowMeTheMoney(){
-
if(!money){
-
returnfalse;
-
}else{
-
...
-
}
-
}
可优化成:
-
functionshowMeTheMoney(){if(!money){returnfalse;}else{...}}
这样、优化后就节约了25个字节、倘若是一个大的javaScript工程、将节省出非常大的空间、不但提高了用户的下载速度、也减轻了服务器的压力。相信这样的代码大家见过不少、很多优秀的js插件源码都这么干!
另外、对于布尔型的值true和false、true都可以用1来代替,而false可以用0来代替。对于true节省了3个字节、而false则节省了4个字节、例如:
-
varbSearch=false;
-
for(vari=0;i<aChoices.length&&!bSearch;i++){
-
if(aChoices[i]==vValue)
-
bSearch=true;
-
}
替换成:
-
varbSearch=0;
-
for(vari=0;i<aChoices.length&&!bSearch;i++){
-
if(aChoices[i]==vValue)
-
bSearch=1;
-
}
替换了布尔值之后、代码的执行效率、结果都相同、但节省了7个字节。
代码中常常会出现检测某个值是否为有效值的语句、而很多条件非的判断就判断某个变量是否为"undefined"、"null"、或者"false"、例如:
-
if(myValue!=undefined){
-
-
}
-
-
if(myValue!=null){
-
-
}
-
-
if(myValue!=false){
-
-
}
这些虽然都正确、但采用逻辑非操作符"!"也可以有同样的效果、代码如下:
这样的替换也可以节省一部分字节、而且不太影响代码的可读性。类型的代码优化还有将数组定义时的 new Array()直接用"[]"代替、对象定义时的 new Object()用"{}"代替等、例如:
-
varmyArray=newArray();
-
varmyArray=[];
-
varmyObject=newObject();
-
varmyObject={};
显然、第二行和第四行的代码较为精简、而且也很容易理解。
另外、在编写代码时往往为了提高可读性、函数名称、变量名称使用了很长的英文单词、同时也大大增加了代码的长度、例如:
-
functionAddThreeVarsTogether(firstVar,secondVar,thirdVar){
-
return(firstVar+secondVar+thirdVar);
-
}
可优化成:
-
functionA(a,b,c){return(a+b+c);}
注意:在进行变量名称替换时、必须十分小心、尤其不推荐使用文本编辑器的"查找"、"替换"功能、因为编辑器不能很好地区分变量名称或者其他代码。例如、希望将变量"tion"全部替换成"io"、很可能导致关键字"function"也被破坏。
对于上面说的这些减少代码体积的方法、有一些很实用的小工具可以自动完成类似的工作、例如ECMAScript Cruncher、JSMin、Online JavaScript Compressor等。
2、合理声明变量
减少代码的体积仅仅只能使得用户下载的速度变快、但执行程序的速度并没有改变。要提高代码执行的效果、还得在各方面做调整。
在浏览器中、JavaScript默认的变量范围是window对象、也就是全局变量。全局变量只有在浏览器关闭才释放。而JavaScript也有局部变量、通常在function中执行完毕就会立即被释放。因此在函数体中要尽可能使用var关键字来声明变量:
-
functionFirst(){
-
a="";
-
}
-
functionSecond(){
-
alert(a);
-
}
-
First();
-
Second();
这样、变量"a"就成为了全局变量、直到页面关闭时才会被销毁、浪费了不必要的资源、如果在"a"的前面加上"var"、这样"a"就成为了当前function的局部变量。在执行完First()便立即被销毁。因此、在函数体中、如果不是特别需要的全局变量、都应当使用"var"进行声明、从而节省系统资源。
3、使用内置函数缩短编译时间
只要可能、应当尽量使用JavaScript的内置函数。因为这些内置的属性、方法都是用类似C、C++之类的言语编译过的、运行起来比实时编译的JavaScript快很多。例如计算指数函数、可以自己编写:
-
<html>
-
<head>
-
<basehref="<%=basePath%>">
-
<title>内置函数</title>
-
<metahttp-equiv="pragma"content="no-cache">
-
<metahttp-equiv="cache-control"content="no-cache">
-
<metahttp-equiv="expires"content="0">
-
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
-
<metahttp-equiv="description"content="Thisismypage">
-
<scripttype="text/javascript">
-
functionmyPower(iNum,n){
-
variResult=iNum;
-
for(vari=0;i<n;i++)
-
iResult*=iNum;
-
returniResult;
-
}
-
varmyDate1=newDate();
-
for(vari=0;i<150000;i++){
-
myPower(7,8);//自定义方法
-
}
-
varmyDate2=newDate();
-
document.write(myDate2-myDate1);
-
document.write("<br/>");
-
myDate1=newDate();
-
for(vari=0;i<150000;i++){
-
Math.pow(7,8);//采用系统内置方法
-
}
-
myDate2=newDate();
-
document.write(myDate2-myDate1);
-
</script>
-
</head>
-
<body>
-
</body>
-
</html>
我运行的结果是、自定义方法用了15、内置方法用了1(不同的计算机运行速度会有差别)、这样就能看出、系统内置的方法要快很多。
4、合理书写if语句。
if语句恐怕是所有代码中使用最频繁的、然而很可惜的是它的执行效率并不是很高。在用if语句和多个else语句时、一定要把最有可能的情况放在第一个、然后是可能性第二的、依此类推。例如预计某个数值在0~100之间出现的概率最大、则可以这样安排代码:
-
if(iNum>0&&iNum<100){
-
alert("在0和100之间");
-
}elseif(iNum>99&&iNum<200){
-
alert("在100和200之间");
-
}elseif(iNum>199&&iNum<300){
-
alert("在200和300之间");
-
}else{
-
alert("小于等于0或者大于等于300");
-
}
总是将出现概率最多的情况放在前面、这样就减少了进行多次测试后才能遇到正确条件的情况。当然也要尽可能减少使用else if 语句、例如上面的代码还可以进一步优化成如下代码:
-
if(iNum>0){
-
if(iNum<100){
-
alert("在0和100之间");
-
}else{
-
if(iNum<200){
-
alert("在100和200之间");
-
}else{
-
if(iNum<300){
-
alert("在200和300之间");
-
}else{
-
alert("大于等于300");
-
}
-
}
-
}
-
}else{
-
alert("小于等于0");
-
}
上面的代码看起来比较复杂、但因为考虑了很多代码潜在的判断问题、执行问题、因此执行速度要较前面的代码快。
另外、通常当超过两种情况时、最好能够使用switch语句。经常用switch语句代替if语句、可令执行速度快甚至10倍。另外、由于case语句可以使用任何类型、也大大方便switch语句的编写。
5、最小化语句数量
脚本找哦个的语句越少执行的时间就越短、而且代码的体积也会相应减少。例如使用var定义变量时可以一次定义多个、代码如下:
-
variNum=365;
-
varsColor="yellow";
-
varaMyNum=[8,7,12,3];
-
varoMyDate=newDate();
上面的多个定义可以用var关键字一次性定义、代码如下:
-
variNum=365,sColor="yellow",aMyNum=[8,7,12,3],oMyDate=newDate();
同样在很多迭代运算的时候、也应该尽可能减少代码量、如下两行代码:
可优化成:
6、节约使用DOM
JavaScript对DOM的处理可能是最耗费时间的操作之一。每次JavaScript对DOM的操作都会改变页面的表现、并重新渲染整个页面、从而有明显的时间消耗。比较快捷的方法就是尽可能不在页面进行DOM操作、如下例中为ul添加了10个条目。
-
varoUl=document.getElementById("ulItem");
-
for(vari=0;i<10;i++){
-
varoLi=document.createElement("li");
-
oUl.appendChild(oLi);
-
oLi.appendChild(document.createTextNode("Item"+i));
-
}
以上代码在循环中调用oUl.appendChild(oLi)、每次执行这条语句后、浏览器就会重新渲染页面、其次给列表添加文本节点oLi.appendChild(document.createTextNode("Item "+i))、这也会造成页面被重新渲染。因此每次运行都会造成两次重新渲染页面、共20次。
通常应当尽可能减少DOM的操作、将列表项目在添加文本节点之后在添加、并合理地使用createDocumentFragment()、代码如下:
-
varoUl=document.getElementById("ulItem");
-
varoTemp=document.createDocumentFragment();
-
for(vari=0;i<10;i++){
-
varoLi=document.createElement("li");
-
oLi.appendChild(document.createTextNode("Item"+i));
-
oTemp.appendChild(oLi);
-
}
-
oUl.appendChild(oTemp);
相关推荐
### JavaScript性能优化技巧详解 #### 引言 随着Web应用的日益复杂,JavaScript作为前端开发的核心语言之一,其运行效率直接影响着用户体验与整体性能。因此,掌握一定的JavaScript性能优化技巧对于提升应用程序...
以下是一些关于JavaScript性能优化的关键知识点: 1. **延迟加载(Lazy Loading)**:为了提高页面加载速度,可以使用延迟加载策略,如图片懒加载,只在用户滚动到可视区域时才加载资源。 2. **代码分割(Code ...
JavaScript 性能优化的小知识总结
本文将深入探讨JavaScript性能优化的若干关键技巧,帮助你提升应用的运行效率和用户体验。 1. **代码结构优化** - **减少DOM操作**:DOM(Document Object Model)操作是JavaScript性能的主要瓶颈之一。尽量通过...
JavaScript性能优化是提升Web应用响应速度和用户体验的关键领域。这份名为"JavaScript性能优化的小知识总结共23页.pdf"的文档很可能包含了多个方面的重要信息,旨在帮助开发者掌握提高JavaScript代码效率的方法。...
JavaScript性能优化.docx
### 基于WebAssembly的JavaScript性能优化方案研究与实现之计算机分析 #### 1. 研究背景和意义 随着互联网技术的飞速发展,Web应用程序的功能日益丰富,应用平台也呈现多元化趋势。JavaScript作为Web应用开发的...
《JavaScript性能优化:度量、监控与可视化》PDF版本下载
JavaScript性能优化是前端性能优化的重要一环。JavaScript是前端开发中最常用的脚本语言之一,优化它的性能可以有效地提升页面响应速度和流畅度。下面介绍一些常见的JavaScript性能优化方法: 1. 函数节流:函数...
在JavaScript性能优化的范畴中,字符串的拼接是一个常见的操作,也是性能优化的典型案例。通常情况下,开发者会使用类似Java中的StringBuilder或StringBuffer的方式来提升字符串拼接的性能。在JavaScript中,可以...
为了提供更好的用户体验,JavaScript性能优化至关重要。本文将深入探讨"前台JavaScript速度优化"的相关知识点,包括但不限于代码优化策略、工具应用以及Ajax性能提升。 一、代码优化策略 1. 减少DOM操作:频繁的...
JavaScript性能优化是提升Web应用响应速度和用户体验的关键。在JavaScript中,优化主要集中在以下几个方面: 1. **加载优化**:减少JavaScript文件的数量和大小,通过合并文件、压缩代码(例如使用Gzip和Minify)来...