【发布时间】:2017-10-08 05:05:58
【问题描述】:
我正在尝试使用 VueJS 制作一个小型应用程序,但遇到了一些性能问题。
我不确定这是否是我可以做的事情,但无论如何我都在问。
我的目标是渲染很多组件(同时超过 10,000 个)。但是 Vue 渲染这些组件和更新 dom 所花费的时间相当长。
这里我做了一个小的 JsFiddle,你可以试试看:https://jsfiddle.net/rt5cjbby/
在家里,使用 badass i7 处理器,渲染需要 400 毫秒。也就是说,当您使用更多组件进行测试时会更多。
我的问题是:我可以使用什么技术来获得更好的性能?
是否可以每渲染 100 个组件更新一次 DOM?客户端可以很快看到前 100 个组件,然后浏览器会继续渲染......
如果你不想打开 jsFiddle,这里是我的示例代码:
some_table = []
for (let i = 0; i < 2000; i++) {
some_table.push({
foo: 'bar'
})
}
let someComponent = Vue.extend({
template: '#some-component',
props: ['input']
})
new Vue({
el: '#app',
data: {
lines: some_table
},
components: {
someComponent
}
})
还有我的模板:
<div id="app">
<div v-for="line in lines">
<some-component :input="line"></some-component>
</div>
</div>
<template id="some-component">
<div>
{{ input.foo }}
</div>
</template>
当然,我可以每 0.01 秒填满我的表,但我不认为这是最好的解决方案。
PS:我接受诸如“[Angular|React] 更适合您的用例因为 ....”之类的回答。
非常感谢您的帮助/经验/建议,祝您有愉快的一天
【问题讨论】:
-
我很好奇是否真的有必要一次渲染 10k 个组件?我无法想象一个用例。
-
我正在用 Github Electron 和 VueJS 构建一个 MySQL 浏览器,并且表格的每个单元格都必须是一个组件。我本来想复制一次显示 1000 行的 Sequel Pro 行为。所以它会使 1000 行 * 表的列数。当然,当我接近 100-200 行时,性能会更好,但我希望用 1000 行来完成这项工作:)
-
@RoyJ 谢谢你的链接,非常有趣的方法。但是,我认为这不适合我的情况,因为创建需要花费大量时间的组件,而不是组件本身的内容
-
这个想法是,如果新组件进入的空间是可见的,那么您将创建组件。所以会创建一个screenful,然后停止创建。在滚动时,您可以根据需要检查并创建更多内容。
标签: vue.js