资源合并
CSS sprites雪碧图
iconfont
svg symbols
资源内联
https://docs.nginx.com/nginx/admin-guide/web-server/compression/
- Apache
https://ubiq.co/tech-blog/enable-gzip-compression-apache/
- Node.js
https://nodejs.org/api/zlib.html#zlib_zlib
代码精简
- HTML
- 删空格、删闭合
- CSS
- 删未用
- JS
- 改名、tree shaking
- SVG
- 删无用标签、属性
- 图片
- 减少体积(有损/无损)
优化Cookie
4kb
不要用Cookie存数据,用LocalStorage/SessionStorage
css来自1.com js来自2.com json来自3.com
用新域名的好处是CookieFree
CDN内容分发网络
在多地设置服务器,把内容分发到各个服务器
负载均衡
优点
- cookie Free
- 并行请求/多路复用
- 下载速度快
缺点
- 要花钱
- 部署复杂
- 可控性差
- 跨域 CORS
「CDN 会出现什么样的跨域问题?」
- Canvas 虽然可以加载跨域图片,但是在调用 getImageData() toBlob() toDataURL() 时会产生报错,解决办法是启用 CORS 头,并给图片添加 crossorigin=anonymous 属性。详见 MDN
- window.addEventListener(‘error’, …) 无法捕获跨域 JS 的错误详情。解决办法有两个,一个是启用 CORS 头并给 script 标签添加 crossorigin=anonymous 属性,另一个比较开脑洞,是重写 addEventListener,详见《解决 “Script Error” 的另类思路》。
「项目中的 .gz 文件是干什么用的?」
Nginx 实际上提供了两种 gzip 模式:gzip on; 和 gzip_static on;。
前者会在每次请求时压缩文件,有一点浪费 CPU;
而后者会在遇到 /path/to/file 请求时,主动寻找 /path/to/file.gz 作为压缩版本,找不到就直接返回未压缩的版本。
后者的优先级更高,且由于使用的是程序员预先压缩好的 gz 文件,所以更节省 CPU 性能,但是它可能并不是 Nginx 默认就有的功能,需要在编译 Nginx 的时候添加扩展选项。