Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance VUEJ显示大量数据_Performance_Vue.js_Html Table - Fatal编程技术网

Performance VUEJ显示大量数据

Performance VUEJ显示大量数据,performance,vue.js,html-table,Performance,Vue.js,Html Table,现在,我们在选择JavaScript框架(VueJS)时面临着一些问题。在我们自己的内部项目中,我们面临着输出更大的JSON对象的问题。(大约15000行json) 我们的计划是将这些数据放在一个表中,但是VueJS似乎有点难以快速显示如此多的信息 我们试图用普通文本字段替换输入字段,看看这是否提高了性能,我们尝试了分页,但也没有解决我们的问题 现在我们有大约20秒的加载时间,浏览器处于满载状态 所以现在亲爱的堆栈溢出,我们转向你!你有什么办法来提高加载时间吗 下面是我们如何制作桌子的一个片段

现在,我们在选择JavaScript框架(VueJS)时面临着一些问题。在我们自己的内部项目中,我们面临着输出更大的JSON对象的问题。(大约15000行json)

我们的计划是将这些数据放在一个表中,但是VueJS似乎有点难以快速显示如此多的信息

我们试图用普通文本字段替换输入字段,看看这是否提高了性能,我们尝试了分页,但也没有解决我们的问题

现在我们有大约20秒的加载时间,浏览器处于满载状态

所以现在亲爱的堆栈溢出,我们转向你!你有什么办法来提高加载时间吗

下面是我们如何制作桌子的一个片段

<b-table striped hover :items="filtered" :fields="columns">
          <template slot="top-row">
            <td v-for="(obj, index) in filter" v-bind:key="index">
              <template v-if="isDatetime(obj[0])">
                <vue-timepicker v-model="filters[index]"></vue-timepicker>
              </template>
              <template v-else>
                <multiselect
                  class="selects"
                  :select-label="''"
                  v-model="filters[index]"
                  :options="obj"
                  :multiple="true"
                ></multiselect>
              </template>
            </td>
          </template>
          <template v-for="field in editableFields" v-slot:[tableCell(field.key)]="{ item, index }">
            <b-form-input
              v-model="item[field.key]"
              v-bind:key="field.key"
              v-bind:class="{changed : regValues[index][field.key] !== item[field.key]}"
            />
          </template>
        </b-table>

看起来数据量很大,在这种情况下,我只推荐一些可以提高性能和用户友好体验的技巧。 我建议你使用加载器。 其思想是首先加载页面和组件,然后获取JSON数据

例如: 在父组件中设置数据状态

data() {
  return {
   isLoading: true,
   data: null
  }
}
axios.get('/get-big-json-data')
.then(response => {
  this.data = response.data
  this.isLoading = true
})
将加载程序图标添加到模板:

<img v-if="isLoading" src="/loader.gif">
添加负责呈现数据的子组件

<child-component v-if="data" v-show="!isLoading" :data="data" @loaded="() => isLoading = true"/>

如果这样做只是需要很长的时间,你可能想考虑CoDeVIEW,谢谢。
mounted() {
  this.$nextTick(() => {
    this.$emit('loaded');
  })
}