一次网站的性能优化之路 -- 天下武功,唯快不破 (3)

所以把不需要给前端展示的字段注释掉或者删除。

// 待返回的字段 let fields = { title: 1, // author: 1, // keyword: 1, // content: 1, desc: 1, img_url: 1, tags: 1, category: 1, // state: 1, // type: 1, // origin: 1, // comments: 1, // like_User_id: 1, meta: 1, create_time: 1, // update_time: 1, };

同样对其他的接口都做了这个处理。

后端做了处理之后,所有的接口速度都加快了,特别是文章列表接口,只用了 0.04 - 0.05 秒左右,相比之前的 4.3 秒,速度提高了 100 倍,简直不要太爽, 效果如下:

image.png

此刻心情如下:

一次网站的性能优化之路 -- 天下武功,唯快不破

2.3 服务器优化

你以为前后端都优化一下,本文就完了 ?小兄弟,你太天真了,重头戏在后头 !

一次网站的性能优化之路 -- 天下武功,唯快不破

笔者服务器用了 nginx 代理。

做的优化如下:

隐藏 nginx 版本号

一般来说,软件的漏洞都和版本相关,所以我们要隐藏或消除 web 服务对访问用户显示的各种敏感信息。

如何查看 nginx 版本号? 直接看 network 的接口或者静态文件请求的 Response Headers 即可。

没有设置之前,可以看到版本号,比如我网站的版本号如下:

Server: nginx/1.6.2

设置之后,直接显示 nginx 了,没有了版本号,如下:

Server: nginx

开启 gzip 压缩

nginx 对于处理静态文件的效率要远高于 Web 框架,因为可以使用 gzip 压缩协议,减小静态文件的体积加快静态文件的加载速度、开启缓存和超时时间减少请求静态文件次数。

笔者开启 gzip 压缩之后,请求的静态文件大小大约减少了 2 / 3 呢。

gzip on; #该指令用于开启或关闭gzip模块(on/off) gzip_buffers 16 8k; #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。16 8k代表以8k为单位,安装原始数据大小以8k为单位的16倍申请内存 gzip_comp_level 6; #gzip压缩比,数值范围是1-9,1压缩比最小但处理速度最快,9压缩比最大但处理速度最慢 gzip_http_version 1.1; #识别http的协议版本 gzip_min_length 256; #设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。这里我设置了为256 gzip_proxied any; #这里设置无论header头是怎么样,都是无条件启用压缩 gzip_vary on; #在http header中添加Vary: Accept-Encoding ,给代理服务器用的 gzip_types text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml text/javascript application/javascript application/x-javascript text/x-json application/json application/x-web-app-manifest+json text/css text/plain text/x-component font/opentype font/ttf application/x-font-ttf application/vnd.ms-fontobject image/x-icon; #进行压缩的文件类型,这里特别添加了对字体的文件类型 gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #禁用IE 6 gzip

把上面的内容加在 nginx 的配置文件 ngixn.conf 里面的 http 模块里面即可。

是否设置成功,看文件请求的 Content-Encoding 是不是 gzip 即可。

一次网站的性能优化之路 -- 天下武功,唯快不破

设置 expires,设置缓存

server { listen 80; server_name localhost; location / { root /home/blog/blog-react/build/; index index.html; try_files $uri $uri/ @router; autoindex on; expires 7d; # 缓存 7 天 } }

我重新刷新请求的时候是 2019 年 3 月 16 号,是否设置成功看如下几个字段就知道了:

一次网站的性能优化之路 -- 天下武功,唯快不破

Staus Code 里面的 form memory cache 看出,文件是直接从本地浏览器本地请求到的,没有请求服务器。

Cache-Control 的 max-age= 604800 看出,过期时间为 7 天。

Express 是 2019 年 3 月 23 号过期,也是 7 天过期。

注意:上面最上面的用红色圈中的 Disable cache 是否是打上了勾,打了勾表示:浏览器每次的请求都是请求服务器,无论本地的文件是否过期。所以要把这个勾去掉才能看到缓存的效果。

终极大招:服务端渲染 SSR,也是笔者接下来的方向。

3.1 测试场景

一切优化测试的结果脱离了实际的场景都是在耍流氓,而且不同时间的网速对测试结果的影响也是很大的。

所以笔者的测试场景如下:

a. 笔者的服务器是阿里的,配置是入门级的学生套餐配置,如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydgxp.html