版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、手机 QQ React Web极致优化Try to be the best个人简介个人信息- 李成熙,AlloyTeam- 2014年底加入腾讯- 群活动、家校群、互动直播- Github: /lcxfs1991工作方向- 前端工程化、自动化- 性能优化- Hybrid, React Native主要内容为什么选React如何用React更好地实现功能如何基于React做好优化为什么选 React项目背景交接的项目一直使用着“三无框架”无测试用例、无充分论证、无人维护开发效率、维护效率 低React特性组件化单向数据流Virtual Dom及增量更新生态圈大JSXLearn Once, Wri
2、te Everywhere如何用React更好地实现功能React 全家桶构建工具 = gulp + webpack统一状态管理= redux + reselect开发效率提升 = redux-dev-tools + hot-reload路由控制器 = react-router构建工具 webpack优化基础篇 webpack使用优化(react篇) 公共css/img/jsreact/react-dom/其它第三方库页面逻辑index.html页码逻辑公共component/逻辑redux actiondump component注册state及调用action的方法smart compon
3、ent数据处理中心区分dev/prod入口初始化数据/redux中间件调用主入口html文件构建工具构建工具 - 目录结构 smart component (container), 处理statedump component 处理渲染同一组件的js, css和img放在一起如果无法使用服务器构建,开发时请让小伙伴统一开发路径webpack-md5-hash解决路径不同,hash不同的问题构建工具 - 生产上线区分开发与生产环境 生产环境的时候会自动去掉xxx != process.env.NODE_ENV包含的代码构建工具 - 生产上线若要兼容Android 4.0,babel编译使用es20
4、15-loose而不是es2015的presetUncaught TypeError: Cannot assign to read only property _esModule of #。构建工具 - 兼容性构建工具 - 兼容性统一状态管理 redux 状态/数据管理框架 最大优势集中管理记录历史便于扩展 自己处理state遇到的问题父子、兄弟组件状态/数据传递复杂结构数据更新问题 (不重新渲染/过多重复渲染)统一状态管理 redux 分散管理:观察者模式统一状态管理 redux 集中管理:redux统一状态管理 redux 记录历史flux store中同时保存状态和改变状态的逻辑统一状态
5、管理 redux 记录历史redux 将两者分开了统一状态管理 redux 便于扩展flux 打log需要在每个store中console.log,入侵了业务代码统一状态管理 redux 便于扩展redux引入了middleware机制,成功解耦统一状态管理 redux store.js统一状态管理 redux reducers.js统一状态管理 redux configureStore.js统一状态管理 redux connect.js统一状态管理 redux 组合在一起Root.jsIndexWrapper开发效率提升 react-hot-loader 让react开发 live relo
6、ad 搭配webpack.HotModuleReplacementPlugin使用开发效率提升 redux-devtools 移动端慎用,易造成卡顿 可以考虑Chrome插件redux-devtools-extension路由控制器 react-router Single Page Application PC 家校群有使用 移动端面临2个问题1. 分页面太多,保留每个分页的dom,数量庞大造成的性能问题2. 切换不保留dom,每次增删也很消耗性能如何基于 React 做好优化How to be niubiReact优化的三大方向 状态/数据管理优化 渲染性能优化 首屏性能优化 状态管理优化
7、数据扁平化状态管理优化 新旧数据都应该是独立的拷贝 浅拷贝: Object.assign, 深拷贝: immutable/lodash.merge状态管理优化 多个reducers处理同一个action/reactjs/redux/issues/601状态管理优化 一个reducer的数据依赖于另外一个 最简单粗暴的办法,在connect.js中处理状态管理优化 一个reducer的数据依赖于另外一个 Reselect 若数据不变,能帮助缓存渲染性能优化 React大部份性能问题都归因于重复渲染大部份人关注这里也会引发性能问题目的是要减少Data Diff渲染性能优化 直观看出重复渲染你可以在
8、每个component的render里,放一个console.log(xxx component)。然后触发一个action,若几乎全部的component都打出这个log,表明都重复渲染比较严重了渲染性能优化 家校群列表页性能问题 - 某些机型长列表滚动卡顿渲染性能优化核心: 拷贝数据 + 数据比较 数据拷贝:寻找数据拷贝类库数据比较: shouldComponentUpate生命默认返回true,这表示要求组件更新。若返回false,则不更新。渲染性能优化 方法一:immutable + immutable-pureRender 使用1. redux-immutable + immutab
9、le2. 原有redux需要改造,使用immutable api3. pureRender重写掉shouldComponentUpdate,进行data diff- 若是es5写法,可以用使mixin- 若是es6/es7写法,需要使用decorator,在js的babel loader里面,新增plugins: transform-decorators-legacy。其es6的写法是渲染性能优化 方法二:lodash.merge+ non-immutable-pureRender 原因:1. 寻求性能稍逊,但也能接受,同时减少包大小的方案2. immutable引入,给js bundle增加
10、50kb。lodash.merge引入只需要20kb。渲染性能优化 - Android表现优化前ImmutableLodash.merge22fps43fps42fps渲染性能优化 - iOS表现优化前ImmutableLodash.merge30多fps50多fps50多fps渲染性能优化 - 其它小Tips请慎用setState,因其容易导致重新渲染请将方法的bind一律置于constructor请只传递component需要的props,避免其它props变化导致重新渲染(慎用spread attributes)请尽量使用const element渲染性能优化 - 其它小Tips Rea
11、ct移动web极致优化首屏性能优化 React自身较大,在首屏渲染的时候,对比其它框架并无优势FrameworkMinimized SizeReact15.3146kbVue1.075kbRiot2.621kbAngular1.5156kb首屏性能优化 针对有cgi请求,需要吐大量数据的页面 同构直出 有几点值得说明1. 比改造以前的项目,做直出更容易2. 减少的是首屏显示时间,而非首屏可交互时间3. 页面吐出html字符串之后,还需要在客户端,加载react包,进行事件绑定4. 做bigPipe之类的优化较难5. 考虑好页面的PV与服务器的负载首屏性能优化 React同构直出性能优化57.5
12、%首屏性能优化 React同构直出性能优化首屏性能优化 React同构直出文章React同构直出优化总结腾讯新闻React同构直出优化实践首屏性能优化 首屏没cgi拉取,但包较大的 拆包 家校群布置页首屏性能优化 拆包 一般来说,都是利用webpack结合react-router进行拆包首屏性能优化 拆包 不用react-rotuer,如何拆包?首屏性能优化 拆包 不用react-rotuer,如何拆包?首屏性能优化 非基础功能,如运营活动 轻量化类react方案 Preact 压缩后只有10kb, gzip后3kb1. 开源社区有较多star(认可)2. 较好的性能和兼容性3. api跟React接近4. 足够的框架周边,配置redux,router等使用,还有同构直出的插件5. 团队成员有能力维护的Preact - React的轻量解决方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 青岛黄海学院《视觉导向设计》2023-2024学年第一学期期末试卷
- 青岛航空科技职业学院《智能软件系统开发技术应用》2023-2024学年第一学期期末试卷
- 青岛工程职业学院《生物科学师范生基础技能训练》2023-2024学年第一学期期末试卷
- 从传统技术到AI技术的跨越发展之路
- 企业国际化经营战略及实践案例
- 小狗折纸课程设计
- 微机原理课程设计 点阵式lcd
- 反应堆课程设计
- 《急救中心“120”医护人员手卫生现况调查及干预研究》
- 少儿模特明星班课程设计
- 小儿全麻患者术后护理
- 黑龙江省哈尔滨市2023-2024学年八年级上学期语文期末模拟考试试卷(含答案)
- 理论力学(浙江大学)知到智慧树章节答案
- 云南省普通高中2023-2024学年高一上学期1月期末学业水平考试技术试卷
- 2024年百科知识竞赛题库及答案(共三套)
- JGJ-T490-2021钢框架内填墙板结构技术标准
- 2024年移动解决方案经理认证考试题库大全-中(多选题)
- 愚公移山英文 -中国故事英文版课件
- 国开经济学(本)1-14章练习试题及答案
- 三相桥式有源逆变电路的仿真Word版
- 流量变送器设计毕业设计
评论
0/150
提交评论