网站访问流程为:
1、打开浏览器
2、输入网址
3、浏览器根据域名获取网站ip
4、浏览器和目标ip建立tcp连接
5、浏览器往目标ip发起http协议请求
6、目标ip返回数据
7、浏览器渲染显示数据
从步骤上看,1,2,7不在个人控制范围内,是无法优化的。我们重点讨论剩下步骤的优化方案。
浏览器根据域名获取网站ip:
浏览器获取域名ip流程为先从系统配置的host文件查询(win位置为C:\Windows\System32\drivers\etc\hosts,linux位置为/etc/hosts),如果配置了host,则直接取配置的ip;如果没有配置host,则会向本地配置的dns请求域名的ip。
优化方案:
1、本地可以配置host,直接访问,避免dns请求。
2、如果本地不方便配置host,可以选择设置具有缓存功能的dns服务器,这样对于已经递归查询过的域名ip,下次可以直接返回,避免重新查询
3、网站接入cdn,可以访问就近的ip
浏览器和目标ip建立tcp连接:
建立tcp连接需要三次握手,client向server发送syn包,server响应syn+ack,client再响应ack,然后双发连接建立。
优化方案:
1、服务器设置keep alive,保持连接一段时间,减少tcp连接次数。
浏览器往目标ip发起http协议请求和目标ip返回数据
浏览器往服务器请求页面数据,包括动态请求,静态页面html,css,js和图片
优化方案:
1、静态文件压缩,减少传输量
2、静态文件合并,减少请求数
3、静态文件设置本地缓存,减少下次请求数
4、动态请求的热点数据,保存到缓存(redis,memcache)
5、只加载第一屏的数据,剩余数据设置为滚动加载
6、css,js文件设置成按需加载
7、部分耗时的页面数据,通过ajax异步请求加载显示
8、尽量减少页面跳转和重定向
9、样式定义写在文件顶部,脚本文件加载写在文件底部