20
大数据下的前端性能优化实践 —— 庞锦贵

大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

大数据下的前端性能优化实践

—— 庞锦贵

Page 2: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

概要

前端性能数据该如何采集 1

性能优化的项目、目标及成果 2

我们采用了哪些优化策略 3

优化过程中的经典案例分享 4

优化总结 5

1

Page 3: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

前端页面性能指标如何采集?

2

Browser Back-End Front-end

DomContentLoadEnd

DomComplete LoadEvent

Start LoadEvent

End

前端的白屏时间、首屏时间等性能指标如何获取?

Page 4: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

常规的页面性能统计模型

3

Naviga5onStart

DomContentLoadEnd

HEAD CSSLoad MainContent JSLoad/Run

Naviga5onStart

DomContentLoadEnd

HEAD CSSLoad FirstScreenJSLoad/Run

MainContent JS

Load/Run

0 1 2 3

0 1 2 3

白屏?

首屏?

白屏?

首屏?

前端打点的性能统计模型存在的问题: •  不同的业务模式或用户场景,前端性能指标的统计是不一样的

•  无论后端渲染还是前端渲染,基于前端JS的首屏时间统计都是很难精确的

后端渲染

前端渲染

Page 5: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

我们的页面性能统计模型

4

UserClick Webviewinit WT DT CT RT T0 T1 BCT T2 T3

Wait Time Response Time 首次绘制出内容 绘制出满屏内容 加载完所有资源

T0 T1

T2

T3

T-1

Page 6: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

Tn等性能指标概念及其意义

5

T2 T0 T-1 T1 T3

内核收到外壳需要发起 URL请求的时间点

从T-1开始到收到响应头的耗时, 用于衡量服务端的响应耗时

从T-1开始到首次绘制出内容的耗时, 用于衡量页面的白屏时长

从T-1开始到首次绘制出满屏内容的耗时, 用于衡量页面的首屏时长

从T-1开始到加载完所有静态资源的耗时, 用于衡量页面的整体加载耗时

Tn性能指标的意义 •  解决在不同的业务模式或场景下,页面性能指标的一致性问题;

•  解决白屏、首屏等关键性用户体验指标的不精确、不准确或无法统计的问题;

•  统一各端的性能统计模式,避免页面性能数据重复建设的问题。

Page 7: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

我们需要优化的项目及其用户场景

6

下拉 刷新

点击 阅读

点击 返回

主要的用户场景

信息流

信 息 流

转码页35% 自有域名

由前端渲染

自媒体30% 自有域名

由前端渲染

定制页25% 合作方域名

由后端渲染 其他 10%

用户访问的特点: 1.  同一用户打开一篇文章的次数一般只有1次 2.  不同的文章之间的差别只是内容不同,但前端资源是相同的; 3.  页面主要是图文为主的内容展示,在首屏幕内的需要交互场景很少

Page 8: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

项目优化的目标及成果

7

目标: T2(首屏渲染)时间在基准数据的基础上提升30%。

42.06%

47.35% 50.25%

54.50%

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%

转码页

自媒体

优化比例

11.1.0T2 全版本T2

基准T2 全版本T2 11.1.0T2 转码页 1.781 1.032 0.886

自媒体 2 1.053 0.91

0.5 0.7 0.9 1.1 1.3 1.5 1.7 1.9 2.1

T2平

均耗

时(

秒)

Page 9: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

我们采取了哪些关键的优化策略?

8

进入列表

1

页面预热

加载/刷新列表

2 预取:缓存操作 3 预加载:主文档

点击进入正文

T-1: URL请求

4 预加载:首屏图片 5 预加载:AJAX数据

6 请求头优化 7 主文档优化:缓存、大小

T1: 解析主文档

T2: 首屏渲染完成

8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载 11 图片优化:控制宽度、质量和格式,降图片size

12 非首屏模块:异步按需加载、延时渲染、缓存

Page 10: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

大数据的性能优化策略解读(1):内联CSS/JS不一定能加快首屏渲染

9

第1张图片非懒加载

将统计JS、rest.css、require.config配置inline到主文档

主CSS不再使用base64,将CSS体积由22K降低到4K,图片改用雪碧图减少请求

将统计JS、rest.css、底层类库改为外链的文件引用

上线被回滚 重新上线

Page 11: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

大数据的性能优化策略解读(1):内联CSS/JS不一定能加快首屏渲染

10

页端基于 Performance.timing API的性能打点统计: •  平均响应时间上浮约 100ms;平均白屏时间上浮约 120ms;平均首屏时间下降约 100ms。 •  往后拉通看,首屏时间基本没有变化,但响应时间的增长和白屏时间均有上升了。

Page 12: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

大数据的性能优化策略解读(1):内联CSS/JS不一定能加快首屏渲染

11

为什么使用内联CSS/JS不能加快首屏渲染?

用户进入场景对比

http链接数 主文档size 综合

第一次进入

内联css/js 1 大 内链有优势

外链css/js 3 小

第2次以上进入

内联css/js 1 大 外链有优势

外链css/js 1 小

我们的业务特点:

1.  同一用户打开一篇文章的次数一般只有1次;

2.  从信息流到正文的人均阅读文

章篇约为7次;

结论:当人均阅读次数 > 2,外链CSS/JS在T2首屏上更有优势。

Page 13: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

大数据的性能优化策略解读(2):页面预热让用户始终是第2次访问

12

•  页面预热:用户打开APP进入信息流的时候,用一个隐藏的webview加载一次正文页面。

正常的页面网址: http://m.uczzd.cn/webview/news?app=uc-iflow&aid=17502639495837468714&cid=100 预热的页面网址: http://m.uczzd.cn/webview/news

好处 缺点

•  提前缓存静态资源加,快正文的打开速度

•  内核可以把页面需要的静态资源提前读入内存

•  可平衡前端每次发版的缓存更新压力

•  需要多消耗用户的流量

•  增加服务器的访问压力

•  对于前端架构和逻辑控制有一定要求

策略应用的注意事项:需控制预热的频率,强网下才启用。

Page 14: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

大数据的性能优化策略解读(2):页面预热效果验证过程

13

2016.8.10 2016.8.11 2016.8.12 2016.8.13 2016.8.14 2016.8.15 2016.8.16 2016.8.17 2016.8.18 2016.8.19 2016.8.20 2016.8.21 广东 24 25 25 26 26 26 25 14 15 13 14 15

河南 15 15 13 15 17 9 3 3 3 3 3 3

0 10 20 30 40 50

排名

开启预热的省份性能排名变化情况

•  广东地区开启预热,整体T2变好了143ms,此时全网变好了约50ms,开启预热大约优化了93ms。

Page 15: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

大数据的性能优化策略解读(3):正文首图的预加载和非懒加载

14

•  预加载:在发起页面URL请求之前,先加载文章将要用到的图片。

•  非懒加载:img标签插入到文档中立即发起图片请求,而不是用占位图片替代。

T2有图 70%

T2无图 30%

1.  首屏内含有图片的比例占大多数; 2.  在优化前,有图和无图的T2平均耗时差距约1秒。

Page 16: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

大数据的性能优化策略解读(3):预加载和非懒加载效果验证过程

15

•  页端优化:第1张图片不懒加载,到6/19全网优化约150ms

•  外壳/内核/APP:第1张图片预加载,到7/20全网优化约350ms

Page 17: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

我们的优化策略解读

16

预备

•  页面预热 •  文档预加载 •  图片预加载

•  AJAX预请求

缓存

•  JS、CSS、IMG等强缓存 •  主文档缓存 •  模块LS缓存

•  ……

按需

•  渲染拆分首屏和非首屏 •  根据手机屏幕及网络情

况按需加载图片

延迟

•  非首屏的资源异步加载 •  非首屏的模块延时渲染

Page 18: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

性能优化总结:多端协作、全局思考

17

•  任何的优化成果都应当以数据作为参考,并且优化策略应当准尊“度量 → 评估 → 上线”的流程。

•  前端开发者需要跳出WebView的范畴来审视页面优化,要学会从页面浏览所涉及的全路径上(后端、网络环境、前端、外壳、内核以及中间件等)进行全局性思考。

Page 19: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

18

Q & A

Page 20: 大数据下的前端性能优化实践...T2: 首屏渲染完成 8 静态资源优化:请求数、大小、缓存等 9 首屏渲染逻辑独立处理并提前 10 正文第1张图片不使用懒加载,其他图片懒加载

THINKS!