一个web项目的简单优化
优化站点:静态官网,由于租的阿里云的服务器配置低,带宽小,资源下载速度慢,打开网站需要的响应时间较长。
主要方式:浏览器展示的内容都需要从服务端下载,通过减少http请求次数和减少文件的体积,提高页面的响应速度。
测试工具:Google pageSpeed(访问需要线上地址,需要科学上网工具)
一个请求过程:浏览器提交URL,dns解析成ip地址,tcp连接,http请求,经过网关,服务器返回资源,前端处理。
这里主要提到的是浏览器缓存和前端资源的优化。
一.浏览器缓存
主要是HTTP协议定义的缓存机制,当页面资源被缓存后,页面再次请求资源时,会先从缓存获取资源,缓存不存在再从服务器获取。
1.浏览器缓存机制
缓存状态会表现在http协议的header中,header中常见的有四种:
- Expires
- Cache-Control
- Last-modified(if-modified-since)
- Etag(if-none-match)
1.Expires
Expires头是HTTP1.0中定义的,指定了一个日期/时间,这是一个绝对时间,在Response中显示,在这个日期/时间之后,HTTP响应被认为是过时的。当请求头中存在cache-control时,忽略expires
|
|
2.Cache-Controle
Cache-Control头是HTTP1.1中定义的,(general header)通用首部,即可应用与Request也可应用与Response,通过指定指令来实现缓存机制。缓存指令是单向的, 这意味着在请求设置的指令,在响应中不一定包含相同的指令。
|
|
3.Last-modified(if-[un]modified-since)
Last-Modified是一个header Response,其中包含源头服务器认定的资源做出修改的日期及时间。它通常被用作一个验证器来判断接收到的或者存储的资源是否彼此一致。由于精确度比ETag要低,所以这是一个备用机制。当header Request包含有If-Modified-Since或If-Unmodified-Since条件时,会在响应中使用这个字段。
|
|
4.Etag(if[-none]-match)
ETag是一个header Response,是资源的特定版本的标识符。这可以让缓存更高效,并节省带宽,因为如果内容过期但内容没有改变,Web服务器不需要发送完整的响应。而如果内容发生了变化,使用ETag有助于防止资源的同时更新相互覆盖(“空中碰撞”)。
如果给定URL中的资源更改,则一定要生成新的Etag值。 因此Etags类似于指纹,也可能被某些服务器用于跟踪。 比较etags能快速确定此资源是否变化,但也可能被跟踪服务器永久存留。
|
|
2.nginx实现
1.配置缓存
在nginx中匹配相应的资源,通过expires字段添加缓存时间
|
|
2.配置gzip
开启gzip,gzip(GNU-ZIP)是一种压缩技术,服务器端压缩,传到浏览器后浏览器解压并解析,减小传输体积,提高传输速度。
|
|
二.前端构建工具
1.gulp
尝试选用gulp前端构建工具构建项目。相比于webpack的完整强大,gulp相对小巧。
准备:
- node
- npm
安装:
- 全局安装gulp
|
|
- 添加项目依赖
|
|
- 创建gulpfile.js文件
|
|
开发:
gulp以链式方式编程,通过pipe函数连接,从源目录,中途经过插件处理生成处理后文件存放到目标目录。例:
- gulp.task(name[, deps], fn)
|
|
- 终端执行
|
|
ps:gulp文档
2.gulp实现
- 安装插件
|
|
- gulpfile.js
|
|
—-完—-