تجاوز حاجز 2 غيغابايت: إدخال/إخراج غير متزامن للملفات الكبيرة في WebAssembly

2025-03-04
تجاوز حاجز 2 غيغابايت: إدخال/إخراج غير متزامن للملفات الكبيرة في WebAssembly

نفذ الكاتب سابقًا setjmp في WebAssembly ، متجاوزًا اعتماد WASI libc على اقتراح معالجة الاستثناءات. ومع ذلك ، كان هذا النهج محدودًا بالملفات التي تقل عن 2 غيغابايت. تشرح هذه المشاركة كيفية استخدام واجهة برمجة تطبيقات الملف ونوع Blob لإنشاء نظام ملفات قائم على الذاكرة للتعامل مع الملفات الأكبر حجمًا. نظرًا لأن إدخال/إخراج الويب غير متزامن ، بينما تكون لغات النظام عادةً متزامنة ، فقد تم استخدام Asyncify لربط النماذج. واجه الكاتب مشاكل في التحسين باستخدام wasm-opt ، وحلها بإنشاء wasm-opt وهمي. وأخيرًا ، باستخدام مؤشر دالة متطاير بذكاء ، تجاوز الافتراض الخاطئ لـ Asyncify حول وظيفة `asyncjmp_rt_start` ، محققًا في النهاية معالجة الملفات الكبيرة بشكل غير متزامن.

التطوير