页面反映慢怎么优化是一个常见的面试题,优化的方向也很多,稍作整理。
优化方向
- 浏览器缓存
- cdn
- 服务器端缓存
- 提高sql查询速度
- 提前生成相关资料数据, 预加载
- 使用新技术,如http2
浏览器缓存
不管是js, css 还是后端接口,都可以设置浏览器缓存。
如下图接口, 加载左侧菜单接口, 加载只需要1ms,使用disk cache
接口可以设置浏览器缓存,只需要启用browser cache中间件即可
https://gitee.com/youwen21/business_data_model/blob/master/app/Http/Handler/BrowserCacheHandler.php
cdn
CDN是最常规的加速手段, css, js都可以用cdn进行加速。
加速原理是: 一,降低服务器的请求数量, 二,用户从最近的节点拉取资源。
服务器端缓存
使用redis, 或常注内存等手段,快速获得数据。 避免请求下游多个接口,数据库等操作。
最基本就是原理去mysql大表找的数据,去redis以 n(1)的方式取出来,加速接口返回。
提高sql查询速度
sql查询速度,有可能一个索引就搞定了。 复杂情况不是加索引搞得定, 不过,简单开发,多数优化项在此。
其次就是分库分表等操作, 降低sql的搜索行数。
另原模糊搜索的服务可以ES来提供服务。
提前生成相关数据, 预加载
这一项可以从多个方面理解。 多个方面下手。
如, 统计项,提前统计结果。
如, 一个页面的多个tab是用户必须打开的,打开率为90%,提前加载接口内容。
如,在前端,页面瀑布流或分页,可提前加载所需要图片。
如,后台任务提前准备好用户数据。
如,者前端提前加载用户所需数据,同图片预加载同理,实现加快页面速度。
使用新技术,如http2
新技术的使用也有很多方面。
如nginx比apache快,所以现在都用nginx.
如swoole比php-fpm模式快。
如go,c等静态语言,比php要快,不管php怎么优化。因为php本来就不是为和其他语言比快而生。
如http2 以二进制传输,多路复用,主动push等手段实现加速。比http1.x快。
特别交代一下多路复用另一层快原因,网络通信机制: 两个终端建立连接后,传输的包由小到大依次递增只到找出两设备可承受最优化的通信数据量。
“歪技术”
原本是动态的页面,可以改成静态的。
变更产品设计。
对于一个技术来说,这两个办法可以是歪的。
但可能也是最高效的办法。 现实也是有人这么干的。