对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。
向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。
(1) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
(2) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
(3) 当需要设置的样式很多时设置className而不是直接操作style。
(4) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
(5) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
(6) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。
(7) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。
静态资源优化方案:
1.配置超长时间的本地缓存 —— 节省带宽,提高性能
2.采用内容摘要作为缓存更新依据 —— 精确的缓存控制
3.静态资源CDN部署 —— 优化网络请求
4.更资源发布路径实现非覆盖式发布 —— 平滑升级
如何提高首频加载速度:
1.js外联放到body底部,css外联放到head内
2.http静态资源尽量用多个子域名
3.服务器端提供html和http静态资源时最好开启gzip
4.在js,css,img等资源响应的http headers里设置expires,last-modified
5.尽量减少http requests的数量
6.js/css/html/img资源压缩
7.使用css spirtes,可以减少img请求次数
8.大图使用lazyload懒加载
9.避免404,减少外联js
10.减少cookie大小可以提高获得响应的时间
11.减少dom elements的数量
12.使用异步脚本,动态创建脚本
开发建议:
1.为方便管理少量样式集中在一个css文件,通过前缀区分,避免样式相互影响。少用内联样式。代码越少越好(用速记方式,压缩代码…)
2.接口地址、全局变量、参数集中在一个js文件里方便管理修改和版本转换。
3.统一接口返回数据字段名命名规则。接口返回数据变化尽量一添加新字段为主。
4.生成dom先以str字串拼接完成在赋值转成dom(不可见的元素不重排和重绘,不触发重新渲染)。修改样式通过改变class类名,一次性地改变样式少触发重新渲染。
5.文件(包括前台页面,后台程序,txt文件等)编码统一用UTF-8(无BOM),接口传输编码统一(UTF-8),避免中文乱码
6. 数值和变量的性能差不多,并且速度显著优于对象属性和数组元素;
var list,listnow; //减少循环次数,减少对象读取次数
for (var i=0,lim=list.length;i < lim;i++){
listnow =list[i];
}
list=null;listnow=null;// 释放Javascript对象(避免内存溢出)
7.避免与null比较,避免使用eval()函数,不要使用 with() 语句,转换字符用toString()
8.HTML中使用双引号,在JavaScript中使用单引号,定义JSON对象时,最好使用双引号。
9.定时器不应该使用setTimeout,而应该使用setInterval。因为setTimeout每一次都会初始化一个定时器,而setInterval只会在开始的时候初始化一个定时器。
10.数组拼接字符串用join方法代替+=的方式。
DUDU