electron 用JavaScript对大数组进行分页

chhkpiq4  于 2023-05-27  发布在  Electron
关注(0)|答案(2)|浏览(168)

我有一个js数组,由于它的大小,它会给我的electron应用程序带来一些问题,它将包含大约53000个对象。为了避免性能问题,在应用程序启动时加载数据时,如何拆分它?目前我从adodbc访问文件中获取数据,并使用vuejs将其推送到前端的数组中。
background.js

ipcMain.on('init', (event, ...args) => {
    let suppliersData = false
    let clientsData = false
    suppliersdb.query('SELECT * FROM FANFOR0F_1')
        .then( (results) => {
            console.log(results.length)
            //
            suppliersData = true
            //result.NEMA = result.NEMA.replace('§', '@')
            event.sender.send('suppliersData', results)            
        }).catch( e => { 
            console.log(e) 
            event.sender.send('databaseUpdateError', e)
        })
    clientsdb.query('SELECT * FROM PDECON0F_1')
        .then( (results) => {
            console.log(results.length)
            clientsData = true
            event.sender.send('clientsData', results)
        }).catch( e => {
            console.log(e)
            event.sender.send('databaseUpdateError', e)
        })
    //
    if( suppliersData && clientsData ){
        event.sender.send('databaseUpdateCompleted')
    }
})

vue前端加载时间mounted()钩子

window.ipcRenderer.send('init')
        window.ipcRenderer.receive('suppliersData', (data) => {
            this.suppliersDataAvailable = true
            this.store.suppliers = data
        })
        window.ipcRenderer.receive('clientsData', (data) => {
            console.log(data)
            this.clientsDataAvailable = true
            this.store.clients = data
        })

我的想法是将其拆分为不同的页面或在页面滚动时延迟加载内容,我正在实现rxdb以获得数据的本地副本并减少应用程序启动时的加载时间。任何建议将不胜感激。

8tntrjer

8tntrjer1#

我发现了一个更简单的解决方案,涉及.slice()方法:

const array = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14];
const arrays = [];
const arraysLengths = 4;
for (let i = 0; i < array.length; i=i+arraysLengths) {
    arrays.push(array.slice(i,i+arraysLengths));
    
};
console.log(arrays);

一切都一样。只是你不再需要那个临时数组了。

rmbxnbpk

rmbxnbpk2#

我有一个解决办法:

const array = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14];
//main array that you want to split
const arrays = [];
//small arrays
const arraysLengths = 4;
//elements in one array
let array1 = [] 
//temporary array

for (let i = 0; i < array.length; i=i+arraysLengths) {
    for (let j = 0; j < arraysLengths; j++) {
        if ((i+j) <= array.length - 1) {
            array1.push(array[i+j])
        }

    };
    //this is the code that splits arrays

arrays.push(array1);
array1=[]
//transfer arrays into another array
};
console.log(arrays)  //show result

你可以在arrayLengths中插入任何自然数,它都可以工作。你可以在数组中找到所有的数组

相关问题