| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 963 人关注过本帖, 1 人收藏
标题:提高程序执行效率,Web开发技巧30条
只看楼主 加入收藏
风月_无边
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:60
帖 子:2960
专家分:652
注 册:2007-1-19
结帖率:100%
收藏(1)
已结贴  问题点数:0 回复次数:3 
提高程序执行效率,Web开发技巧30条
目前的Web应用程序愈发的复杂化,包括拥有富客户端以及大量的JavaScript编码等等,从用户角度而言,让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验,这就需要开发人员应提高应用程序的执行效率,以下是关于提高程序执行效率的小技巧。

  1.尽量避免使用DOM。当需要反复使用DOM时,先把对DOM的引用存到JavaScript本地变量里再使用。使用设置innerHTML的方法来替换document.createElement/appendChild()方 法。

  2.eval()有问题,new Fuction()构造函数也是,尽量避免使用它们。

  3.拒绝使用with语句。 它会导致当你引用这个变量时去额外的搜索这样的一个命名空间,with里的代码在编译时期是完全未知的。

  4.使用for()循环替代for…in循 环。因为for…in循环在开始循环之前需要Script引擎创建一个含有所有可循环属性的 List,需要多检查一次。

  5.把try-catch语句放在循环外面,不要放在循环里面,因为异常是很少发生的,放在外面避免每次都要执行它们。

  6.甚至圣经里都提到过这个 – 不要全局的。全局变量的生命周期贯穿整个脚本的生命周期,而本地变量的存在范围随着本地命名空间的销毁而消失。当在函数或其它地方引用一个全局变量时,脚 本引擎需要搜索整个全局命名空间。

  7.fullName += 'John'; fullName += 'Holdings';执行速度快于fullName += 'John' + 'Holdings';

  8.如果你需要把多个字符串连接起来,最好是把他们做成一个数组,然后调用join()方法实现这个操作。这种方式在生成HTML片段时尤其有效。

   9.对于简单的任务,最好使用基本操作方式来实现,而不是使用函数调用实现。例如val1 < val2 ? val1 : val2;执行速度快于Math.min(val1, val2);,类似的,myArr.push(newEle);慢于myArr[myArr.length] = newEle;

   10.将函数的引用作为参数传递到setTimeout()和setInterval()里优于将函数名作为字符串参数传递(硬编码)。例 如,setTimeout(”someFunc()”, 1000)执行效率慢于setTimeout(someFunc, 1000)

  11.当进行遍历操作时避免使用DOM操作。通过像getElementsByTagName()这 种方法得到的DOM元素队列都是动态的;有可能在你还没有对它遍历完成时,它已经被改变。这有可能导致死循环。

  12.当你对对象的成员(属性或方法)进行反复操作时,先存储对它们的引用。例如var getTags = document.getElementsByTagName; getTags(’div’);

  13.在任何的代码段里,在局部变量范围外存放一个这个局部变量的引用。例如

   1. function foo(arr) {  
   2. var a = ’something’;  
   3.

   4. //变量 ‘a’ 对于下面的一段就是范围外变量,这个变量的引用在很多情况下会有用处。  
   5. for (var i = 0, j = a, loopLen = arr.length; i < loopLen; i++) {  
   6. //do something  
   7. }  
   8. }

  14.for(var i=0; i < someArray.length; i++) {…}的执行效率慢于for (var i=0, loopLen=someArray.length; i< i++)>

  15.在HTTP头信息里加入缓存控制过期和最大存活时间标记。
收到的鲜花
  • 笨笨林2010-08-05 09:20 送鲜花  10朵   附言:我很赞同
搜索更多相关主题的帖子: Web 开发 效率 技巧 
2010-08-04 11:51
风月_无边
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:60
帖 子:2960
专家分:652
注 册:2007-1-19
收藏
得分:0 
16.优化CSS。要使用方式,而不要使用@import方式。
请参考这个优秀的文档http://www.

  17.使用CSS技术来优化图片资源。关于Web前段优化,欢迎访问:改善用户体验 Web前端优化策略总结

  18.用GZip方式压缩.js和.css文件。如果你使用的是Apache,在 .htaccess 里设置压缩方式,你的HTML, XML和JSON也同时会被压缩。

  AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/json

  19.使用JavaScript压缩工具。除了使用YUI和JSMin外。

  20.优化每个页面上的各种资源,把它们拆分到各个子域上,这么它们就能够并行下载。

  21.将CSS样式表放在页面的最顶端,这样能方便包括IE在内的浏览器进行解析。

  22.尽量将DOM结构保持的越简单越好。DOM的体积会影响相关的操作效率,像查找, 遍历,DOM改动都有影响。document.getElementsByTagName(’*').length这 个值越小越好。

  23.注意你使用的选择器。例如,如果你想获取一个ul下的直接子元素,使用jQuery(”ul > li”)而不要使用jQuery(”ul li”)

  24.当切换元素的可见性时(display),请记住:element.css({display:none})的 速度快于element.hide() 和 element.addClass(’myHiddenClass’)。 除非在一个循环里,我选择element.addClass(’myHiddenClass’), 这样会使代码更简洁 – 不要使用inline CSS和JavaScript。

  25.当你使用完对DOM的引用变量后,要把它置为NULL。

  26.使用AJAX时,GET的执行效率高于POST。所以要尽量使用GET方式。只是要注意一点,IE只允许你用GET传送2K的数据。

  27.小心使用脚本动画。没有硬件的支持,动画会执行的很慢。尽量避免使用那些没有实际价值的动画效果。

  28.如果你的background-image对于这个图片的容器太小的话,请避免使 用background-repeat。如果你的背景图片需要来回填充很多次才能充满背景,那么将background-repeat属性设置成 background-image 和repeat-x 或 repeat-y来 达到填充背景的效果的做法是不明智的,这种填充方式的效率特别的低。你应该尝试使用一个足够大的图片来做background-image并 且使用background-repeat: no-repeat。

  29.布局时不要使用

在浏览器完全把它画出来之前需要反复绘制好几次。因为DOM中
是很少见的一种之后输出的会影响之前输出的显示效果的元素。对于表格数据来说,你可 以使用table-layout:fixed; 这是一种更有效的现实算法,根据CSS 2.1技术说明,这种写法可以让表格一行一行的输出。

  30.尽可能的使用原始JavaScript。限制JavaScript框架的使用。

我的网站 http://www.
2010-08-04 11:53
笨笨林
Rank: 6Rank: 6
等 级:贵宾
威 望:21
帖 子:482
专家分:408
注 册:2007-7-28
收藏
得分:20 
好帖,虽然很多都是知道的,但能总结到一起,帮助还是很大的。

程序授权说明:http://www./authorization.php  无路难开路难。  帮助别人是快乐的,也只有帮助别人,才能得到别人的帮助。互相帮助,才能共同进步。
2010-08-05 09:19
asmdaydream
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:中原
等 级:版主
威 望:13
帖 子:257
专家分:840
注 册:2009-5-10
收藏
得分:0 
每次看到这个都会再看一次,离真理不远了

常走夜路不怕黑 长沙PHP高薪招聘群6K+ 95926136
2010-08-24 15:08
快速回复:提高程序执行效率,Web开发技巧30条
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015428 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved