Web 性能优化方案

首先要搞清楚用户访问网站时,经历了哪些步骤,我们才好从每一步中寻找可以优化的地方。

步骤 及 优化方法

  1. 查看缓存
    当访问某个页面时,浏览器会先检查本地有没有缓存。

方法:如果有缓存,就使用本地缓存的页面;如果没有缓存,在访问服务器。

  1. DNS 查询

浏览器访问某网站的服务器,要先进行 DNS 查询。也就是,拿到地址栏中的地址,去 DNS 服务器查询相应的 数字IP 地址,然后使用 数字IP 地址去访问该网站的服务器。

方法:减少 DNS 查询,即,尽量减少域名。

举例来说,如果 a.css 放在 A 网站,b.css 放在 B 网站,那么就要进行两次 DNS 查询;我们可以把 a.css 和 b.css 放在同一个网站,这样就只要进行一次 DNS 查询。

  1. 建立 TCP 连接

方法:TCP 连接连接复用。
即,在 HTTP 协议中加上一个请求头 keep-alive,服务器就会保持连接,当第二次请求时,就复用之前的那个连接。
另外,如果使用的是 HTTP/2.0 版本,连接复用率是更高的(多路复用)。

  1. 发送 HTTP 请求

HTTP 请求有 4 部分:
第一部分:请求行,不能优化。
第二部分:请求头。方法1:不要滥用 Cookie;减少 Cookie 体积。
第三部分:回车。
第四部分:请求的内容。方法2:在请求头中设置 Cache-Control,让浏览器使用本地的缓存文件。
方法3:合并CSS和JS文件,减少请求数。
方法4:增加域名同时请求多个文件。
同一域名可以同时请求多个 CSS 和 JS。但是不同的浏览器存在着差别:IE 浏览器最多只能同时请求 4 个文件,Chrome 浏览器最多可以同时请求 8 个文件。

由于 IE 只能从同一域名同时请求 4 个文件,所以我们可以将文件放在不同域名,那么 IE 就可以从不同域名,同时请求超过 4 个文件,那么请求速度不就加快了吗。

但是这与上面第 2 步冲突了。第 2 步提到,要减少域名,这里又说把文件放到不同的域名,那就要增加域名。

那么这里,我们就要做个“权衡”,具体情况具体分析:

如果文件多,可以放到不同域名,以此减少浏览器请求的时间(多域名);
如果文件少,就可以放到一个域名,以此减少 DNS 查询时间(少域名)。

  1. 接收响应

方法1:使用 ETag。
ETag 可以做到,当服务器发现你请求的文件是最新的(通过MD5值比对),就不给你再发送文件,而是发送 304,让你使用上次发送过的文件。

方法2:使用 Gzip。
服务器将 html、css、js 等文件压缩,浏览器接收压缩后的文件。
当然如果文件小,就不用 Gzip。
因为浏览器在进行解压时,也会耗费时间。

  1. 接收完成,解析 HTML

解析 HTML 的时候,有以下步骤:

查看 DOCTYPE,根据 DOCTYPE 选择使用 html 或者 xml 等
方法1:DOCTYPE 标签不能写错,也不能不写。
因为这样会导致浏览器解析 HTML时间变才, 甚至解析出错。

然后开始逐行解析
方法2:不要写太多无用的标签。

看到标签,浏览器会干嘛呢?Chrome 浏览器不会立即渲染该标签,它会等所有 CSS 加载完了,再渲染该标签。
方法3:把 CSS文件 放到 head 标签,这样可以尽早渲染页面。

  1. 下载解析CSS 和 JS

当浏览器碰到 CSS 和 JS 时,就会下载 CSS 或 JS,然后解析。
下载是并行的,而解析是串行的。
方法1:把 CSS文件 和 JS 文件放到 CDN(内容分发网络)。
文件放到 CDN的好处:

  1. 增大同时下载的数量。
  2. 如果客户端与服务器距离较远,放到 CDN可以减少通信过程中的时间损耗。
  3. 访问CDN不需要Cookie,从而减少了Cookie体积。

方法2:JS文件 放到 body 标签最后。
这样可以尽早显示页面,因为解析 JS 会阻塞页面渲染,同时还可以让 JS 获取到所以DOM节点。

其他优化方法
延迟加载(懒加载)
先下载第一屏内容,后面内容根据用户动作延迟加载。
避免空 src 的图片,可以写成 <img src="about:blank"/>
避免使用 @import 引入 CSS 文件。
图片压缩

好的无损压缩图片工具

第一:Tinypng
地址:https://tinypng.com/
最大限度的做到对画质无损的进行压缩,支持对Jpg和Png的压缩。

第二:Compressor.io
地址:https://compressor.io/compress
Compressor支持JPG,PNG,GIF,SVG多种格式的照片。

第三:Kraken.io
工具地址:https://kraken.io/web-interface
Kraken可以把Zip中的文件一次性导入到工具中进行压缩,同时它支持不同的格式同时进行压缩。

第四:Giftofspeed
JPG压缩:https://www.giftofspeed.com/jpg-compressor/
Png压缩:https://www.giftofspeed.com/png-compressor/
在Giftofspeed,你可以输入你的网址,然后这个工具会建议你对图片进行优化,这样你就可以发现很多问题。

第五: OptimiZilla
地址:http://optimizilla.com/
这个工具可以批量上传和批量压缩图片,一次可以上传20张图片;
同时他的压缩程度大小可以有你自己来调节,而且是尽量的不改变画质。

总结优化方法

  1. 减少 DNS 查询,即,尽量减少域名。
  2. TCP 连接连接复用。
  3. 不要滥用 Cookie;减少 Cookie 体积。
  4. 在请求头中设置 Cache-Control,让浏览器使用本地的缓存文件。
  5. 合并CSS和JS文件,减少请求数。
  6. 文件多时,增加域名同时请求多个文件。
  7. 使用 ETag。
  8. 使用 Gzip压缩文件。
  9. DOCTYPE 标签不能写错,也不能不写。
  10. 不要写无用的标签,减少标签数。
  11. 把 CSS文件 放到 head 标签,这样可以尽早渲染页面。
  12. JS文件 放到 body 标签最后。
  13. 把 CSS文件 和 JS 文件放到 CDN。
  14. 使用延迟加载(懒加载)。
  15. 避免空 src 的图片,可以写成 <img src="about:blank"/>。
  16. 避免使用 @import 引入 CSS 文件。
  17. 尽量压缩图片。

最后

怎么看某个网站有没有优化好呢?
控制台 -> Audits -> Run audits 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,000评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,745评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,561评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,782评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,798评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,394评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,952评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,852评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,409评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,483评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,615评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,303评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,979评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,470评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,571评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,041评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,630评论 2 359

推荐阅读更多精彩内容