欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

30个提高Web程序执行效率的好经验分享

程序员文章站 2022-06-05 13:16:16
尽量避免使用dom。当需要反复使用dom时,先把对dom的引用存到javascript本地变量里再使用。使用设置innerhtml的方法来替换document.crea...
  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. 在任何的代码段里,在局部变量范围外存放一个这个局部变量的引用。例如
    function foo(arr) {
    var a = ‘something';

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

  14. for(var i=0; i < somearray.length; i++) {…}的执行效率慢于for (var i=0, looplen=somearray.length; i<looplen; i++) {…}
  15. 在http头信息里加入缓存控制过期和最大存活时间标记。
  16. 优化css。要使用<link>方式,而不要使用@import方式。请参考这个优秀的文档
  17. 使用css技术来优化图片资源
  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外,你还可以试一试google closure (感谢: james westgate, 一位读者)
  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-imagerepeat-xrepeat-y来 达到填充背景的效果的做法是不明智的,这种填充方式的效率特别的低。你应该尝试使用一个足够大的图片来做background-image并 且使用background-repeat: no-repeat
  29. 布局时不要使用<table><table>在浏览器完全把它画出来之前需要反复绘制好几次。因为dom中<table>是很少见的一种之后输出的会影响之前输出的显示效果的元素。对于表格数据来说,你可 以使用table-layout:fixed; 这是一种更有效的现实算法,根据css 2.1技术说明,这种写法可以让表格一行一行的输出。
  30. 尽可能的使用原始javascript。限制javascript框架的使用。