如何解决如何在 Ionic React 中渲染大量项目时减少渲染时间
我正在使用 IonicReact 构建一个移动应用程序。我只想从本地 JSON 文件(JSON 文件包含 1000 多个项目的数组)中呈现项目列表。我映射数组项并通过将它们包装在 Model: "res-idec"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_11 (InputLayer) [(None,16,256,1)] 0
__________________________________________________________________________________________________
conv2d_58 (Conv2D) (None,64) 640 input_11[0][0]
__________________________________________________________________________________________________
conv2d_59 (Conv2D) (None,64) 36928 conv2d_58[0][0]
__________________________________________________________________________________________________
add_48 (Add) (None,64) 0 conv2d_59[0][0]
input_11[0][0]
__________________________________________________________________________________________________
max_pooling2d_24 (MaxPooling2D) (None,128,64) 0 add_48[0][0]
__________________________________________________________________________________________________
conv2d_60 (Conv2D) (None,64) 36928 max_pooling2d_24[0][0]
__________________________________________________________________________________________________
conv2d_61 (Conv2D) (None,64) 36928 conv2d_60[0][0]
__________________________________________________________________________________________________
add_49 (Add) (None,64) 0 conv2d_61[0][0]
max_pooling2d_24[0][0]
__________________________________________________________________________________________________
max_pooling2d_25 (MaxPooling2D) (None,8,64,64) 0 add_49[0][0]
__________________________________________________________________________________________________
conv2d_62 (Conv2D) (None,64) 36928 max_pooling2d_25[0][0]
__________________________________________________________________________________________________
conv2d_63 (Conv2D) (None,64) 36928 conv2d_62[0][0]
__________________________________________________________________________________________________
add_50 (Add) (None,64) 0 conv2d_63[0][0]
max_pooling2d_25[0][0]
__________________________________________________________________________________________________
conv2d_64 (Conv2D) (None,8) 4616 add_50[0][0]
__________________________________________________________________________________________________
max_pooling2d_26 (MaxPooling2D) (None,4,32,8) 0 conv2d_64[0][0]
__________________________________________________________________________________________________
flatten_8 (Flatten) (None,1024) 0 max_pooling2d_26[0][0]
__________________________________________________________________________________________________
dense_24 (Dense) (None,256) 262400 flatten_8[0][0]
__________________________________________________________________________________________________
encoded (Dense) (None,64) 16448 dense_24[0][0]
__________________________________________________________________________________________________
dense_25 (Dense) (None,256) 16640 encoded[0][0]
__________________________________________________________________________________________________
dense_26 (Dense) (None,1024) 263168 dense_25[0][0]
__________________________________________________________________________________________________
reshape_8 (Reshape) (None,8) 0 dense_26[0][0]
__________________________________________________________________________________________________
up_sampling2d_24 (UpSampling2D) (None,8) 0 reshape_8[0][0]
__________________________________________________________________________________________________
conv2d_transpose_56 (Conv2DTran (None,64) 4672 up_sampling2d_24[0][0]
__________________________________________________________________________________________________
conv2d_transpose_57 (Conv2DTran (None,64) 36928 conv2d_transpose_56[0][0]
__________________________________________________________________________________________________
conv2d_transpose_58 (Conv2DTran (None,64) 36928 conv2d_transpose_57[0][0]
__________________________________________________________________________________________________
add_51 (Add) (None,64) 0 conv2d_transpose_58[0][0]
conv2d_transpose_56[0][0]
__________________________________________________________________________________________________
up_sampling2d_25 (UpSampling2D) (None,64) 0 add_51[0][0]
__________________________________________________________________________________________________
conv2d_transpose_59 (Conv2DTran (None,64) 36928 up_sampling2d_25[0][0]
__________________________________________________________________________________________________
conv2d_transpose_60 (Conv2DTran (None,64) 36928 conv2d_transpose_59[0][0]
__________________________________________________________________________________________________
add_52 (Add) (None,64) 0 conv2d_transpose_60[0][0]
up_sampling2d_25[0][0]
__________________________________________________________________________________________________
up_sampling2d_26 (UpSampling2D) (None,64) 0 add_52[0][0]
__________________________________________________________________________________________________
conv2d_transpose_61 (Conv2DTran (None,64) 36928 up_sampling2d_26[0][0]
__________________________________________________________________________________________________
conv2d_transpose_62 (Conv2DTran (None,64) 36928 conv2d_transpose_61[0][0]
__________________________________________________________________________________________________
add_53 (Add) (None,64) 0 conv2d_transpose_62[0][0]
up_sampling2d_26[0][0]
__________________________________________________________________________________________________
clustering_layer (ClusteringLay (None,32) 2048 encoded[0][0]
__________________________________________________________________________________________________
decoded (Conv2DTranspose) (None,1) 577 add_53[0][0]
==================================================================================================
Total params: 977,417
Trainable params: 977,417
Non-trainable params: 0
中来打印它们。遍历所有项并在浏览器中显示它们需要几秒钟。请帮助我,如何优化渲染时间,从 JSON 快速加载数据。
代码如下:
<IonItem>
解决方法
基本上应该是两种方法:1.虚拟滚动。 2. 通过将大数组切割成小块来无限滚动。
但是,在您的情况下,虚拟滚动方法应该好得多。
离子虚拟滚动不支持反应。但是我找到了一篇文章并重新实现了VirtualScrollChild
组件:
https://medium.com/@alvinnguyen116/virtual-and-infinite-scrolling-in-react-d56a05976cd2
import React from "react"
import { useInView } from "react-intersection-observer"
interface Props {
height?: number
}
export const VirtualScrollChild: React.FC<Props> = (props) => {
const [ref,inView] = useInView()
const style = {
height: `${props.height ? props.height : 40}px`,overflow: "hidden",}
return (
<div style={style} ref={ref}>
{inView ? props.children : null}
</div>
)
}
用法:
<IonList>
{your_data_list.map((data) => (
<VirtualScrollChild height={your_height}>
{data...}
</VirtualScrollChild>
))}
</IonList>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。