-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
React Native Web化的一些性能问题 #79
Comments
滚动长列表优化前滚动消息列表时,FlatList在每次update任务中,所有已渲染的CellRenderer都会被重新update。 优化后避免使用闭包,因为它每次都会生成一个新的函数,改为通过public class fields syntax来声明函数。 可以看到,优化后,已渲染过的CellRenderer的颜色条变小了很多,整体的update时间从200多毫秒减少到60多毫秒! |
发送消息优化前发送消息时也存在同样的问题,FlatList在update时,所有已渲染的CellRenderer也被重新渲染了。
优化后去掉index,依赖index的逻辑改为通过message id去查找计算出来。 可以看到,优化后,只有最新的一条消息会被重新update,因为它依赖了NextMessage和PrevMessage,而其他的消息就不会被update,整体update时间从200多毫秒减少到50多毫秒! |
加载历史消息优化前消息列表滚到底部后,竟然还有一个将近600毫秒的update任务。 检查了一下redux log才发现,原来是加载历史消息的逻辑有点问题。
优化后这是offset算法设计上的失误,改成按最后一条消息的message id来拉取。 可以看到,现在确实只update了ListHeader,更新任务的时间从600毫秒减到6毫秒! |
以上性能问题,其实是React常见的bad case,总结一下:
|
本文是基于一个聊天系统项目,主要针对消息列表进行分析。
技术栈:
由于是公司项目,这里就不贴源码了。
The text was updated successfully, but these errors were encountered: