一.前言

我们在 HTTP/2 对 Web 性能的影响(上)已经和大家分享了一些关于 Http2 的二项制帧、多用复路以及 APM 工具等,本文作为姊妹篇,主要从 http2 对 Web 性能的影响、http2 使用的利弊以及一些正在进行中的相关工作等方面与大家进行分享。

二.Web 性能影响:与内联、级联及图像精灵说再见?

HTTP/2 多路复用对前端 Web 开发人员造成了深远的影响。长久以来,人们用尽方法,试图通过捆绑相关资产来削减连接的数量,而现在这一切都不需要了。人们曾经尝试过的方法包括:

  • JavaScript 与 CSS 文件级联:将多个小文件合成一个大文件,从而降低总体请求数量。
  • 图像精灵:将多个小图像合成一张大图像。
  • 域名分片:在多个域之间发送静态资产请求,从而增加浏览器所能允许的总体开放 TCP 连接数量。
  • 内联资产:将资产同 HTML 文档源绑定,包括 base-64 编码图片,以及直接写入 script 标签的 JavaScript 代码。

因为不需要再绑定资产,我们就有了更多机会将 Web 应用程序中的小片段加以缓存。举个例子可以帮我们更好的理解这一点:

一个级联且指纹验证型 CSS 文件被解绑为四个较小的指纹验证文件。

常见的级联模式是将一个应用程序内不同页面的样式表文件进行绑定,形成单一的 CSS 文件,以减少资产请求的数量。这个大文件随后会通过文件名内的 MD5 哈希值进行指纹校验,确保其能够被浏览器主动缓存。遗憾的是,这样的解决方案意味着,当站点的可视化布局中出现了任何一点小的改变,如标题字体的改变,都需要重新下载整个级联文件。

当对小型资产文件进行指纹校验时,相当一部分的 JavaScript 与 CSS 组件都不会频繁产生变动,因此可以被浏览器缓存 --也就是说,任何一个单一功能的小型重构,不会再导致大量的 JavaScript 应用程序代码或者 CSS 失效。

最后,级联机制的消失能够降低前端构建基础的复杂性。与以往通过一系列预置步骤来级联资产不同,现在它们作为小型文件,可以直接被放入 HTML 文档中。

三.实际使用 HTTP/2 的潜在弊端

仅仅针对支持 HTTP/2 客户端而做出的各类优化,意味着那些不支持 HTTP/2 的浏览器可能因此陷入不利境地。那些“有年头”的浏览器们仍然倾向于绑定资产,以此降低连接数量。截至 2016 年 2 月,caniuse.com 网站报道称,全球浏览器中能够支持 HTTP/2 的占比 71%。与之前浏览器们决定放弃支持 IE 8.0 时一样,支持 HTTP/2 或采取某种混合作业的方式——这样的决定只能根据各个网站自身的相关数据来做出。

但是我们相信大规模支持肯定是不可避免的,就像一开始只有 Chrome 浏览器支持 window.performance 接口,方便一些 Web 工具进行数据的采集,像上面说过的 Browser Insight ,我曾经和他们的技术支持聊过,就是靠这种方式来实时的采集用户对网站的访问信息等。之后,大势所趋,各个浏览器厂商都纷纷开放了相关接口

正如可汗学院的博文所述,他们曾分析其网站上的 HTTP/2 流量,事实上,拆分大量资产会增加所传输字节的总量。而使用zlib压缩单一大型文件,比压缩多个小型文件要更有效率。对于拥有成百上千解绑资产的 HTTP/2 站点来说,这种效应更为显著。

在浏览器中使用 HTTP/2 还要求我们通过 TLS 进行资产传递。对于菜鸟们来说,设置 TLS 证书就是个烦人的活儿。幸运的是,诸如 Let’s Encrypt 的开源项目正努力让证书注册工作变得更加便捷。

四.仍在进行中的工作

大部分用户并不在意你的站点用了啥协议——他们只想要它速度快,运行如人预期。虽然 HTTP/2 已经获得正式批准快一年了,开发人员还在学习如何利用它来建立更快速网站的最优实践。换用 HTTP/2 的好处更多取决于具体站点的架构情况以及使用现代浏览器的用户比率。再有就是,调试新协议很有挑战性,更易用的开发工具还在研制中。

虽然有这些挑战,HTTP/2 的采纳度仍在增加。根据研究人员扫描流行网站属性的结果,排名前列的站点中使用 HTTP/2 的一直在增加,特别是 CloudFlareWordPress 在 2015 年宣布提供支持之后。在考虑转换到新协议时,很重要的一点是利用 Browser insightNewRelic 之类的 APM 工具,仔细测量资源和页面在不同环境下的加载时间。

如下图所示,可以看到每一次慢加载的详细情况,非常方便。

供应商和专业网站人员都熟悉这一转换背后的含义,从真实用户数据中做出判断才是关键的。在网站臃肿危机的当下,无论何种协议,都应该以削减资源数量为目标。

在此 HTTP/2 系列的第二部分中,我们会聚焦于如何在服务器上实现 HTTP/2 和调试真实网络通信的具体实现细节。

本文作者为 Clay Smith,由 OneAPM 产品运营进行翻译编辑

原文地址:https://dzone.com/articles/how-http2-is-changing-web-performance-best-practic

Browser Insight 是一个基于真实用户的 Web 前端性能监控平台,能够帮大家定位网站性能瓶颈,网站加速效果可视化;支持浏览器、微信、App 浏览 HTML 和 HTML5 页面。想阅读更多技术文章,请访问 OneAPM 官方技术博客
本文转自 OneAPM 官方博客

HTTP/2 对 Web 性能的影响(下)的更多相关文章

  1. HTTP/2 对 Web 性能的影响(上)

    一.前言 HTTP/2 于 2015 年 5 月正式推出.自诞生以来,它就一直在影响着网络性能最佳实践.在本篇文章中,我们将讨论 HTTP/2 的二进制帧.延迟削减.潜在利弊以及相应的应对措施. 超文 ...

  2. Linux web性能优化

    1,

  3. .Net Discovery系列之十二-深入理解平台机制与性能影响(下)

    上一篇文章中Aicken为大家介绍了.Net平台的垃圾回收机制.即时编译机制与其对性能的影响,这一篇中将继续为大家介绍.Net平台的异常捕获机制与字符串驻留机制. 三.关于异常捕获机制 虽然我们已经很 ...

  4. Web性能优化:What? Why? How?

    为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...

  5. Web性能API——帮你分析Web前端性能

    前端性能统计必备api,有不知道的吗? 正文从这开始- 开发一个现代化的互联网网站是一项复杂的任务,需要各种职能的密切合作以应对用户日新月异的需求.其中,网页的性能直接决定了用户的体验,而随着新型客户 ...

  6. 高性能JavaScript-JS脚本加载与执行对性能的影响

    在web产品优化准则中,很重要的一条是针对js脚本的加载和执行方式的优化.本篇文章简单描述一下其中的优化准则. 1. 脚本加载优化 1.1 脚本位置对性能的影响 优化页面加载性能的原则之一是将scri ...

  7. JAVA 异常对于性能的影响

    陶炳哲 - MAY 12, 2015 在对OneAPM的客户做技术支持时,我们常常会看到很多客户根本没意识到的异常.在消除了这些异常之后,代码运行速度与以前相比大幅提升.这让我们产生一种猜测,就是在代 ...

  8. [转] 《高性能HTML5》读后整理的Web性能优化内容

    读后感 先说说<高性能HTML5>这本书的读后感吧,个人觉得这本书前两章跟书的标题完全搭不上关系,或者说只能算是讲解了“高性能”这三个字,HTML5完全不见踪影.个人觉得作者应该首先把HT ...

  9. 高性能WEB开发(6) - web性能測试工具推荐

    WEB性能測试工具主要分为三种.一种是測试页面资源载入速度的,一种是測试页面载入完成后页面呈现.JS操作速度的,另一种是整体上对页面进行评价分析,以下分别对这些工具进行介绍,假设谁有更好的工具也请一起 ...

随机推荐

  1. 让apache与mysql随着系统自动启动

    让apache与mysql随着系统自动启动 在Linux中有一个文件/etc/rc.d/rc.local文件,其系统在启动时会自动加载该文件,我们可以把要启动的服务放入这个文件中即可. 添加以下代码:

  2. java虚拟机理解探索1

    以下内容源于个人对<深入java虚拟机>的理解总结 基本概念: java虚拟机可以指一种抽象规范,也可以指一种具体实现,亦可以指一个java虚拟机实例. 虚拟机生命周期: 一个java虚拟 ...

  3. Codevs 1380 没有上司的舞会

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就 ...

  4. windows通过thrift访问hdfs

    thirift是一个支持跨种语言的远程调用框架,通过thrift远程调用框架,结合hadoop1.x中的thriftfs,编写了一个针对hadoop2.x的thriftfs,供外部程序调用. 1.准备 ...

  5. jQuery的toggle()的自动触发真烦人

    jQuery的toggle()方法应该是在鼠标点击后才会触发,现在的问题是在ready加载后就自动触发了,怎么回事呢? 答案是jQuery的版本问题,在1.9以后的版本toggle()就存在这个问题, ...

  6. mysql怎么从1开始递增

    前提:使用SQLyog数据库管理工具 1.打开更改表: 2.点击表字段下方“高级属性”: 3.找到“自动递增”这一项,值改为1: 4.点击“确定”关闭高级属性表弹出框: 5.点击“Alter”关闭更改 ...

  7. linux 终端显示 -bash-4.1

    解决方法: cp /etc/skel/.bashrc /root/ cp /etc/skel/.bash_profile  /root/ 重新登陆就OK了

  8. CSS content内容生成技术以及应用

    content属性早在CSS2.1的时候就被引入了,可以使用:before以及:after伪元素生成内容.此特性目前已被大部分的浏览器支持:(Firefox 1.5+, Safari 3.5+, IE ...

  9. malloc函数

    C语言中,使用malloc函数向内存中动态申请空间. 函数的原型是extern void *malloc(unsigned int num_bytes); 可见,函数返回的是指针类型,参数是要申请的空 ...

  10. IE6和IE7的line-height和现代浏览器不一致的问题

    1.我们发现在网页中设置line-height后,现代浏览器显示正常,可是在IE6 IE7下却不能正确解析,这时需要再额外的为旧版浏览器声明: p{ line-height: 30px; *line- ...