摘要:原文链接原作者利用原生方法替换实现性能提升现在我们正在用实现一个具有邮件收发和即时聊天功能的客户端工具。为了防止用户感觉卡顿,所有的动作都需要在毫秒级完成。然而理想是丰满的,现实是残酷的。。。
原文链接
https://medium.com/missive-ap...
原作者
Philippe Lehoux
现在我们正在用React实现一个具有邮件收发和即时聊天功能的客户端工具。
如图所示,通过鼠标和键盘的上下箭头可以从左侧的导航栏切换不同的对话。为了防止用户感觉卡顿,所有的动作都需要在毫秒级完成。
一段对话可能包含成千上百条的评论、邮件和各种各样的事件,而所有的这些内容都由各种组件实现。为了提升在不同对话间切换时的渲染速度,我们开始着手将一些stateful组件变为stateless组件(此处原文叫做Function component)。
举个栗子,之前的一个组件是这样的:
class Avatar extends React.Component { render() { return ; } }
经过转换之后变为:
const Avatar = (props) => { return ; }
其实一个Functional component就是一个简单的js函数,这个函数返回要渲染的元素。Functional component也被称为stateless组件。
我们认为通过将stateful组件变为stateless组件后性能会有立竿见影的提升,因为当我们使用stateful组件时,在通过导航切换不同对话时React会不断的进行上百次的mount和unmount处理,而stateless本身只是基础的js函数,它的触发就像触发生命周期函数一样简单,避免了多次的mount和unmount处理,从而节省了渲染时间。
然而理想是丰满的,现实是残酷的。。。
那么我们要怎么才能跳过React的内部机制,不将stateless组件的内容通过react componet渲染,而是直接通过调用函数的方式渲染呢?
其实很简单,我们只需要改变一下调用方式即可:
ReactDOM.render(-, mountNode ); // Compiled JavaScript ReactDOM.render(React.createElement( "div", null, - React.createElement(Avatar, { url: avatarUrl }), + Avatar({ url: avatarUrl }), React.createElement( "div", null, commentBody ) ), mountNode);+ {Avatar({ url: avatarUrl })} {commentBody}
通过性能测试可以看出如果只是通过将stateful组件改为stateless组件,而不改变调用方式,渲染速度只提升了6%;而改变调用方式后,速度提升了45%。
就像上面的性能测试中展现出来的一样,这些修改很适用于提升像我们的应用一样通过普通的stateful组件方式渲染会触发过多的mount和unmount事件的应用场景。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/87343.html
摘要:前言距离我进新公司也有一个多月,这一个月的事件使用写了一个项目,期间断断续续重构了两三次,目前已经完成第一阶段测试,也总结分享一些使用的一些坑。因为他的不可变特点,我们不会在不经意见不小心改变了,而引起不必要的问题。 前言 距离我进新公司也有一个多月,这一个月的事件使用react写了一个项目,期间断断续续重构了两三次,目前已经完成第一阶段测试,也总结分享一些使用react的一些坑。 s...
摘要:前端每周清单第期微服务实践,与,组件技巧,攻防作者王下邀月熊编辑徐川前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点分为新闻热点开发教程工程实践深度阅读开源项目巅峰人生等栏目。 前端每周清单第 26 期:Node.js 微服务实践,Vue.js 与 GraphQL,Angular 组件技巧,HeadlessChrome 攻防 作者:王下邀月熊 编辑:徐川...
摘要:在年成为最大赢家,赢得了实现的风暴之战。和他的竞争者位列第二没有前端开发者可以忽视和它的生态系统。他的杀手级特性是探测功能,通过检查任何用户的功能,以直观的方式让开发人员检查所有端点。 2016 JavaScript 后起之秀 本文转载自:众成翻译译者:zxhycxq链接:http://www.zcfy.cc/article/2410原文:https://risingstars2016...
阅读 2964·2023-04-26 02:04
阅读 1277·2021-11-04 16:07
阅读 3698·2021-09-22 15:09
阅读 678·2019-08-30 15:54
阅读 1898·2019-08-29 14:11
阅读 2524·2019-08-26 12:19
阅读 2254·2019-08-26 12:00
阅读 751·2019-08-26 10:27