项目优化方案

2023-08-14 24℃

        对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘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方法代替+=的方式。

标签: 教程分享

非特殊说明,本博所有文章均为博主原创。