reactjs 滚动多个图像时页面滞后

von4xj4u  于 2023-11-18  发布在  React
关注(0)|答案(1)|浏览(120)

我正在创建一个用于上传照片的表单。如果有多行图像从屏幕上消失,页面就会开始使CPU过载,并且在滚动时会滞后。
每个图像通过<input type="file/>加载到应用程序内存中,并通过URL.createObjectUrl()转换为图像。

  1. const newImages = Array.from(event.target.files as FileList).map((file) => URL.createObjectURL(file));
  2. setImages([...images, ...newImages]);
  3. ...
  4. images.map((image, index) => (
  5. <div className="form__photo-container">
  6. <img src={image} className="form__photo" />
  7. </div>
  8. ))

字符串
然后我尝试了100张图片,它们没有将文件转换为URL,而是使用了一个指向服务器上现有图片的链接。在这种情况下,没有任何滞后,即使几乎所有的图片都从屏幕上消失了。

  1. images.map((image, index) => (
  2. <div className="form__photo-container">
  3. <img src={"/img/test.jpg"} className="form__photo" />
  4. </div>
  5. ))


我的猜测是,滞后是由于虚拟渲染。浏览器引擎,滚动时,开始转换尚未转换的文件到一个URL一遍又一遍,而用户滚动页面,这导致CPU过载。
所以,据我所知,我需要:

1)将每个图像加载到服务器并创建指向该图像的链接,而不是将其加载到JavaScript内存中;

2)在此表单上禁用镜像虚拟化。

我还需要做什么或者如何实现上述两个选项?

2ekbmq32

2ekbmq321#

如果你想坚持使用内存中的方法来禁用窗体的虚拟化,那么尝试使用窗口或分页之类的技术。所以基本上你一次只渲染图像的一个子集,当用户滚动时,你加载/渲染下一批图像
你可以用途:'react-window'或'react-virtualized'的一些顶级库。:)

相关问题