LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

WEB前端开发高性能优化之JavaScript优化细节

admin
2010年4月27日 2:10 本文热度 7204
[p]作为一名网站开发web前端工程师,对自己开发的网站项目应该尽可能地对其性能进行优化,现在互联网上搜索到的网站性能优化多是翻译转载自 yahoo14条或34条。yahoo的优化建议关注在大的方面,下面,w3c group为大家呈现web前端开发高性能优化部分之javascript的优化细节![/p]
[p]一、避免出现脚本失控[/p]
[p]不论什么脚本,在任何时间、任何浏览器上执行,都不应该超过100毫秒。如果实际执行的时间长于这个底限,一定要将进程分解成若干更小的代码段。[/p]
[p]脚本失控基本上有以下四个方面的原因:[/p]
[p]1. 在循环中执行了太多的操作[/p]
[p]解决这个问题的诀窍就是用下面这两个问题来评估每个循环:[br]1. 这个循环必须要同步执行么?[br]2. 循环里面的数据,必须要按顺序执行么?[/p]
[p]如果1和2都可以否定,那么建议使用settimeout方式将循环体切分成小块进行异步处理[/p]
[p]将循环中的定义变量及初始化操作放到循环外。参见:http://w3cgroup.com/article.asp?id=111[/p]
[p]2. 臃肿的函数体[/p]
[p]在javascript中,我们应该尽可能的用局部变量来代替全局变量![/p]
[p]理解javascript作用域链。参见:http://jslab.org.cn/?tag=scopechainandclosure[/p]
[p]理解原型链。参见:http://jslab.org.cn/?tag=prototypechain[/p]
[p]3. 过多的递归[/p]
[p]使用迭代方式替代递归,采用memoization技术优化递归[/p]
[p]斐波那契数列的递归算法优化,参见:http://jslab.org.cn/?tag=memoization[/p]
[p]4. 过多的dom调用[/p]
[p]在web开发中,javascript的一个很重要的作用就是对dom进行操作。可你知道么?对dom的操作是非常昂贵的,因为这会导致浏览器执行回流(reflow)操作。而执行了过多的回流操作,你就会发现自己的网站变得越来越慢了。我们应该尽可能的减少dom操作。[/p]
[p]回流操作主要会发生在几种情况下:[/p]
[p]* 改变窗体大小[br]* 更改字体[br]* 添加移除stylesheet块[br]* 内容改变哪怕是输入框输入文字[br]* css虚类被触发如 :hover[br]* 更改元素的classname[br]* 当对dom节点执行新增或者删除操作或内容更改时。[br]* 动态设置一个style样式时(比如element.style.width=”10px”)。[br]* 当获取一个必须经过计算的尺寸值时,比如访问offsetwidth、clientheight或者其他需要经过计算的css值(在兼容dom的浏览器中,可以通过getcomputedstyle函数获取;在ie中,可以通过currentstyle属性获取)。[/p]
[p]解决问题的关键,就是限制通过dom操作所引发回流的次数:[/p]
[p]1.在对当前dom进行操作之前,尽可能多的做一些准备工作,保证n次创建,1次写入。[/p]
[p]2.在对dom操作之前,把要操作的元素,先从当前dom结构中删除:[br]1. 通过removechild()或者replacechild()实现真正意义上的删除。[br]2. 设置该元素的display样式为“none”。[br]修改操作完成后,将上面这个过程反转过来,建议使用第2种方式。[/p]
[p]3.css部分[br]另外一个经常引起回流操作的情况是通过style属性对元素的外观进行修改,如element.style.backgroundcolor = “blue”;[br]每次修改元素的style属性,都肯定会触发回流操作,要解决这个问题可以:[br]1.使用更改classname的方式替换style.xxx=xxx的方式。[br]2.使用style.csstext = ”;一次写入样式。[br]3. 避免设置过多的行内样式[br]4. 添加的结构外元素尽量设置它们的位置为fixed或absolute[br]5. 避免使用表格来布局[br]6. 避免在css中使用javascript expressions(ie only)[/p]
[p]4.将获取的dom数据缓存起来。这种方法,对获取那些会触发回流操作的属性(比如offsetwidth等)尤为重要。[/p]
[p]5.当对htmlcollection对象进行操作时,应该将访问的次数尽可能的降至最低,最简单的,你可以将length属性缓存在一个本地变量中,这样就能大幅度的提高循环的效率。[/p]
[p]二、避免大字符串字面量对象操作,如 字符串.lenth,尽量转换为new string(字符串)后再进行操作[/p]
[p]三、在做字符查找替换等操作时善用正则表达式[/p]
[p]快速掌握ecmascript正则表达式。参见:http://w3cgroup.com/article.asp?id=202[/p]
[p]四、减少语句,利用运算符优先级实现if else表达式,使用三元表达式,使用连续表达式(看情况,将损失程序可读性)[/p]
[p]利用运算符优先级实现if else表达式参见:http://w3cgroup.com/article.asp?id=131[/p]
[p]五、将css,js文件合并到一个文件(非bt爱好者还是不要玩了^_^)[/p]
[p]参见:http://w3cgroup.com/article.asp?id=29[/p]
[p]六、避免javascript事件绑定出现内存泄漏[/p]
[p]“these memory leaks often occur as a result of circular references between javascript objects and objects within ie’s dom (document object model).” microsoft gpde team blog[/p]
[p]参见:http://w3cgroup.com/article.asp?id=207[/p]
[p]七、使用web workers技术(支持html5的浏览器)[/p]
[p]web workers为javascript提供了一种能在后台进程中运行的方法,web workers进程能够在不影响用户界面的情况下处理任务。[/p]
[p]参见:http://w3cgroup.com/article.asp?id=242[/p]
[p]八、y!14条(14 rules for faster-loading web sites)[/p]
[p]* rule 1 – make fewer http requests[br]* rule 2 – use a content delivery network (server端)[br]* rule 3 – add an expires header (server端)[br]* rule 4 – gzip components (server端)[br]* rule 5 – put stylesheets at the top[br]* rule 6 – put scripts at the bottom[br]* rule 7 – avoid css expressions[br]* rule 8 – make javascript and css external[br]* rule 9 – reduce dns lookups (server端)[br]* rule 10 – minify javascript[br]* rule 11 – avoid redirects (server端)[br]* rule 12 – remove duplicate scripts[br]* rule 13 – configure etags (server端)[br]* rule 14 – make ajax cacheable[br]* rule 15 – use iframes wisely[/p]
[p]参见:http://w3cgroup.com/article.asp?id=97[/p]
[p]九、微软早期的dhtml优化建议[/p]
[p]* 使用数组push替代字符串累加[/p]
[p]原文:[url=http://w3cgroup.com/article.asp?id=255]http://w3cgroup.com/article.asp?id=255[/url][/p]

该文章在 2010/4/27 2:10:18 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved