Berikut adalah beberapa optimasi yang dapat Anda terapkan untuk mempercepat. Hanya berpikir keras.
Karena jumlah baris dapat mencapai jutaan, Anda perlu sistem caching hanya untuk data JSON dari server. Saya tidak bisa membayangkan ada orang yang ingin mengunduh semua X juta item, tetapi jika mereka melakukannya, itu akan menjadi masalah. Tes kecil ini di Chrome untuk array pada 20M + integer crash di mesin saya terus-menerus.
var data = [];
for(var i = 0; i < 20000000; i++) {
data.push(i);
}
console.log(data.length);
Anda bisa menggunakan LRU atau algoritma caching lainnya dan memiliki batas atas berapa banyak data yang ingin Anda cache.
Untuk sel tabel sendiri, saya pikir membangun / menghancurkan node DOM bisa mahal. Alih-alih, Anda bisa menentukan sebelumnya jumlah sel X, dan kapan pun pengguna menggulir ke posisi baru, masukkan data JSON ke dalam sel-sel ini. Bilah gulir hampir tidak memiliki hubungan langsung dengan berapa banyak ruang (tinggi) yang diperlukan untuk mewakili seluruh dataset. Anda bisa secara sewenang-wenang mengatur ketinggian penampung tabel, katakan 5000px, dan petakan itu ke jumlah baris. Misalnya, jika ketinggian wadah adalah 5000px dan ada total baris 10M, maka di starting row ≈ (scroll.top/5000) * 10M
mana scroll.top
mewakili jarak gulir dari bagian atas wadah. Demo kecil di sini .
Untuk mendeteksi kapan meminta lebih banyak data, idealnya sebuah objek harus bertindak sebagai mediator yang mendengarkan gulir peristiwa. Objek ini melacak seberapa cepat pengguna menggulir, dan ketika sepertinya pengguna melambat atau benar-benar berhenti, membuat permintaan data untuk baris yang sesuai. Mengambil data dengan cara ini berarti data Anda akan terfragmentasi, jadi cache harus dirancang dengan mempertimbangkan hal itu.
Juga batas browser pada koneksi keluar maksimum dapat memainkan bagian penting. Seorang pengguna dapat menggulir ke posisi tertentu yang akan memecat permintaan AJAX, tetapi sebelum itu selesai pengguna dapat menggulir ke bagian lain. Jika server tidak cukup responsif permintaan akan antri dan aplikasi akan terlihat tidak responsif. Anda bisa menggunakan manajer permintaan melalui mana semua permintaan dialihkan, dan itu dapat membatalkan permintaan yang tertunda untuk membuat ruang.