Javascript VueJS,Vuetify,数据表-可扩展,性能问题
我的VueJS和Vuetify项目有问题。 我想创建一个具有可扩展行的表。这将是一个订单表,每个订单都有可能看到购买的产品。对于一个页面,它应该显示至少100行订单。 为此,我使用了Vuetify框架中的Javascript VueJS,Vuetify,数据表-可扩展,性能问题,javascript,performance,vue.js,vuejs2,vuetify.js,Javascript,Performance,Vue.js,Vuejs2,Vuetify.js,我的VueJS和Vuetify项目有问题。 我想创建一个具有可扩展行的表。这将是一个订单表,每个订单都有可能看到购买的产品。对于一个页面,它应该显示至少100行订单。 为此,我使用了Vuetify框架中的 有什么问题? 在准备了所有的东西之后,我意识到它是有效的,但是对于每一行的扩展,我必须等待几秒钟(太长了,它一定是一个快速的系统)。为了扩展所有可见的记录,需要等待20秒以上,整个页面延迟 我试过什么? 我从标准Vuetify开始,使用了一个show expand道具和一个展开项目槽-这是
有什么问题? 在准备了所有的东西之后,我意识到它是有效的,但是对于每一行的扩展,我必须等待几秒钟(太长了,它一定是一个快速的系统)。为了扩展所有可见的记录,需要等待20秒以上,整个页面延迟
我试过什么? 我从标准Vuetify
开始,使用了一个show expand
道具和一个展开项目
槽-这是我第一次尝试-最慢的。
第二,我尝试自己创作——但使用Vuetify:
展开/隐藏
有趣的是-我意识到v-if
比v-show
工作得更快,这是一个奇怪的事实,因为我认为将display:none
更改为nothing应该比将整个对象添加/删除到DOM问题更小
这个方法比第一个快一点,但仍然太慢
我在我的表格中找到了为每个v-btn
设置:ripple=“false”
的提示,我这样做了-有帮助,但只是一点点。
一切都在Chrome和Firefox上进行了测试,在三台装有Windows和Linux Fedora的设备以及两台android智能手机上进行了测试
我还能做什么 提前谢谢你 。也就是说,在我为了解更多关于您的问题而构建的示例应用程序中,我没有遇到任何真正的性能瓶颈。整个页面的表加载时间约为1.25s(从localhost),无论它是在开发模式下还是在生产构建中。JavaScript报告说,同时扩展或收缩所有100行平均只需要0.3秒。总之,我认为您可以实现所需的优化,而不必放弃Vuetify的便利性 建议
v-data-table
内的v-data-table
VDataTable
,有100个可扩展行。(数据是从中提取的)。我过去常常计算DOM节点。以下是一些参数/信息:
- 行数:100
- 列:5+扩展开关
- 扩展行内容:带有用户图片和地址的
VSimpleTable
- 从API返回的单个JSON记录的大小:~62行(大约是上面示例对象大小的一半)
- Vue v2.6.11
- Vuetify v2.3.0-beta.0
(我意识到这一点刚刚出现,但我认为使用v2.2.x不会有不同的结果) - 应用程序是使用
和vue create myapp
vue add vuetify
实际上,每当扩展/收缩行时,都会从DOM中添加/删除扩展行VDataTable
- 773(~7/行):未启用扩展的100行/5列中的DOM节点数
- 977(+2/行):启用扩展的节点数
- 24:通过展开单个行添加到表中的节点数
- 3378(+26/行):展开所有行的节点总数
- ~1.25s以在硬刷新时加载整个页面
- ~0.3以同时扩展或收缩所有节点
- 使用内置的排序工具对列进行排序既快捷又实用
App.vue
页面的代码。v-data-table
几乎是页面上唯一的组件(除了切换按钮),我没有导入任何外部组件
切换“全部展开”
{{name.first}{{name.last}}
名称
{{person.name.title}。{{person.name.first}{{person.name.last}}
地址
{{person.location.street.number}{{person.location.street.name}}
{{person.location.city},{{person.location.state}{{person.location.postcode}
出生日期
{(新日期(person.dob.Date)).toLocaleDateString()}(年龄{person.dob.age})
从“axios”导入axios
导出默认值{
名称:“应用程序”,
数据:()=>({
扩展:[],
标题:[
{text:'Name',value:'Name'},
{文本:“性别”,值:“性别”},
{文本:'Phone',值:'Phone'},
{text:'Cell',value:'Cell'},
{text:'Country',value:'nat'},
{文本:“”,值:'数据表