网站性能优化各层面的几个建议

一、Web前端层面

1.1 图片资源的压缩;

1.2 js、css资源的压缩。

二、业务逻辑代码层面

2.1 禁止循环体内查询数据库

2.2 将常用的配置型数据存至Redis

2.3 使用 StringBuilder 的 append 方法。

(说明:循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。下例中,反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象, 然后进行 append 操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费。)

//反例:
String str = "start"; 
for (int i = 0; i < 100; i++) 
{ 
str = str + "hello";
}

三、数据库层面

3.1 适当冗余,以提高查询性能;

(说明:打破第三范式标准,适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:1)不是频繁修改的字段。2)不是 varchar 超长字段,更不能是 text 字段。)

3.2 数据库表字段数据结构的错误设置;

(说明:合适的字符存储长度可提升检索速度。并且错误的数据类型也影响查询速度。)

3.3 索引;

(说明:业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。)

3.4 join;

(说明:join 的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。)

3.5 order by;

(说明:利用索引的有序性。order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后。)

正例:where a=? and b=? order by c; 索引:a_b_c

反例:索引中有范围查找,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b; 索引 a_b 无法排序。

3.6 利用延迟关联或者子查询优化超多分页场景;

(说明:先快速定位需要获取的 id 段,然后再关联:SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.id)

3.7 建组合索引的时候,区分度最高的在最左边;

正例:如果 where a=? and b=? ,如果 a 列的几乎接近于唯一值,那么只需要单建 idx_a 索引即可。

(说明:存在非等号和等号混合时,在建索引时,请把等号条件的列前置。如:where c>? and d=? 那么即使 c 的区分度更高,也必须把 d 放在索引的最前列,即索引 idx_d_c)

3.8 防止因字段类型不同造成的隐式转换,导致索引失效。


欢迎分享,(木庄网络博客交流QQ群:562366239

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论