We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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性能真的比H5好嘛 ?
rn的多线程模型有什么缺点?
flatlist快速滚动为什么会有空白元素?
白屏的本质是什么?
无论H5还是rn都有虚拟列表, 但是H5的快速滚动体验要远好于react native这个是为什么?
测试机iphone 8plus 15.1系统
300条数据 快速滚动效果
5000条数据 快速效果滚动 safari
H5滚动效果比RN好很多 难道H5虚拟列表没生效 是全量渲染的? H5 dom截图 从上图可以看到 H5的确是虚拟列表而非全量创建dom。
在 react native比H5快在哪里? 这篇文章中
我们就在线程模型,渲染方式,刷新机制, 加载方式等多个角度给大家介绍了 为什么react native性能更好。
线程模型
渲染方式
刷新机制
加载方式
其中对于线程模型中H5和rn有过对比:
web最大的性能瓶颈在于 主线程 做的事情太多了 虽然有合成线程和栅格化线程可以分担部分工作量 但是执行js和渲染流程绝大部分依然需要主线程来完成。
web最大的性能瓶颈
执行js和渲染流程
因为rn的多线程模式 JavaScript的执行和UI的渲染是在不同的线程里完成的,这打破了Web的性能极限,使应用运行更为流畅。
但在大数据量场景下,当FlatList快速滚动时,会出现问题。因为滚动触发时,UI更新是在native线程中进行的,native滑动时,需要同步知道下一屏更新的数据是什么,这就需要等待js线程计算完成, 子线程排版完成, 并通过bridge异步的将数据传递给native线程 进行多线程通信。
这其中需要涉及到事件的批处理与消息合并,序列化与反序列化,如果项目的大小布局发生变化,还会经过yoga线程将flex布局转换为native系统可以识别的原生布局信息进行UI排版。
然后native收到这些信息并完成这些步骤后 才会进行UI渲染,这些操作需要在一帧内完成,然后渲染到屏幕上。
当滚动的速度越快 数据量越多 多线程的通信成本也就越高,
频繁的多线程通信,尤其是需要在一帧时间内完成,无疑会增加系统的开销,耗费更多的时间和资源。当native无法及时的完成UI渲染 也就出现了大家看到的白屏现象。
白屏现象
在看H5中因为js和dom的渲染流程都是在主线程完成的
在快速滚动的场景下 并不需要太多的js计算,也没有多线程频繁通信的性能开销,仅仅是dom复用和css样式的变化。因此在大数据的虚拟列表场景下,其性能表现优于RN的FlatList。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
先有再有答案:
react native性能真的比H5好嘛 ?
rn的多线程模型有什么缺点?
flatlist快速滚动为什么会有空白元素?
白屏的本质是什么?
无论H5还是rn都有虚拟列表, 但是H5的快速滚动体验要远好于react native这个是为什么?
背景
测试机iphone 8plus 15.1系统
react native flatlist
300条数据 快速滚动效果
H5 vue-virtual-scroll-list
5000条数据 快速效果滚动 safari
H5滚动效果比RN好很多 难道H5虚拟列表没生效 是全量渲染的?
H5 dom截图
从上图可以看到 H5的确是虚拟列表而非全量创建dom。
一图胜千文
分析
多线程模型
在 react native比H5快在哪里? 这篇文章中
我们就在
线程模型
,渲染方式
,刷新机制
,加载方式
等多个角度给大家介绍了 为什么react native性能更好。其中对于线程模型中H5和rn有过对比:
web最大的性能瓶颈
在于 主线程 做的事情太多了 虽然有合成线程和栅格化线程可以分担部分工作量 但是执行js和渲染流程
绝大部分依然需要主线程来完成。因为rn的多线程模式 JavaScript的执行和UI的渲染是在不同的线程里完成的,这打破了Web的性能极限,使应用运行更为流畅。
多线程的缺点
但在大数据量场景下,当FlatList快速滚动时,会出现问题。因为滚动触发时,UI更新是在native线程中进行的,native滑动时,需要同步知道下一屏更新的数据是什么,这就需要等待js线程计算完成, 子线程排版完成, 并通过bridge异步的将数据传递给native线程 进行多线程通信。
这其中需要涉及到事件的批处理与消息合并,序列化与反序列化,如果项目的大小布局发生变化,还会经过yoga线程将flex布局转换为native系统可以识别的原生布局信息进行UI排版。
然后native收到这些信息并完成这些步骤后 才会进行UI渲染,这些操作需要在一帧内完成,然后渲染到屏幕上。
白屏的本质
当滚动的速度越快 数据量越多 多线程的通信成本也就越高,
频繁的多线程通信,尤其是需要在一帧时间内完成,无疑会增加系统的开销,耗费更多的时间和资源。当native无法及时的完成UI渲染 也就出现了大家看到的
白屏现象
。H5的优势
在看H5中因为js和dom的渲染流程都是在主线程完成的
在快速滚动的场景下 并不需要太多的js计算,也没有多线程频繁通信的性能开销,仅仅是dom复用和css样式的变化。因此在大数据的虚拟列表场景下,其性能表现优于RN的FlatList。
The text was updated successfully, but these errors were encountered: