Konteks: Saya sedang membangun situs kecil yang membaca rss feed, dan mengupdate / memeriksa feed di latar belakang. Saya memiliki satu larik untuk menyimpan data untuk ditampilkan, dan larik lainnya yang menyimpan ID catatan yang telah ditampilkan.
Pertanyaan: Berapa banyak item yang dapat ditampung sebuah array dalam Javascript sebelum semuanya mulai menjadi lambat, atau lamban. Saya tidak menyortir array, tetapi saya menggunakan fungsi inArray jQuery untuk melakukan perbandingan.
Situs web akan dibiarkan berjalan, dan diperbarui dan kemungkinan kecil browser akan direstart / disegarkan sesering itu.
Jika saya harus berpikir tentang menghapus beberapa catatan dari larik, apa cara terbaik untuk menghapus beberapa catatan setelah batas, seperti 100 item.
sumber
Jawaban:
Panjang maksimum hingga "menjadi lamban" sepenuhnya bergantung pada mesin target dan kode Anda yang sebenarnya, jadi Anda perlu menguji platform (itu) untuk melihat apa yang dapat diterima.
Namun, panjang maksimum sebuah larik sesuai dengan spesifikasi ECMA-262 Edisi ke-5 terikat oleh bilangan bulat 32-bit yang tidak bertanda tangan karena operasi abstrak ToUint32 , sehingga larik terpanjang dapat memiliki 2 32 -1 = 4.294.967.295 = 4.29 miliar elemen .
sumber
Tidak perlu memangkas array, cukup atasi sebagai buffer melingkar (index% maxlen). Ini akan memastikan itu tidak pernah melewati batas (menerapkan buffer melingkar berarti bahwa begitu Anda mencapai akhir, Anda membungkusnya ke awal lagi - tidak mungkin untuk membanjiri akhir larik).
Sebagai contoh:
sumber
Anda dapat mencoba sesuatu seperti ini untuk menguji dan memotong panjangnya:
http://jsfiddle.net/orolo/wJDXL/
sumber
Seperti yang dikatakan @maerics, mesin target dan browser Anda akan menentukan kinerja.
Tetapi untuk beberapa nomor dunia nyata, di Chromebook perusahaan tahun 2017 saya, menjalankan operasi:
x=5e4
membutuhkan 16ms, cukup baik untuk 60fpsx=4e6
membutuhkan 250ms, yang terlihat tetapi bukan masalah besarx=3e7
membutuhkan waktu 1300ms, yang sangat burukx=4e7
membutuhkan waktu 11000ms dan mengalokasikan tambahan memori 2.5GBJadi, sekitar 30 juta elemen adalah batas atas yang sulit, karena VM javascript jatuh dari tebing dengan 40 juta elemen dan mungkin akan menghentikan proses.
sumber
Saya telah membangun kerangka kinerja yang memanipulasi dan membuat grafik jutaan kumpulan data, dan bahkan kemudian, latensi penghitungan javascript berada di urutan puluhan milidetik. Kecuali Anda khawatir akan melampaui batas ukuran array, saya rasa Anda tidak perlu terlalu khawatir.
sumber
Ini akan sangat bergantung pada browser. 100 item kedengarannya bukan angka yang besar - Saya harap Anda bisa lebih tinggi dari itu. Ribuan seharusnya tidak menjadi masalah. Yang mungkin menjadi masalah adalah konsumsi memori total.
sumber
Saya tanpa malu-malu telah menarik beberapa kumpulan data yang cukup besar dalam memori, dan meskipun hal itu menjadi lamban, mungkin diperlukan waktu sekitar 15 Mo data ke atas dengan perhitungan yang cukup intens pada kumpulan data tersebut. Saya ragu Anda akan mengalami masalah dengan memori kecuali Anda memiliki perhitungan yang intens pada data dan banyak baris. Pembuatan profil dan pembandingan dengan kumpulan hasil tiruan yang berbeda akan menjadi pilihan terbaik Anda untuk mengevaluasi kinerja.
sumber