尽量把JS放在页面底部
循环中要多次使用的表达式,比如:判断长度的表达式、获取对象的表达式,最好在外面做个变量来保存
减少页面重绘,比如:不要在循环中改变元素外观,应该拼接好后,一次性的设置给元素,这样就只需要重绘一次
尽量避免使用eval
把全局域的变量缓存成为局部域的变量,全局变量其实是window对象成员,而局部变量是放在函数的栈里的,局部变量访问更快
尽量避免对象的嵌套查询,比如:obj1.obj2.obj3这样的表达式就会引起多次查找,应该把各个对象用局部变量缓存起来,这样后续使用就直接使用
当需要将数字转换成字符时,采用如下方式:“” + 数字的方式最快
当需要将浮点数转换成整型时,应该使用Math.floor()或者Math.round().而不是使用parseInt(),Math是内部对象,速度是最快的
尽量让代码简洁,比如变量名、方法名在不影响语意的情况下尽量简单
连加多个字符串的,可以使用数组,把要连接的字符串放到数组中,然后使用数组的join方法,形如:var str = myArr.join("")
尽量用JSON格式来创建对象,而不是var obj = new Object(),因为前者是直接复制,而后者需要调用构造器
尽量使用JSON来创建数组,即直接使用:[param,param,param...],而不是采用new Array(param,param,param...)这种语法。因为使用JSON格式的语法是引擎直接解释的。而后者则需要调用Array的构造器
尽量使用正则表达式来操作字符串,例如替换、查找等。因为JS的循环速度比较慢,而正则表达式的操作是用C写成的API,性能比较好
对于比较大的JS对象,因为创建时时间和空间的开销都比较大,因此应尽量缓存
避免使用document.wirte,可以使用innerHTML来向页面添加对象
避免使用setTimeOut方法,应用setInterval,setTimeOut每次要重置定时器
避免with语句,with会创建自己的作用域,会增加其中执行代码的作用域长度
尽量减少对DOM的操作,避免回流,引起回流的操作常见的有:
改变窗体大小
更改字体
添加移除stylesheet块
内容改变哪怕是输入框输入文字
CSS虚类被触发如:hover
更改元素的className
当对DOM节点执行新增或者删除操作或内容更改时
动态设置一个style样式时
当获取一个必须经过计算的CSS值时,比如访问offsetWidth、clientHeight等
避免回流、建议:
1.在对DOM进行操作之前,尽可能把多次操作内容准备好,然后精良1次操作完成
2.在对DOM操作之前,把药操作的元素,先从当前DOM结构中删除,等处理好过后再添加回到DOM中。从DOM中。从DOM中删除元素的方法有:
A:通过removeChild()或者replcaeChild()实现真正意义上的删除
B:设置该元素的display样式为"none"
3.对获取的那些会触发回流操作的属性,比如offsetWidth等缓存起来
4.尽量避免通过style属性对元素的外观进行修改,因为会触发回流操作:
A:使用更改className的方式替换style.xxx=xxx的方式
B:使用style.cssText = '';一次写入样式
C:避免设置过多的行内样式
5.添加的结构外元素精良设置他们的位置为fixed或absolute
6.避免使用表格来布局
7.避免在CSS中使用JavaScript表达式
对局部使用的JS,采用异步装载,按需装载JS的方式,比如使用JQuery的:
jQuery.getScript('t.js',function(){t1();})
这个是没有缓存的js的,要缓存的话,如下:
jQuery.ajax{(
url:"t.js",
dataType:"script",
cache:true
)}.done(function(){
t1();
});
其他优化事项
尽量避免重定向,尤其是一些不必要的重定向,如对Web站点子目录的后面添加个"/",就能有效避免一次重定向
避免Http 404错误
尽可能的减少系统中的时序约束
尽量实现无状态,尽可能在浏览器端维护会话,采用Cookie
尽量利用分布式缓存来存放状态,且要避免:
避免某些功能要求关联到某个服务器
不要使用状态或者会话复制
不要把缓存放在执行操作的系统上,应该是公共的
合理利用页面缓存,比如varnish
合理利用对象或者数据缓存,如memercached
尽可能使用异步通信,通常下面这些都应该是异步的:
调用外部api,或者是第三方的应用
长时间运行程序
容易出错的,或者频繁更改的方法
没有时间约束的方法,比如发邮件
网友评论