如果文章的每行都用一个 vue 组件来表示,是否会产生性能问题?

2024-05-31 23:11:10 +08:00
 WarlockMan
假如有这样一个场景:
一个用来显示文章的组件,
如果每一行,都用一个 vue 子组件来表示一个行,
这是否会产生性能问题?
比如,如果文章有上百行呢?

官方文档指出,每一个 vue 组件,比简单的 dom 结构更宝贵。
这种情况,用原生 js 构建临时 dom ,然后通过 fragment 一次性挂载,
跟上面的每一行都是一个 vue 子组件相比,性能差距会有多大呢?
2616 次点击
所在节点    Vue.js
11 条回复
Jtyczc
2024-06-01 04:08:48 +08:00
这个要自己实际场景测啊,你得看你请求这个页面花了多少时间。

而且只要数据更新不频繁,那么性能问题不严重,如果你是老是整个 DOM 树全部加载,那估计卡。

你能这么问你们公司估计没测试指标的,那么领导能感觉不到卡就可以了。
summerwar
2024-06-01 07:45:26 +08:00
如果每一行用一个 vue 组件,你的文章如何编辑和保存呢?这好像比性能问题更重要吧
Track13
2024-06-01 08:58:18 +08:00
不 re-render 问题不大。为什么会有这种需求?
kylebing
2024-06-01 08:58:51 +08:00
几百个是同一个组件渲染出来的吧?还是说几百个都是完全不一样的组件?不一样的话不知道如何。
但如果是一样的,我试过,几百个没什么问题,很流畅

790002517zzy
2024-06-01 23:06:43 +08:00
?什么奇怪需求
你是想了解富文本?
WarlockMan
2024-06-02 00:07:31 +08:00
@790002517zzy
是的,实际上是一种富文本组件,之所以每一行都要用一个子组件,
是因为,每行,都不是纯粹的文本行,而是结构化的行数据,算是一种杂合体,
这样一行就是一个小型 dom 结构,所以用 vue 子组件来表达一行,
根据行内容的不同,有不同的结构。

如果有很多行的话,每一行都是这样的一个子组件,不知道是否会有性能问题
Zwying
2024-06-02 14:39:16 +08:00
以前有个业务是渲染田字格,每个格子都是一个小组件,性能上来说没有太大的问题
sunwayTaihulight
2024-06-02 16:49:20 +08:00
从源码上看,处理组件和处理 DOM 之间的差别在于两点:
1. 组件会多一个组件实例,会增加内存消耗
2. 组件会多一层初始化/组件更新的逻辑,走完组件逻辑后再经过 patch 走进 DOM 逻辑里

但是似乎没有看到有非常"昂贵”的操作,感觉在能接受的范围内。如果有人测试过性能数据或是我漏看了某些逻辑,希望能踢我一下,感谢
goxxoo
2024-06-03 09:26:59 +08:00
多俩字都有损耗,别说组件了
realJamespond
2024-06-03 10:18:10 +08:00
可用虚拟滚动实现,可视范围内怎么折腾都不至于性能太差
royalknight
2024-06-03 11:43:03 +08:00
列表组件太多的话,如果要改到数据,那 diff 计算量太大了,需要非常谨慎的编写逻辑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1045842

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX