Skip to content

博客加载性能优化

发布日期:2024-01-12

本文介绍了通过 nginx 配置、资源压缩、前端代码调整等方式,优化此博客首页加载性能的过程。


1.开启 http2

由控制台响应头可见,目前 nginx 使用 http1.1,在 nginx.cong 添加以下代码开启 http2

# before
server {
    listen       80;
    listen 443 ssl;
    ...

# after
server {
    listen       80;
    listen 443 ssl http2;
    ...

接下来重启 nginx 服务 nginx -s reload,可以在控制台中看到已经开启了 http2。

可以看到,对比 http1.1 加载速度快了不少,但是出现了很多 waiting for server response 的绿色条。客户端的请求是并行发出的,但受限于服务器峰值 4Mbps 带宽小水管,最大下载速度只有可怜的 0.5Mb/s,因此要等待服务器发送完上一个资源才能发送下一个资源,waiting for server response 就显得很久了。

2. 开启 gzip

nginx.cong 添加以下代码开启 gzip

http {
  # 开启gzip
  gzip  on;
  # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
  gzip_min_length 1k;
  # gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间。一般设置1和2
  gzip_comp_level 1;
  # 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
  gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  # 是否在http header中添加Vary: Accept-Encoding,建议开启
  gzip_vary on;
  # 禁用IE 8 gzip
  gzip_disable "MSIE [1-8]\.";
  ...
}

开启后加载速度又快了不少,此时运行 LightHouse 性能测试,性能得分 86 分

3. 开启 nginx 缓存

nginx.cong 添加以下代码开启缓存

location ~ .*\.(gif|jpg|jpeg|png|ico|css|js|woff|woff2|ttf)$ {
    root	/usr/share/nginx/blog;
    #禁用缓存
    #add_header Cache-Control no-cache; 
    # 关闭日志
    access_log off;
    #缓存7天
    expires 7d;		
}

此时再次执行 LightHouse 性能测试,性能得分 92 分

lighthouse性能评分

Nginx优化静态资源加载解决Waiting(TTFB)时间过长问题

补充知识

基于前端技术的首页优化方案

  1. 资源加载顺序,使用 async/defer 属性处理 script 标签,避免阻塞 DOM 解析
  2. 资源(图片、字体、样式)懒加载,预加载,压缩
  3. 开启 GPU 加速,比如使用 will-change 属性,构建 BFC 避免回流重绘
  4. 减少 css 样式嵌套深度
  5. 打包优化,减少首页包体积,合理分包
  6. 路由懒加载、组件懒加载
  7. 骨架屏
  8. 虚拟滚动
  9. preload、prefetch

基于后端和运维技术的首页优化方案

  1. 使用 CDN
  2. 使用合适的缓存策略
  3. 开启 gzip
  4. 开启 http2