用户访问页面的过程:
用户输入/点击网站地址:
(1)DNS查询,返回IP地址
(2)用户往浏览器发请求(TCP连接)
(3)服务器查询数据库
(4)服务器将查询到的内容返回给用户
(5)用户浏览器展示html、CSS、JS等内容
性能优化
(1)DNS服务优化
本身不用优化,一般DNS都很快(如需的话可以买服务器)。但这里可以使用CDN,为后续传输内容过程优化做铺垫。
- CDN就近请求内容
CDN(Content Delivery Network),即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
CND加速主要是加速静态资源,如网站上面上传的图片、媒体,以及引入的一些Js、css等文件。
(2)减少用户发请求的时间
- TCP连接复用(keep-alive)
- 加域名。给用户请求多加几个域名,不同请求放到不同域名。
- cookie free:不需要cookie的内容请求发到另一个不需要cookie的域名上面
将前端多个客户的HTTP请求复用到后端与服务器建立的一个TCP连接上。减小服务器的性能负载,减少与服务器之间新建TCP连接所带来的延时,并最大限度的降低客户端对后端服务器的并发连接数请求,减少服务器的资源占用
浏览器限制了用户一次发请求的个数
在请求下载静态小图片、静态小文件的时候,浏览器会把它当成普通请求一样,在request的header信息里附加cookie信息。为了避免让浏览器发送这些无用的cookie信息,在服务器端做设置都是没有用的,因为这浏览器端主动发送的。只有通过使用另一个不存在cookie的域名,才能让浏览器不发送cookie信息。
(3)sql查询优化
(4)缩小返回内容时间
- 可以增加服务器带宽(花钱就可)
- 开启压缩算法(开启gzip压缩算法,浏览器拿到压缩包后会自己解压的)
时间 = 下载量大小 / 速度
(5)缩小用户看到页面显示内容需要的时间
- 先加载CSS,再加载JS(因为一般用户先看内容,不做操作);
- 懒加载,先不加载第二屏/某些图片
- 预加载:在用户很经常做的操作上预加载
- HTTP缓存:可以设置Cache-control,Expired,如果是同一文件且未到缓存时间,就不会发请求。以前会用E-tag或者last-modified字段,如果发现文件修改再返回最新内容(没有修改的话返回304)
html基本不能,现在是可以生成文件名加一串md5数字
CSS优化, CSS可以用删除冲突代码优化(不过一般不用)
html不能缓存,否则就不能发现css、js修改了
其他一些知识:
一般公司性能优化过程:上线后监控系统响应速度,再优化