حدود ذاكرة المتصفح عند معالجة الملفات
حجم ملفي 15 MB فقط، فلماذا نفدت ذاكرة التبويب؟
الملف على القرص هو النسخة المضغوطة
هذا هو سوء الفهم كله في جملة واحدة: الرقم الذي تراه في مدير الملفات هو حجم البيانات المضغوطة، ولا شيء يمكن معالجته وهو مضغوط. فلتغيير مقاس صورة أو إعادة ضغطها أو تحويلها أو تحليلها، يجب فك ترميزها أولاً إلى بكسلات خام، والبكسلات الخام ضخمة.
الحساب بسيط. البكسل الواحد في الذاكرة يشغل عادةً أربعة بايتات — أحمر وأخضر وأزرق وقناة الشفافية. والصورة بمقاس 4000 × 3000 تضم اثني عشر مليون بكسل، أي أن الخريطة النقطية بعد فك الترميز تبلغ نحو 48 MB، بينما ربما كان ملف JPEG الذي أتت منه 4 MB. لقد تضخم الملف اثني عشر ضعفاً قبل أن يبدأ أي عمل.
| الأبعاد | البكسلات | الخريطة النقطية بعد فك الترميز |
|---|---|---|
| 1920 × 1080 | 2.1 مليون | نحو 8 MB |
| 4000 × 3000 | 12 مليون | نحو 48 MB |
| 6000 × 4000 | 24 مليون | نحو 96 MB |
| 10000 × 10000 | 100 مليون | نحو 400 MB |
ونسخة واحدة لا تكفي أبداً
أي مسار معالجة واقعي يحتفظ بعدة نسخ في وقت واحد: بايتات المُدخل المضغوطة، والخريطة النقطية للمصدر بعد فك الترميز، وخريطة نقطية للمُخرج بالأبعاد الجديدة، والذواكر المؤقتة الداخلية للمُرمِّز، والنتيجة المضغوطة. وأي أداة تعرض لك معاينة تحتفظ بنسخة إضافية. وبالنسبة إلى الصورة 4000 × 3000 المذكورة أعلاه، فإن ذروة استهلاك تتراوح بين مئتي وثلاثمئة ميغابايت أمر عادي تماماً، لملف بدا وكأنه 4 MB.
وتتصرف عملية تنقيط PDF بالطريقة نفسها، صفحةً صفحة: صفحة A4 مُصيَّرة بدقة 300 DPI تعادل تقريباً 2480 × 3508 بكسل، أي نحو 35 MB بعد فك الترميز، وأي أداة تُصيّر عدة صفحات دفعة واحدة تضاعف ذلك. أما الفيديو فأسوأ من ذلك، لأن مفكك الترميز يحتاج إلى بقاء عدة إطارات مرجعية في الذاكرة في الوقت نفسه.
أين تقع الحدود القصوى فعلياً
- ميزانية ذاكرة التبويب يحدّدها المتصفح لا الموقع، وهي أصغر من الذاكرة المثبّتة في الجهاز. كما أنها تتقلّص عندما تنشغل تبويبات أخرى.
- وحدات WebAssembly المبنية على نموذج الذاكرة الشائع بـ 32 بت لا تستطيع عنونة أكثر من أربعة غيبي بايت، وكثيراً ما تسمح المتصفحات بأقل من ذلك بكثير لكل نسخة.
- لكل ذاكرة مؤقتة على حدة طول أقصى خاص بها، وهو أدنى بكثير من إجمالي الذاكرة التي قد تستخدمها الصفحة.
- أنظمة تشغيل الهواتف تُنهي التبويب الذي يتضخّم أكثر من اللازم، دون تحذير ودون خطأ يمكن للصفحة التقاطه.
- ذاكرة الرسوميات مخزون منفصل وأصغر. وأي Canvas يتجاوز البُعد الأقصى للمنصّة يفشل ببساطة، مهما كان حجم ذاكرة النظام المتاحة.
لا يُنشر أي من هذه الحدود كرقم واحد يمكنك الرجوع إليه، لأنها تعتمد على المتصفح وإصداره والجهاز وما يعمل غيرها. وهنا تكمن الصعوبة الحقيقية: لا تستطيع الأداة أن تسأل كم من الذاكرة يُسمح لها باستخدامه.
لماذا الهواتف هي الحالة الأشد صرامة
الهواتف تملك ذاكرة فيزيائية أقل، ولا مساحة تبديل بالمعنى المعروف في الحواسيب المكتبية، ونظام تشغيل شديد الحزم في استرداد الذاكرة من العمليات الخلفية. وتبويب المتصفح يصبح عملية خلفية في اللحظة التي ترد فيها على رسالة. لذلك تفرض متصفحات الهواتف ميزانيات أضيق وتسارع إلى التخلّص من التبويب، ويبدو لك هذا التخلّص عادةً وكأن الصفحة أُعيد تحميلها وضاع عملك، لا وكأنه خطأ.
والنتيجة العملية أن مهمة تنتهي على حاسوب محمول قد تكون مستحيلة على هاتف بالملف نفسه. وهذا ليس عيباً في الأداة، بل حدّ عتادي، والاستجابة الصادقة هي قول ذلك قبل البدء بدل الانهيار في منتصف الطريق.
كيف تتصرف الأداة المتأنّية
- تقدّر حجم العمل المطلوب انطلاقاً من الأبعاد بعد فك الترميز قبل أن تحجز أي ذاكرة، وترفض المهمة التي يتضح أنها لن تتّسع.
- تعالج ملفاً واحداً في كل مرة على الأجهزة المحدودة بدل تشغيل دفعة كاملة بالتوازي.
- تنقل الذواكر المؤقتة بين الصفحة وعمّالها بدل نسخها، فلا يوجد الملف الكبير مرتين.
- تُحرّر كل نتيجة فور كتابتها، وتُبطل الروابط المؤقتة التي كانت ستُبقي البيانات حيّة لولا ذلك.
- تعالج تدفقياً صفحةً صفحة أو إطاراً إطاراً حيث تسمح الصيغة بذلك، بدل تحميل مستند كامل في الذاكرة.
- تضع سقفاً لعدد البكسلات الذي تقبله، وهو أيضاً ما يمنع ملفاً صغيراً يتمدّد إلى مساحة رسم هائلة من إسقاط التبويب.
ما يمكنك فعله عندما تفشل المهمة
- أغلق التبويبات الأخرى. فهي تنافسك على الميزانية نفسها، والمتصفحات لا تقتسمها بإنصاف.
- عالج ملفات أقل في المرة الواحدة. طابور من ملف واحد أبطأ، لكنه أرجح بكثير أن يصل إلى نهايته.
- قلّل الأبعاد أولاً. تنصيف الضلع الأطول يقلّص حجم العمل إلى الربع، وهو غالباً ما كنت تريده أصلاً.
- قسّم ملف PDF الكبير وعالج أجزاءه.
- انتقل إلى حاسوب مكتبي لأكبر المهام. هذا ليس فشلاً للمعالجة المحلية، بل هو الاستخدام الصحيح للعتاد المتاح لك.
- أعد تشغيل المتصفح إذا بقي التبويب مفتوحاً أياماً. فالتبويبات الطويلة العمر تراكم ذاكرة يحرّرها إعادة التحميل.
حدود أي تقدير
لا تكشف المتصفحات سوى تلميح تقريبي عن الذاكرة المتاحة، وبعضها لا يكشف شيئاً على الإطلاق. لذلك فإن أي رقم تعرضه عليك أداة محلية هو تقدير مبني على أبعاد الملف نفسه وعلى نموذج متحفّظ لمسار المعالجة، لا قراءة مأخوذة من نظام التشغيل. وهو مفيد لتقرير ما إذا كنت ستحاول المهمة، لكنه ليس وعداً بأنها ستكتمل، لأن العامل الحاسم — ما ستفعله بقية أجزاء الجهاز في الثلاثين ثانية القادمة — ليس شيئاً تستطيع صفحة ويب رؤيته.
أدوات لهذا الغرض
المصادر
- W3C — WebAssembly Core Specification, memory model
- W3C — Device Memory API, and why the value is coarse
- WHATWG — HTML Standard, transferable objects