cache
dalam masalah GitHub, menemukan beberapa masalah pada cache tetapi bukan yang saya minta.Saya mem-parsing bagian yang cukup berat (500KB) dari teks yang disediakan pengguna menggunakan tata bahasa ~1000 baris.
{cache: true}
...--max-old-space-size=3000
), tumpukan bertambah menjadi 2,5 GB, dan penguraian berhasil dalam 12 detik.{cache: false}
, seperti yang diharapkan, parsing jam sedikit lebih cepat pada 10-an (kasus non-patologis) dan tidak menggembungkan penggunaan memori.Ini adalah data pengguna dan sumber daya server saya terbatas, jadi menabrak Node untuk menggunakan tumpukan X GB bukanlah pilihan, karena besok saya mungkin mendapatkan data pengguna 1MB yang akan membutuhkan tumpukan X+1 GB. Dan tentu saja saya ingin tetap menggunakan {cache: true}
bila memungkinkan, untuk " menghindari waktu penguraian eksponensial dalam kasus patologis" , yang saya temui.
Pendekatan apa yang Anda rekomendasikan?
{cache: true}
berdasarkan ukuran input. Itu akan menghabiskan lebih banyak penggunaan CPU, tetapi setidaknya saya tidak akan OOM.Terima kasih untuk PEG.js! 🙂
Waktu penguraian eksponensial adalah sesuatu yang terjadi dalam kasus yang sangat patologis, dan saya akan merekomendasikan untuk menulis ulang tata bahasa di sana.
Pertimbangkan https://github.com/sirthias/pegdown/issues/43#issuecomment -18469752
(Saya bukan kontributor)
Seperti yang ditunjukkan oleh @polkovnikov-ph, yang terbaik adalah menulis ulang bagian tata bahasa Anda yang berhubungan dengan kasus patologis, tetapi jika Anda terus menekan kasus OOM, mungkin lebih baik untuk melakukan apa yang Anda (@ronjouch) sarankan; alihkan opsi _cache_ berdasarkan ukuran input: cache: input.length >= 250000
Setelah ini (dan hanya jika Anda memiliki akses ke teks yang disediakan pengguna), saya akan menyarankan untuk memeriksa input apa pun yang mengenai kasus OOM untuk menemukan kasus patologis umum dan memperbarui tata bahasa Anda untuk secara eksplisit menangani ini sehingga Anda dapat mengurangi jumlah kasus OOM memukul aplikasi Anda.
Jika Anda masih sering menggunakan kasus OOM, dan bersedia untuk tidak hanya menulis ulang tata bahasa Anda, tetapi juga menambahkan pass tambahan (atau sedikit) ke rantai alat Anda, saya sarankan untuk mencoba salah satu metode ini:
@polkovnikov-ph @futagoza terima kasih kepada kalian berdua karena telah meluangkan waktu untuk kembali dengan saran 👍! Itu masuk akal. Saya menggunakan solusi ukuran, dan akan mempertimbangkan untuk menulis ulang tata bahasa lain kali masalah mengetuk pintu. Selamat tinggal; menutup pertanyaan.