2021腾讯数字生态大会直播预约通道开启!技术内容大爆发,开发者必看! 了解详情
写点什么

新技能 Get:如何利用 HTTP 技术提升网页的加载速度

2017 年 6 月 11 日

在这个信息爆炸的时代,使用移动终端获取新鲜信息已经是大势所趋,但是移动网页浏览速度还有巨大的提升空间。据 Strangeloop Networks 统计,在同样的网络条件下,使用移动端访问相同网页平均会比 PC 端慢 40%!然而另一方面,用户对网速的要求却步步紧逼。研究表明,网页响应时间可容忍的阀值是 2 秒,一旦超过 3 秒,会有 40% 的用户放弃浏览页面。

所谓天下武功,唯快不破!想要设计更快的网页优化速度,我们可以借鉴成功的优化经验,全球最大的 CDN 服务商 Akamai(阿卡迈)针对移动体验的问题,提供了一套较为完整的解决方案,感兴趣的读者可以前往注册下载;与此同时,我们也可以采用直接的技术手段,本文从PC 端优化经验、HTTP/2 优化协议、优化蜂窝网络、以及智能的加载方案设计四个维度,总结了一些提升移动网页加载速度的方法和技巧。

一、PC 端网站优化方案

不论在 PC 还是在移动浏览器上,只有不到10% 的时间是用来读取页面的 HTML 的。剩下的90% 是用来加载额外的如样式表、脚本文件、或者图片这样的资源和执行客户端的程序。因此,许多在 PC 端的传统网页优化方案在移动端仍然可行。比如说:

1.1 减少每个页面的 HTTP 请求数

I. 将共用的 JavaScript 和 CSS 代码放在公共的文件夹中与多个页面共享。
II. 确保在一个页面中相同的脚本不会被加载多次。同时,将脚本中的 Click 事件改为 On Touch 事件来减少固有的 300ms 延迟。
III. 使用 CSS Sprites 来整合图像,将多张图片整合到一个线性的网状的大图片中。
IV. 使用 Cache-Control 或者 Expires 标记来实现浏览器缓存,从而减少不必要的服务器请求,尽可能地从本地缓存中获取资源。

1.2 减少每个请求加载的大小

I. 使用 gzip 这样的压缩技术来压缩图像和文本,依靠增加服务端压缩和浏览器解压的步骤,来减少资源的负载。
II. 整合并压缩 CSS 与 JavaScript,删除不必要的字符与变量。
III. 动态地调整图片大小或者将图片替换为移动设备专用的更小的版本。
IV. 分段加载和隐藏加载等手段,可以将不可见区域的内容延迟加载或暂时不需要的脚本进行延时读取

二、采用更优的 HTTP/2 协议

2.1 多路复用技术带来的请求 - 响应加速

I. HTTP/2 采用多路复用的技术,允许同时通过单一的 HTTP/2 连接发起多重的请求响应消息,从而大大的加快了网页加载时间。

2.2 更节省空间的二进制头部数据嵌套

I. HTTP/2 采用二进制格式传输数据,并把他们分割为更小的帧,相比于 HTTP/1.x 的文本格式传输更为方便。

II. HTTP1.x 的 header 由于 cookie 和 user agent 很容易膨胀,而且每次都要重复发送。HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络流量。

2.3 Server Push 带来的更快的资源推送

I. 通过 Server Push 功能,服务端可以主动把 JS 和 CSS 等文件发送给终端,而省去了解析 HTML 请求的过程。简单的说,当你需要访问某个文件的时候,它已经在乖乖的在后台躺好了。

三、优化蜂窝网络

I. 具有实力的内容服务商可以把资源配置在离用户地理位置更近的地方,缩短最后一公里。
II. 与移动网络服务商合作共同开发算法,实现实时自动调整互联网路由,避免网络拥堵、丢包与离线问题。
III. 还可以采用优化 TCP 协议的方法,通过借助主流的 Cubic、Bic 以及 Westwood 算法,可以有效的避免网络拥堵。
IV. 此外,还可以研究算法改善 NAT 嵌套导致的网络延时,也可以直接通过 IPV6 的连接协议规避 NAT 的延迟问题。

四、设计更加智能的加载方案

4.1 采用分段加载和隐藏加载

I. 分段加载又称懒加载,它能够在用户滚动页面的时候自动获取更多的数据,从而可以很大程度上减少服务器端的资源耗用。诸如 Lazyload.js 或 Belazy.js 都是非常成熟易用的开发包。
II. 隐藏加载是在页面显示后再加载用户暂时看不到的信息,诸如图片展示窗里除了第一张图片,其他图片都可以采用隐藏加载的技术。

4.2 采用预加载技术

I. 资源预加载目的是让浏览器在空闲时间下载或预读取一些文档资源,用户在将来将会访问这些资源时浏览器能快速的从缓存里提取给用户。

II. 预加载技术不仅支持 PC,也已经支持 Android 系统,可惜的是目前尚不支持 iOS Safari。
III. 事实上,Prefetch 是网页优化里 Prebrowsing 的一部分,开发者还可以通过 DNS-Prefetch , Subresource,Preconnect,Prerender 等技术来实现预先解析 DNS 与提前渲染等优化。

4.3 通过机器学习的手段智能加载

I. 通过机器学习的方法,网站可以自动收集并分析用户的浏览习惯与访问信息,然后通过预加载的手段将最有可能访问的信息提前加载完成。

4.4 智能调整图片分辨率

I. 图片通常占用了 Web 页面加载的大部分网络资源,也占据了页面缓存的主要空间。 根据统计,一个站点平均 62% 的内容都是由图片组成。管理这些图片除了需要考虑到图片的大小、格式、旋转、艺术处理、增加水印、存储空间等,还要顾及海量的设备的屏幕尺寸,以及适应终端上运行的浏览器。

以上是我们给开发者总结的一些经验分享,希望能够对读者有所帮助,大家也可以注册下载阿卡迈的技术 PPT 详细了解如何通过 CDN 的方式为(移动)网页提速。我们需要明确的是,专注移动网页的性能优化无疑是开发者需要努力的方向,然而用户并不等于机器。用户不关心你的网站发出了多少请求,也不在乎你的屏幕渲染得有多快,他们只关心网站带给他们体验上的感觉。因此,开发者在进行技术优化时,不仅仅是在某一技术点上的优化,更需要从网站的整体性能规划把控,让整个网站给客户呈现出更快的加载体验!

2017 年 6 月 11 日 19:004042

评论

发布
暂无评论
发现更多内容

走向实战项目!这份Spring全家桶面试进阶笔记你不得不学!

Geek_33f0ef

Java 编程 程序员 面试 架构师

APP动态换肤方案详解

Geen练

ios App theme 换肤

嗨!你有一封来自百度世界大会的“情书”,818等你开启

百度大脑

人工智能

极客星球 | Android SDK架构设计之路

MobTech袤博科技

sdk 架构· andiod

DCS_FunTester分布式压测框架更新(二)

FunTester

分布式 性能测试 测试框架 测试开发 FunTester

【Takin应用日记】记一次TransmittableThreadLocal引起的业务异常

数列科技

高可用 性能压测 生产环境全链路压测 takin

员工流动大难管理?织信低代码+人事管理系统轻松掌控员工档案信息

优秀

低代码

聊聊我在腾讯和字节工作感受

程序员鱼皮

Java 互联网 求职 IT 实习

视频面试,你礼貌吗?

白粥

面试 求职 应聘

Aosp 之 Property

Qunar技术沙龙

android API properties 字典树 内存映射

先到先得!Alibaba最新出版的JDK源码剖析手册(究极奥义版)开源

Java 编程 jdk 面试 程序人生

熬夜28天肝完这25W字的九大Java核心专题,连续拿下多个大厂offer

Java~~~

Java 架构 面试 JVM 架构师

一个完整的内网渗透是什么样子的

网络安全学海

网络安全 信息安全 网络 渗透测试 漏洞分析

小心这个陷阱:为什么总是你赔钱?

非著名程序员

认知提升 个人提升 投资理财 8月日更

fil挖矿官网有哪些?fil挖矿平台有哪些?

fil挖矿平台有哪些 fil挖矿官网有哪些

Hadoop生态系统Hive:SQL执行(一)

正向成长

hadoop hive

清华大牛带领20位大厂专家耗时三年整理出这份2000页Java进阶指南

Java~~~

Java MySQL 架构 面试 微服务

写作 7 堂课——【7. 复盘式写作】

LeifChen

复盘 写作技巧 8月日更

3天带你走向实战!阿里顶配版Spring全家桶面试进阶笔记有多强?

Java领路人

Java 编程 程序员 面试 架构师

博睿数据分布式手机真机监测+两大核心技术,轻松掌控短信服务质量与用户体验

博睿数据

2021年7月券商App行情刷新及交易体验评测报告

博睿数据

架构训练营 - 模块四 - 作业

姑射仙人

架构训练营

交易所行业迎来变局?AAX宣布币币交易手续费全免

股市老人币圈新

深耕城市治理场景,百度智能云联合慧联无限推内涝智能检测预警

百度大脑

人工智能 洪水

极客星球 | 应用开发的性能优化探索

MobTech袤博科技

性能

趁着课余时间学点Python(十一)面向对象的理解(高潮)

ベ布小禅

8月日更

我看 JAVA 之 并发编程【四】线程安全与JMM

awen

Java JMM 线程安全

秀到起飞!LeetCode官方推出算法面试指导手册(代码版)限时开源

Java~~~

Java 架构 面试 算法 架构师

网络攻防学习笔记 Day103

穿过生命散发芬芳

态势感知 网络攻防 8月日更

Java变量使用小技巧~

Bob

Java 变量 8月日更

用区块链技术实现电力供给“三流合一”

CECBC区块链专委会

英特尔On技术创新峰会

英特尔On技术创新峰会

新技能Get:如何利用HTTP技术提升网页的加载速度-InfoQ