#javascript #html #vue.js
#javascript #HTML #vue.js
Вопрос:
Я только изучаю vue и вижу, что приложение, над которым я работаю, извлекает данные из базы данных, затем помещает их в список, подобный этому, перед привязкой и отображением на странице:
if (response.data.length > 1) {
this.list.push(...response.data)
$state.loaded()
if (response.data == 0) {
$state.complete()
}
} else {
$state.complete()
}
где приведенная ниже коллекция списков находится в разделе скриптов страницы .vue.
export default {
computed: {
list: {
get() {
return this.$store.state.records.list
},
set(value) {
this.$store.commit('records/listUpdate', value)
}
}
}
}
Проблема, когда я извлекаю все данные ~ 81K результатов и пытаюсь их отправить, я получаю ошибку в консоли, которая гласит:
Неперехваченная (в обещании) ошибка диапазона: превышен максимальный размер стека вызовов в Array.mutator (vue.js: 883) в ….record-search.vue:909
Каждый объект не такой уж большой, и я могу поместить ‘response.data’ в новый массив Javascript [] без каких-либо ошибок.
Вопрос — могу ли я увеличить размер ‘$ state.store.records’, где хранятся данные, чтобы я не получал эту ошибку и мог отображать все результаты 81K на странице? Я не возражаю, если рендеринг займет несколько секунд, у меня есть счетчик.
Ответ №1:
Попробуйте установить this.list
значение за один раз, а не .push
все 81 тыс. элементов в нем:
this.list = [].concat(this.list, response.data);
Комментарии:
1. да, это работает, но теперь для отображения на экране требуется вечность. Он все еще работает ….. через пару минут. Запрос на извлечение данных из базы данных занимает всего около 3 секунд.
2. Ну, а чего вы ожидали? 81k элементов было бы довольно тяжело визуализировать 🙂
3. Я не очень хорошо знаком с Vue, есть ли способ ускорить это? Клиенты хотят ускорить процесс, и в настоящее время существует бесконечная прокрутка, которая извлекает только 50 результатов одновременно. Поскольку результатов может быть 81 тыс., для прокрутки вниз по 81 тыс. результатов потребуется целая жизнь. Старое приложение извлекается в файл, а затем отображается из файла. Я подумал, что Vue мог бы просто преобразовать это в простую таблицу, разве это не было бы быстро?
4. Меня не волнует, если это займет до 10-15 секунд, я могу отобразить счетчик или что-то в этом роде, но я запускаю eit уже пару минут, и он все еще не завершил отображение результатов на экране
5. Вы забыли, что Vue добавляет реактивность и создает DOM. Я бы посоветовал вам рассмотреть разбивку на страницы, потому что 81k результатов на одной странице никогда не бывает хорошим.