`
天下有鹏
  • 浏览: 22676 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Javascript代码优化

阅读更多
   在看Nicholas C.Zakas写的曹力等翻译的javascript高级程序设计时学习到了一些javascript优化的方法特记录下来。希望大家讨论。
(一) 下载时间
   Web浏览器下载的是js源码,因此所有长变量名和注释都回包含在内。这个因素会增加下载时间。1160是一个TCP-IP包中的字节数。最好能将每个javascript文件都保持在1160字节以下以获得最优的下载时间。
   由于这个原因,要删除注释、删除制表符和空格、删除所有的换行、将长变量名缩短。
遵循这4条比较困难。因此用外部程序(ECMAScript Cruncher)来帮助我们。
   其他减少字节数的方法还有几个。
     1.因为在javascript语言中 true等于1,false等于0。因此,脚本包含的字面变量true都可以用1来替换,而false可以用0来替换。
例如:

var bFound = false;
 for(var i=0;i< aTest.length&&!bFound;i++)
{
	if(aTest[i]==vTest)
{
	bFounde = true;
}
}

	var bFound = 0;
 for(var i=0;i< aTest.length&&!bFound;i++)
{
	if(aTest[i]==vTest)
{
	bFounde = 1;
}
}


这两段代码运行方式完全相同,而后者节省了7个字节。
       2.缩短否定检测
       代码中常常会出现检测某个值是否满足条件。而大部分作的判断某个变量是否为undefined 、null 、false。可以用逻辑非来简化判断。例如

if(oTest != undefined)
{
		//do someting
}
if(oTest != null)
{
		//do someting
}
if(oTest != false)
{
		//do someting
}


以上代码可以替换成

if(!oTest)
{
		//do something
}



为什么可以替换呢?因为逻辑非操作在遇到undefined 、null 、false时返回true这样做可以节省很多字节。
        3.定义数组、对象时候的技巧
var oTest  = new Array;
var oTest = [];
是等价的。
var oTest = new Object;
var oTest = {};
是等价的
(二) 执行时间
    我们可以做一些简单的事情提高javascript性能。我觉得也是编写javascript的一些技巧。
        1.关注范围
        书中的范围我理解为作用域。
        在javascript中默认的范围是window。在window范围中创建的变量旨在页面从浏览器卸载后才会销毁。在函数中创建的变量只在函数中的范围内有效。函数执行后就销毁。在引用变量时,javascript解释程序在最近的范围内查找,如果没有救灾上一层次中查找。直到window范围。如果window中也找不到。则出现错误。本地范围内的变量比全局变量执行起来要更快。
提高javascript执行速度可以有下面几种方法
          A.使用局部变量。
          在函数中总是用var来定义变量。如果直接使用变量而不在函数中定义,则变量会创建在window范围内。也就是说执行函数遇到该变量时,javascirpt程序就会按层次到最上层才会查找到该变量。
不要这样:

function xxx()
{
	name=”abc”;
alert(name);
}


             B. 避免with语句
             范围越少执行速度越快。
alert(document.title);;
alert(document.body.tagName);;
alert(document.location);

可以替换成

with(document)
{
	alert(title);;
alert(body.tagName);;
alert(location);
}


这的确缩短了程序的长度,但是减少代码不能弥补损失的性能。为什么呢?
因为:使用with语句时要强制解释程序不仅要在范围内查找局部变量。还强制检测每个变量及指定的对象,看其是否为特性。因为也可以在函数中定义变量title或者location。
          2.Javascript陷阱
            A. 避免多字符串用+号连接
            多字符串连接最好用StringBuffer对象。该对象封装了Array用join()方法进行连接字符串。
            B.优先使用内置方法
Js提供了相当丰富的内置方法可以充分利用
            C.存储常用的值
多次使用同一个值时,可以将其存储在局部变量中提高访问速度。
          3.减少语句数量
          例如:
var iFive=5;
var sColor=&rdquo;blue&rdquo;

可以替换成
var iFive=5,sColor=&rdquo;blue&rdquo;;
		另外
		var sName=aValues[i];
		i++;
		可以替换成
		var sName=aValues[i++];

另外可以用json来代替对象定义。
           4.节约使用DOM
           DOM处理算是javascript中最耗时的操作之一。解决这个问题的方法是尽可能对不在DOM文档中的元素进行DOM操作。
这里要学会使用文档碎片对象即document.createDocumentFragment()。



分享到:
评论
8 楼 hax 2008-11-19  
js中总是有变量lookup的过程,显然我们知道这是一个链。在obj.prop的情况下,走的prototype链,在localVar的情况下,走的是scope链。with无非是将一个obj追加到了scope链的顶部。当with的obj本身不存在深度prototype链,且with中的语句主要访问的都是obj上的属性时,其性能自然并不会下降反而有可能上升。

诚然,with导致了无法进行真正的lexical scope的静态分析,因为如果经过了静态分析,根本不需要进行namespace的lookup,效率自然就高。但是现在主流浏览器没有一个js引擎做了这种优化。所以谈不上with的问题。相反,如果是actionscript之类的要进行编译的情况,就会受到with的拖累。
7 楼 天下有鹏 2008-11-17  
hax 写道
很少人写 xxx == true 或者 xxx != false 这样。。。最近讨论X刚的热帖里有提到这个问题。

虽然在js中稍有不同,我有时也写 xxx === true 以确保类型正确,但是不会没事写很多行这样的代码。

就算要改短,也最好改为 t/f (var t=true,f=false),保留点可读性。

with在当前的浏览器实现中其实并不一定会降低性能,相反有可能提高性能。理论上with确实增加了优化的难度,但是问题是现在的浏览器根本没做这种优化,所以with的问题不在于性能,而在于误用with会造成一些难以排除的bug隐患。with的使用需要小心。

StringBuffer在ie以外的浏览器上并不会提高性能。

其他还有些问题,不述。


== !=  都是转换类型后比较
=== !== 不转换类型进行比较
function aa(){
	var sN = "55";		
	var iNs = 55;
	alert(sN==iNs);
	alert(sN===iNs);
}


关于with有什么理由说他提高了js性能呢?请说明一下好吗?我也是看书得知with是影响性能的一个因素,作者从js解释执行的角度来分析with用法我觉得的确有道理。
6 楼 hax 2008-11-16  
很少人写 xxx == true 或者 xxx != false 这样。。。最近讨论X刚的热帖里有提到这个问题。

虽然在js中稍有不同,我有时也写 xxx === true 以确保类型正确,但是不会没事写很多行这样的代码。

就算要改短,也最好改为 t/f (var t=true,f=false),保留点可读性。

with在当前的浏览器实现中其实并不一定会降低性能,相反有可能提高性能。理论上with确实增加了优化的难度,但是问题是现在的浏览器根本没做这种优化,所以with的问题不在于性能,而在于误用with会造成一些难以排除的bug隐患。with的使用需要小心。

StringBuffer在ie以外的浏览器上并不会提高性能。

其他还有些问题,不述。
5 楼 jindw 2008-11-15  
春风不识字,何故乱抄书。
4 楼 walkman 2008-11-14  
其实楼主的建议还是蛮有意义的,javascript本来已经够慢的了,能提高即使一点点的效率对程序来讲都是莫大的好处

每个人的编程习惯不一样,比如我,即使知道 with 关键字的作用也一次都没使用过,汗。。。

不过有一点不太同意:“ 1.因为在javascript语言中 true等于1,false等于0。因此,脚本包含的字面变量true都可以用1来替换,而false可以用0来替换。”
我觉得给代码瘦身应该在发布环节,而不应该在开发环节,开发的时候还是力求代码逻辑性和可读性,像 true 用 1 来代替实在不可取,在这个基础上再写出一些 sophisticated 的语句未尝不是件开心的事
3 楼 天下有鹏 2008-11-14  
joachimz 写道
晕,好好的做事去吧,没有必要做这样的“优化”。

如果真的在意js的大小,可以找一些混淆工具来压缩,把便量都替换为a1/a2这样。另外启用zip流压缩效果更加,一般压缩比大于4:1

其实很多都是js的编程技巧,在我们编码过程中可以方便快捷的使用。不是件美好的事情吗。
2 楼 wilsonxu 2008-11-14  
1.无论有效与否,多了解一些优化技巧可以加深对某种语言工作原理的认识.
2.我觉得好的编程习惯就是最好的优化技巧.
1 楼 joachimz 2008-11-14  
晕,好好的做事去吧,没有必要做这样的“优化”。

如果真的在意js的大小,可以找一些混淆工具来压缩,把便量都替换为a1/a2这样。另外启用zip流压缩效果更加,一般压缩比大于4:1

相关推荐

    JavaScript代码优化一例.pdf

    "JavaScript代码优化一例" 本文主要讨论JavaScript代码的优化,着重于介绍JavaScript代码在企业开发中的重要性及其优化方法。 一、JavaScript代码的重要性 随着Web 2.0和Ajax概念的提出,JavaScript代码得到了...

    javascript代码优化的8点总结

    JavaScript代码优化是一项持续且重要的工作,它有助于提高代码的执行效率、可读性和可维护性。以下是根据给定文件内容总结的关于JavaScript代码优化的8点要点。 1. 松耦合原则 松耦合是一种设计原则,指的是在修改...

    前台javascript速度优化

    本文将深入探讨"前台JavaScript速度优化"的相关知识点,包括但不限于代码优化策略、工具应用以及Ajax性能提升。 一、代码优化策略 1. 减少DOM操作:频繁的DOM操作会降低页面性能,因为每次操作都需要浏览器重新...

    js代码优化演进(含个人分析)

    JavaScript代码优化是一个持续演进的过程,它涉及到许多层面,包括语法优化、运行时优化、内存管理、性能调优等。本文将围绕这个主题展开,结合个人理解和分析,深入探讨JavaScript代码优化的关键点。 首先,我们要...

    JS代码优化的8点建议

    总结以上观点,有效的JavaScript代码优化需要我们关注代码的松耦合、全局变量的管理以及事件处理的逻辑分离。通过遵循这些原则和实践,可以构建更加健壮、易于维护和扩展的Web应用程序。在实际开发过程中,我们应该...

    javascript经典特效---javascript代码自动生成.rar

    本资源“javascript经典特效---javascript代码自动生成.rar”显然聚焦于如何利用JavaScript生成代码,以创建出吸引人的视觉特效。这个压缩包内包含了一个名为“javascript代码自动生成.htm”的文件,很可能是教程或...

    基于WebAssembly的JavaScript性能优化方案研究与实现之计算机分析.docx

    ##### 2.1 JavaScript代码优化 - **快速准确的类型推导算法**:为了克服JavaScript动态类型带来的性能问题,Hackett等人提出了一种快速准确的类型推导算法。通过增加运行时类型限定的静态分析方法,该算法能够生成...

    js代码优化的小示例

    本文将通过一个关于获取当前日期星期并转换为特定字符表示的例子来展示如何对JavaScript代码进行优化。 #### 原始代码 原始代码实现了一个功能:根据当前日期的星期几(0-6,分别代表周日到周六),将其转换为特定...

    优化 JavaScript 代码的方法小结

    以下是一些针对JavaScript代码优化的关键点和最佳实践。 1. **字符串连接优化**:在Internet Explorer 6和7中,字符串连接操作可能导致性能问题,因为它们创建了大量中间字符串对象。为了解决这个问题,可以使用`...

    javascript代码压缩工具

    总之,JSMinifier作为一款基于Java的JavaScript代码压缩工具,为开发者提供了一种快速、简单的方式来进行代码优化。通过合理使用,可以显著提升网页加载速度,降低服务器压力,为用户提供更好的在线体验。在实际使用...

    JavaScript 代码压缩工具

    JavaScript代码压缩工具是一种优化网页性能的关键技术,尤其在当今互联网应用越来越复杂,JavaScript文件体积日益庞大的背景下,其重要性不言而喻。压缩JavaScript代码的主要目的是减少文件大小,提高网络传输效率,...

    浅析JavaScript异步代码优化

    JavaScript异步代码优化是开发过程中不可或缺的一环,尤其是在前端开发中,由于JavaScript的单线程特性,异步处理显得尤为重要。本文将深入探讨JavaScript异步编程的问题及其优化策略。 首先,我们来关注最常见的一...

    javascript网站广告代码大全

    通过学习和理解这些JavaScript广告代码,开发者可以掌握如何在自己的网站上创建和优化广告,同时提升网站的用户体验和商业价值。对于网页设计师和前端开发者来说,熟练掌握这些技术是提升专业技能的重要途径。这个...

    JavaScript Code Improver

    下面将详细讨论JavaScript代码优化的重要性和具体方法,以及可能与"JavaScript Code Improver"相关的功能。 首先,代码的可读性和格式化至关重要,因为它们直接影响到代码的维护和团队协作。良好的代码风格可以使...

    Antechinus JavaScript Editor Pro v4.0 Build 5

    6. **代码优化与调试**:编辑器支持代码压缩,可以将编写好的JavaScript代码优化,减少文件大小,提高页面加载速度。同时,内置的调试工具能够帮助开发者追踪和解决程序中的问题。 7. **版本控制集成**:对于团队...

    脚本编译器该工具(javascript、vbs)

    对于JavaScript,虽然通常是以解释执行为主,但也有编译器如Google的Closure Compiler,它能将JavaScript代码优化并压缩,提高页面加载速度。而VBScript由于主要用于Windows环境,编译器如Microsoft的JScript .NET...

    JavaScript可视化压缩器.rar

    JavaScript可视化压缩器是一款专为JavaScript代码优化设计的工具,它能够帮助开发者将源代码压缩成更小、更高效的格式,以便在网页或Web应用程序中快速加载。JavaScript代码压缩的主要目标是减少文件大小,提高网络...

    javascript源码.rar

    在这个上下文中,它可能会解释`javascript10.chm`的内容结构,以及如何将学到的知识应用到实际的JavaScript代码优化中。可能会介绍如何理解并实践代码示例,以提高页面加载速度,优化用户体验,或是减少内存占用。 ...

    JavaScript代码性能优化总结(推荐)

    以下是一些基于给定内容的JavaScript代码优化策略: 1. **尽量使用源生方法**: JavaScript是解释型语言,其执行速度相对较慢。然而,浏览器内置了许多优化过的API和函数,比如DOM操作、数组处理等。使用这些原生...

Global site tag (gtag.js) - Google Analytics