学习Web性能优化,能让我网站加载速度提升多少?
- 内容介绍
- 相关推荐
摆烂。 第一次把自己折腾半年的站点丢给同事打开时 对方盯着转圈的 loading 图沉默了三秒,然后轻巧声问一句要不要换个网,我当时心里那个地方的滋味,比代码报错还要不容简单受。那天晚上我把笔记本摊在床上, 反复刷崭新自己的首页,看着水晶球一样的进度条一点点爬,心里只有一个念头:这也能忍吗。
后来才明白,用户不会等你阐述设计理念,他们只会感受等待。两秒以内还觉得顺滑, 两到五秒就启动皱眉,五到八秒就会质疑人生,较高于八秒总体来说就是直接关掉,甚至连第二次机会都不给。所以学 Web 性能优化并不是为了炫技,而是为了让离开的人更少一点,让留下的人舒服一点。
从心慌到心里有数, 提升到底能有更多更少个
说实话一启动我也很迷茫,到底能迅速更多更少个。有人说压缩一下就能提百分之五十,有人说只是几毫秒的差别。真实正动手测了之后才发觉,这玩意儿彻底看起点。 我满足了。 如果你的站点图片全是原图, 脚本堆在头部,DNS 又乱跳,那一次系统性的梳理下来第一屏出来迅速一倍很常见,二三百毫秒到一两秒的差距是常态。
我的项目就是个典型例子,原来首屏平均要四点更多秒,最主要是申请太更多加上等待时间段占较大头。先把主机名从七八个压到三个左右, 降较低 DNS 解析轮询,再把反复的图片合并成雪碧图,把 JS 放底部并加上 defer,让浏览器能够边下载边渲染,光这一轮就掉到了两点七秒左右。那种看着曲线往下掉的感觉,比拿到奖金还爽,探探路。。
DMS 解析那点微较小却致命的时间段浪费
DNS 和连接建立真实的很磨人
DNS 一次解析二十到一百二十毫秒听起来不更多,但累加起来就很可怕。我记住以前习惯给各个功能都开崭新域名,想着并行下载更迅速,最终还是结果是反而让浏览器在解析上浪费时间段。后来学乖了保持二到四个主机名之间平衡,既利用并行,又不让解析成为瓶颈。再配合本地缓存和运营商缓存,很更多反复访问直接省掉了握手时间段,何苦呢?。
Tcp 三次握手的过程就像两个人反复确认身份,每一步都要等回音。在移动网络下这种延迟被放较大十倍。你会发觉较大一部分时间段其实花在建立连接和等待服务器处理,而不是真实正下载数据。所以降较低沉重定向、 用 CDN 让资源条件离用户更近,降较低 DNS 查询次数,这一些基础动作做扎实了后面再谈压缩才有意义。
Hmm 最近被追问最更多的不是速度,是流量,为哪些百度不收录?当前这个问题和性能其实牵扯很较深但又不一样。通常是这是因为抓取受阻, 比如 robots 设置不当拦截了路径,或者服务器响应缓慢引起抓取超时或者页面主体内容靠 JavaScript 才出来而搜索引擎来不及渲染。再就是反复模板页太更多、权沉重分散,最后再来看被判定为较低质量。先排查可访问性, 确保返回平稳的状态码,给出清晰的结构化信息,同时也保持服务器平稳响应速度迅速,被抓到的概率天然上去,收录也就缓慢缓慢恢复了。
Css 在顶部 Js 在底部 这件事真实的救了我
Ie 时代的老经验放到当前依然良好用,只是理由变了。样式表放顶部是为了避免白屏闪烁,让页面逐步呈现;脚本放底部则是为了避免解析阻塞。这是因为 script 标签里能够写 document.write,一旦落实浏览器就得停下来等最终还是结果是。我当前基本习惯默认脚本都往底下挪, 需要交互迅速的再考虑异步加载,用 async 或 defer 让下载达成和解析错开,既保证首屏,又不牺牲功能可用性。
抄近道。 Css 表达式这种老坑我也踩过 为了兼容陈旧浏览器写了一些动态计算属性,最终还是结果是移动端卡成幻灯片。一刀切掉之后流畅度立刻回来了。有时候我们以为聪慧,其实是给自己埋雷。
Gzip 和缓存策略带来的情绪反转
一句话概括... g zip 当前这个东西听起来老土,却是最划算的一招。对文本类的资源条件压缩七成 Caching 策略更是细活。Expires 是老办法, 要求客户端和服务器时间段一致;Cache-Control 用 max-age 更灵活,能够精准控制更崭新窗口。再配合 ETag 做实体校验,避免无效传输。有时候条件 GET 能节省带较宽,但如果每次都要问一次服务器有没有更崭新,反而提升了往返次数。要的是恰到良好处,而不是越更多越良好。 Png 到处飞 我终于学会克制 图片永远是第一杀手。我以前为了一张装饰性的背景图让整个首屏拖缓慢, 后来学会用 css sprites 把较小图标合并,降较低申请的同时也也减较低文件本身开销,这是因为一张较大图的颜色表比更多张较小图更省空间范围。 是不是? 因为需求改变维护确实麻烦,但配合自动化工具已经良好很更多。对于超较小的图标,当前更倾向 IconFont,它能够像字体一样缩放改色,还不会失真实而且体积更轻巧。这份成就感, 是任意教程都教不会的,只有亲手把数字从四秒拉到两秒以内,才会真实正懂它值更多更少个钱,也值更多更少个心安。这一些年前端改变很迅速,以前十四条法则接近成了圣经,当前已经不够用了。崭新协议比如 Http/ 三 的更多路复用特性, 让同一连接并发变得更天然能明显改善较高延迟周边环境下的加载表现。但技术手段再崭新, 换个角度。 也抵不过一个原则:更少即是更多。每降较低一次申请,每更少一毫秒等待,用户感受到的就是更顺滑的存在感。而这种存在感累积起来就是留存率,就是转化率,就是较深夜调试时对自己说的那句还良好坚持下来了。降较低下载量还有一个关键动作,就是合并与精简资源条件。较小文件拆分利于开发,但上线时每一份都会产生一次申请。用构建工具把模块打包在一起,去掉注释空白,做混淆处理,能显著缩较短总耗时。这种感觉就像整理房间,把零散的东西装进箱子里一眼就能看到整体整洁更多了。当然过度合并也会引起缓存失效,所以要权衡炎热更崭新频率与首次加载投入成本,找到适合自己的节奏。当然要注意版权问题,别随便拿别人的字体库就上线,这事闹起来很尴尬。内联图片也有它的场景,通过 data Url 把极较小的图标直接塞进样式表,避免一次申请。但 IE 老版本不支持, 我天... 而且 base64 本身是有损且体积会膨胀,所以只用于几 KB 以内的元素。较大图内联绝对不行,会让 Html 瞬间臃肿,得不偿失。
摆烂。 第一次把自己折腾半年的站点丢给同事打开时 对方盯着转圈的 loading 图沉默了三秒,然后轻巧声问一句要不要换个网,我当时心里那个地方的滋味,比代码报错还要不容简单受。那天晚上我把笔记本摊在床上, 反复刷崭新自己的首页,看着水晶球一样的进度条一点点爬,心里只有一个念头:这也能忍吗。
后来才明白,用户不会等你阐述设计理念,他们只会感受等待。两秒以内还觉得顺滑, 两到五秒就启动皱眉,五到八秒就会质疑人生,较高于八秒总体来说就是直接关掉,甚至连第二次机会都不给。所以学 Web 性能优化并不是为了炫技,而是为了让离开的人更少一点,让留下的人舒服一点。
从心慌到心里有数, 提升到底能有更多更少个
说实话一启动我也很迷茫,到底能迅速更多更少个。有人说压缩一下就能提百分之五十,有人说只是几毫秒的差别。真实正动手测了之后才发觉,这玩意儿彻底看起点。 我满足了。 如果你的站点图片全是原图, 脚本堆在头部,DNS 又乱跳,那一次系统性的梳理下来第一屏出来迅速一倍很常见,二三百毫秒到一两秒的差距是常态。
我的项目就是个典型例子,原来首屏平均要四点更多秒,最主要是申请太更多加上等待时间段占较大头。先把主机名从七八个压到三个左右, 降较低 DNS 解析轮询,再把反复的图片合并成雪碧图,把 JS 放底部并加上 defer,让浏览器能够边下载边渲染,光这一轮就掉到了两点七秒左右。那种看着曲线往下掉的感觉,比拿到奖金还爽,探探路。。
DMS 解析那点微较小却致命的时间段浪费
DNS 和连接建立真实的很磨人
DNS 一次解析二十到一百二十毫秒听起来不更多,但累加起来就很可怕。我记住以前习惯给各个功能都开崭新域名,想着并行下载更迅速,最终还是结果是反而让浏览器在解析上浪费时间段。后来学乖了保持二到四个主机名之间平衡,既利用并行,又不让解析成为瓶颈。再配合本地缓存和运营商缓存,很更多反复访问直接省掉了握手时间段,何苦呢?。
Tcp 三次握手的过程就像两个人反复确认身份,每一步都要等回音。在移动网络下这种延迟被放较大十倍。你会发觉较大一部分时间段其实花在建立连接和等待服务器处理,而不是真实正下载数据。所以降较低沉重定向、 用 CDN 让资源条件离用户更近,降较低 DNS 查询次数,这一些基础动作做扎实了后面再谈压缩才有意义。
Hmm 最近被追问最更多的不是速度,是流量,为哪些百度不收录?当前这个问题和性能其实牵扯很较深但又不一样。通常是这是因为抓取受阻, 比如 robots 设置不当拦截了路径,或者服务器响应缓慢引起抓取超时或者页面主体内容靠 JavaScript 才出来而搜索引擎来不及渲染。再就是反复模板页太更多、权沉重分散,最后再来看被判定为较低质量。先排查可访问性, 确保返回平稳的状态码,给出清晰的结构化信息,同时也保持服务器平稳响应速度迅速,被抓到的概率天然上去,收录也就缓慢缓慢恢复了。
Css 在顶部 Js 在底部 这件事真实的救了我
Ie 时代的老经验放到当前依然良好用,只是理由变了。样式表放顶部是为了避免白屏闪烁,让页面逐步呈现;脚本放底部则是为了避免解析阻塞。这是因为 script 标签里能够写 document.write,一旦落实浏览器就得停下来等最终还是结果是。我当前基本习惯默认脚本都往底下挪, 需要交互迅速的再考虑异步加载,用 async 或 defer 让下载达成和解析错开,既保证首屏,又不牺牲功能可用性。
抄近道。 Css 表达式这种老坑我也踩过 为了兼容陈旧浏览器写了一些动态计算属性,最终还是结果是移动端卡成幻灯片。一刀切掉之后流畅度立刻回来了。有时候我们以为聪慧,其实是给自己埋雷。
Gzip 和缓存策略带来的情绪反转
一句话概括... g zip 当前这个东西听起来老土,却是最划算的一招。对文本类的资源条件压缩七成 Caching 策略更是细活。Expires 是老办法, 要求客户端和服务器时间段一致;Cache-Control 用 max-age 更灵活,能够精准控制更崭新窗口。再配合 ETag 做实体校验,避免无效传输。有时候条件 GET 能节省带较宽,但如果每次都要问一次服务器有没有更崭新,反而提升了往返次数。要的是恰到良好处,而不是越更多越良好。 Png 到处飞 我终于学会克制 图片永远是第一杀手。我以前为了一张装饰性的背景图让整个首屏拖缓慢, 后来学会用 css sprites 把较小图标合并,降较低申请的同时也也减较低文件本身开销,这是因为一张较大图的颜色表比更多张较小图更省空间范围。 是不是? 因为需求改变维护确实麻烦,但配合自动化工具已经良好很更多。对于超较小的图标,当前更倾向 IconFont,它能够像字体一样缩放改色,还不会失真实而且体积更轻巧。这份成就感, 是任意教程都教不会的,只有亲手把数字从四秒拉到两秒以内,才会真实正懂它值更多更少个钱,也值更多更少个心安。这一些年前端改变很迅速,以前十四条法则接近成了圣经,当前已经不够用了。崭新协议比如 Http/ 三 的更多路复用特性, 让同一连接并发变得更天然能明显改善较高延迟周边环境下的加载表现。但技术手段再崭新, 换个角度。 也抵不过一个原则:更少即是更多。每降较低一次申请,每更少一毫秒等待,用户感受到的就是更顺滑的存在感。而这种存在感累积起来就是留存率,就是转化率,就是较深夜调试时对自己说的那句还良好坚持下来了。降较低下载量还有一个关键动作,就是合并与精简资源条件。较小文件拆分利于开发,但上线时每一份都会产生一次申请。用构建工具把模块打包在一起,去掉注释空白,做混淆处理,能显著缩较短总耗时。这种感觉就像整理房间,把零散的东西装进箱子里一眼就能看到整体整洁更多了。当然过度合并也会引起缓存失效,所以要权衡炎热更崭新频率与首次加载投入成本,找到适合自己的节奏。当然要注意版权问题,别随便拿别人的字体库就上线,这事闹起来很尴尬。内联图片也有它的场景,通过 data Url 把极较小的图标直接塞进样式表,避免一次申请。但 IE 老版本不支持, 我天... 而且 base64 本身是有损且体积会膨胀,所以只用于几 KB 以内的元素。较大图内联绝对不行,会让 Html 瞬间臃肿,得不偿失。

