SlideShare a Scribd company logo
1 of 11
Download to read offline
React单页应用性能调优
seanlong@outlook.com
React 在移动端有性能问题?
https://aerotwist.com/blog/react-plus-performance-equals-what/
因为React做了不擅长的事
This case would simply construct the virtual DOM and then draw it on real DOM.
There are no DOM changes, which Virtual DOM could excel at.
https://discuss.reactjs.org/t/reactjs-perf-on-mobile/781/4
Virtual DOM只能帮助开发者免去手动优化DOM麻烦,开发者还需要特别的设计来规
避性能瓶颈:
● 比如使用shouldComponentUpdate避免不必要的渲染
● 比如使用immutable.js来提高数据变化跟踪效率
单页应用的Virtual DOM代价
● 从Virtual DOM到真实DOM的重头构建是费时的,尤其在移动端。
○ http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/
○ https://meta.discourse.org/t/the-state-of-javascript-on-android-in-2015-is-
poor/33889
● 对于单页应用来说,在路由切换时会导致Virtual DOM到DOM的重新构建,易形
成性能瓶颈,尤其当返回一个DOM已变得庞大的页面。
Root
Home
Root
Feed
/home /feed/:id
Root
Home
/home
click link backward
数据说话
目标路由页面节点数量的变化: 750 -> 1200 -> 2000 -> 4000 -> 6000。基于小米2S + Chrome46。
引用计数路由状态树
Root
Home
Root
Home Feed
/home /feed/:id
1
1
1
2
1
Root
Home Feed
/home
1
01
make page
invsible, detach
event handlers
make page visible,
attach event handlers,
maybe update props
稍复杂的情况
Root
Home
Root
Home
Top
/home /home/top
1
1
2
2
1
Root
Home
Top
/home
1
0
1
Root
Home
/feed/:id
3
2
Feed
1
Top
1
1
数据说话
目标路由页面节点数量的变化: 750 -> 1200 -> 2000 -> 4000 -> 6000。基于小米2S + Chrome46。
优化Layout,Paint
在现代浏览器中我们可以将路由页面整体提升到composting layer,然后通过修改只
影响composite的属性来减少layout, paint所需时间。
总结
● 在移动端单页应用的路由切换时易导致React的Virtual DOM计算瓶颈
● 在使用shouldComponentUpdate基本优化的基础上运用引用计数路由状态树和
合并层优化后能获得较大的性能提升。
● 其他可能的优化手段
○ 只在渲染可视区域的元素。
○ 在Web Worker里面做并行的Virtual DOM计算。
○ 在内核层面实现DOM tree的缓存,类似于bfcache。
Thanks!

More Related Content

Viewers also liked

前端跨域总结
前端跨域总结前端跨域总结
前端跨域总结zhangsuoyong
 
2014 Hpocon 周辉 大众点评 - 大众点评混合开发模式下的加速尝试
2014 Hpocon 周辉   大众点评 - 大众点评混合开发模式下的加速尝试2014 Hpocon 周辉   大众点评 - 大众点评混合开发模式下的加速尝试
2014 Hpocon 周辉 大众点评 - 大众点评混合开发模式下的加速尝试Michael Zhang
 
Make your web faster
Make your web fasterMake your web faster
Make your web faster德生 谭
 
陈子舜-Html5 based web app
陈子舜-Html5 based web app陈子舜-Html5 based web app
陈子舜-Html5 based web appWebrebuild
 
淘宝搜索前端优化
淘宝搜索前端优化淘宝搜索前端优化
淘宝搜索前端优化Frank Xu
 
Lean Message Architecture Highlights
Lean Message Architecture HighlightsLean Message Architecture Highlights
Lean Message Architecture Highlightssunng87
 
旺铺前端设计分享
旺铺前端设计分享旺铺前端设计分享
旺铺前端设计分享fangdeng
 
浏览器渲染与web前端开发
浏览器渲染与web前端开发浏览器渲染与web前端开发
浏览器渲染与web前端开发Duoyi Wu
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backboneJerry Xie
 
百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011Yiwei Ma
 
聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理rfyiamcool
 
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术团队
 
美团点评技术沙龙05 - 浅谈前端工程化
美团点评技术沙龙05 - 浅谈前端工程化美团点评技术沙龙05 - 浅谈前端工程化
美团点评技术沙龙05 - 浅谈前端工程化美团点评技术团队
 
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术团队
 
3 a forum 2016 陆金所前端进化论 微服务之路(public)
3 a forum 2016 陆金所前端进化论 微服务之路(public)3 a forum 2016 陆金所前端进化论 微服务之路(public)
3 a forum 2016 陆金所前端进化论 微服务之路(public)Ufo Qiao
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统Frank Xu
 
Building Universal Applications with Angular 2
Building Universal Applications with Angular 2Building Universal Applications with Angular 2
Building Universal Applications with Angular 2Minko Gechev
 

Viewers also liked (20)

前端跨域总结
前端跨域总结前端跨域总结
前端跨域总结
 
2014 Hpocon 周辉 大众点评 - 大众点评混合开发模式下的加速尝试
2014 Hpocon 周辉   大众点评 - 大众点评混合开发模式下的加速尝试2014 Hpocon 周辉   大众点评 - 大众点评混合开发模式下的加速尝试
2014 Hpocon 周辉 大众点评 - 大众点评混合开发模式下的加速尝试
 
Make your web faster
Make your web fasterMake your web faster
Make your web faster
 
陈子舜-Html5 based web app
陈子舜-Html5 based web app陈子舜-Html5 based web app
陈子舜-Html5 based web app
 
淘宝搜索前端优化
淘宝搜索前端优化淘宝搜索前端优化
淘宝搜索前端优化
 
Lean Message Architecture Highlights
Lean Message Architecture HighlightsLean Message Architecture Highlights
Lean Message Architecture Highlights
 
Web App Mvc
Web App MvcWeb App Mvc
Web App Mvc
 
nodejs开发web站点
nodejs开发web站点nodejs开发web站点
nodejs开发web站点
 
旺铺前端设计分享
旺铺前端设计分享旺铺前端设计分享
旺铺前端设计分享
 
浏览器渲染与web前端开发
浏览器渲染与web前端开发浏览器渲染与web前端开发
浏览器渲染与web前端开发
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backbone
 
百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011
 
Meteor
MeteorMeteor
Meteor
 
聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理
 
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
 
美团点评技术沙龙05 - 浅谈前端工程化
美团点评技术沙龙05 - 浅谈前端工程化美团点评技术沙龙05 - 浅谈前端工程化
美团点评技术沙龙05 - 浅谈前端工程化
 
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用
 
3 a forum 2016 陆金所前端进化论 微服务之路(public)
3 a forum 2016 陆金所前端进化论 微服务之路(public)3 a forum 2016 陆金所前端进化论 微服务之路(public)
3 a forum 2016 陆金所前端进化论 微服务之路(public)
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
 
Building Universal Applications with Angular 2
Building Universal Applications with Angular 2Building Universal Applications with Angular 2
Building Universal Applications with Angular 2
 

Similar to React单页应用性能调优实践

React js入門
React js入門React js入門
React js入門昶宇 賴
 
react native by letv
react native by letvreact native by letv
react native by letvfeeloc
 
Responsive Web Design [rebuild as design]
Responsive Web Design [rebuild as design]Responsive Web Design [rebuild as design]
Responsive Web Design [rebuild as design]Benny Chak
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)Will Huang
 
Huawei cloud computing
Huawei cloud computingHuawei cloud computing
Huawei cloud computingssuser220dc6
 
MobileWebAppFramework_V5_design
MobileWebAppFramework_V5_designMobileWebAppFramework_V5_design
MobileWebAppFramework_V5_designJackson Tian
 
React.js what do you really mean?
React.js what do you really mean?React.js what do you really mean?
React.js what do you really mean?昱安 周
 
Bruce-輕鬆上手Asp.net web api 2.1.2
Bruce-輕鬆上手Asp.net web api 2.1.2Bruce-輕鬆上手Asp.net web api 2.1.2
Bruce-輕鬆上手Asp.net web api 2.1.2Study4TW
 
輕鬆上手ASP.NET Web API 2.1.2
輕鬆上手ASP.NET Web API 2.1.2輕鬆上手ASP.NET Web API 2.1.2
輕鬆上手ASP.NET Web API 2.1.2Bruce Chen
 
Web view on the way
Web view on the wayWeb view on the way
Web view on the wayLiddle Fang
 
20141212 html5 及微軟跨平台佈局 long
20141212 html5 及微軟跨平台佈局   long20141212 html5 及微軟跨平台佈局   long
20141212 html5 及微軟跨平台佈局 longMeng-Ru (Raymond) Tsai
 
Tm快报201202 daqiu
Tm快报201202 daqiuTm快报201202 daqiu
Tm快报201202 daqiutbmallf2e
 
React基礎教學
React基礎教學React基礎教學
React基礎教學昇倫 蔡
 
阿里巴巴国际站架构分析和镜像解决方案
阿里巴巴国际站架构分析和镜像解决方案阿里巴巴国际站架构分析和镜像解决方案
阿里巴巴国际站架构分析和镜像解决方案airsex
 
1 docker风起云ppt v1
1 docker风起云ppt v11 docker风起云ppt v1
1 docker风起云ppt v1Jiang Shang
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型Tom Fan
 
Apache cordova 開發環境建置
Apache cordova 開發環境建置Apache cordova 開發環境建置
Apache cordova 開發環境建置My own sweet home!
 

Similar to React单页应用性能调优实践 (20)

React js入門
React js入門React js入門
React js入門
 
react native by letv
react native by letvreact native by letv
react native by letv
 
Responsive Web Design [rebuild as design]
Responsive Web Design [rebuild as design]Responsive Web Design [rebuild as design]
Responsive Web Design [rebuild as design]
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
 
漫谈web前端
漫谈web前端漫谈web前端
漫谈web前端
 
Huawei cloud computing
Huawei cloud computingHuawei cloud computing
Huawei cloud computing
 
MobileWebAppFramework_V5_design
MobileWebAppFramework_V5_designMobileWebAppFramework_V5_design
MobileWebAppFramework_V5_design
 
React.js what do you really mean?
React.js what do you really mean?React.js what do you really mean?
React.js what do you really mean?
 
Bruce-輕鬆上手Asp.net web api 2.1.2
Bruce-輕鬆上手Asp.net web api 2.1.2Bruce-輕鬆上手Asp.net web api 2.1.2
Bruce-輕鬆上手Asp.net web api 2.1.2
 
輕鬆上手ASP.NET Web API 2.1.2
輕鬆上手ASP.NET Web API 2.1.2輕鬆上手ASP.NET Web API 2.1.2
輕鬆上手ASP.NET Web API 2.1.2
 
行動技術開發概論
行動技術開發概論行動技術開發概論
行動技術開發概論
 
Web view on the way
Web view on the wayWeb view on the way
Web view on the way
 
20141212 html5 及微軟跨平台佈局 long
20141212 html5 及微軟跨平台佈局   long20141212 html5 及微軟跨平台佈局   long
20141212 html5 及微軟跨平台佈局 long
 
Tm快报201202 daqiu
Tm快报201202 daqiuTm快报201202 daqiu
Tm快报201202 daqiu
 
React基礎教學
React基礎教學React基礎教學
React基礎教學
 
RWD 響應式網頁
RWD 響應式網頁RWD 響應式網頁
RWD 響應式網頁
 
阿里巴巴国际站架构分析和镜像解决方案
阿里巴巴国际站架构分析和镜像解决方案阿里巴巴国际站架构分析和镜像解决方案
阿里巴巴国际站架构分析和镜像解决方案
 
1 docker风起云ppt v1
1 docker风起云ppt v11 docker风起云ppt v1
1 docker风起云ppt v1
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型
 
Apache cordova 開發環境建置
Apache cordova 開發環境建置Apache cordova 開發環境建置
Apache cordova 開發環境建置
 

React单页应用性能调优实践