İşte size işleri hızlandırmak için uygulayabileceğiniz birkaç optimizasyon. Sadece yüksek sesle düşünmek.
Satır sayısı milyonlarca olabileceğinden, yalnızca sunucudaki JSON verileri için bir önbellek sistemi isteyeceksiniz. X milyonun tüm öğelerini indirmek isteyen kimseyi hayal edemiyorum, ama eğer yaparlarsa sorun olur. Chrome'da bu 20M + tamsayı dizisi için yapılan bu küçük test , makinemde sürekli çöküyor.
var data = [];
for(var i = 0; i < 20000000; i++) {
data.push(i);
}
console.log(data.length);
Sen kullanabilirsiniz LRU veya başka bir önbelleğe alma algoritması ve bir üst size cache istekli ne kadar veri bağlı bulunmaktadır.
Tablo hücrelerinin kendileri için, DOM düğümlerini oluşturmak / yok etmek pahalı olabilir. Bunun yerine, X sayısını hücre önceden tanımlayabilir ve kullanıcı yeni bir konuma her kaydırdığında JSON verilerini bu hücrelere enjekte edebilir. Kaydırma çubuğunun, tüm veri kümesini temsil etmek için ne kadar alan (yükseklik) gerektiği ile doğrudan bir ilişkisi yoktur. Tablo kabının yüksekliğini 5000 piksel gibi keyfi olarak ayarlayabilir ve toplam satır sayısına eşleyebilirsiniz. Örneğin, kapların yüksekliği 5000 piksel ise ve toplam 10 milyon satır varsa, starting row ≈ (scroll.top/5000) * 10M
burada scroll.top
kap kabın üstünden kaydırma mesafesini temsil eder. Burada küçük demo .
Ne zaman daha fazla veri talep edileceğini saptamak için, ideal olarak bir nesne, olayları kaydırmayı dinleyen bir aracı olarak hareket etmelidir. Bu nesne, kullanıcının ne kadar hızlı kaydırdığını izler ve kullanıcı yavaşladığında veya tamamen durduğunda, ilgili satırlar için bir veri isteği yapar. Verileri bu şekilde almak, verilerinizin parçalanacağı anlamına gelir; bu nedenle önbellek, bu bilgileri göz önünde bulundurarak tasarlanmalıdır.
Ayrıca maksimum giden bağlantılardaki tarayıcı sınırları önemli bir rol oynayabilir. Bir kullanıcı bir AJAX isteğini tetikleyecek belirli bir konuma kayabilir, ancak bu işlem bitmeden önce başka bir bölüme geçebilir. Sunucu yeterince yanıt vermiyorsa, istekler sıraya alınır ve uygulama yanıt vermez. Tüm isteklerin yönlendirildiği bir istek yöneticisi kullanabilirsiniz ve alan açmak için bekleyen istekleri iptal edebilir.