تعرَّف على كيفية تمكّنت Adobe من السماح للمستخدمين بتعديل حتى أكبر الملفات على إصدار الويب من تطبيق Photoshop الشهير.
مقدمة
(تتوفّر هذه المقالة أيضًا في شكل فيديو).
في عام 2021، تعاونت شركة Adobe مع فريق هندسة Chrome لطرح إصدار من Photoshop على الويب. يستخدم البرنامج WebAssembly بشكل مبتكر من خلال ميزات مثل SIMD ومساحة التخزين العالية الأداء في نظام الملفات الخاص بمصدر البيانات ومساحة ألوان P3 للوحة الرسم وWeb Components مع Lit. في هذه المقالة، نريد التركيز على كيفية حلّ فريق مهندسي Adobe Photoshop لمشاكل العمل مع الملفات الأكبر حجمًا من الحجم الذي يمكن تخزينه في الذاكرة. وفي ما يتعلق بـ WebAssembly، يوضّح هذا القسم كيفية عمل Photoshop مع الملفات الأكبر حجمًا من مساحة العناوين بسعة 32 بت في wasm32.
المشكلة
يتطلب فتح ملف للتعديل قدرًا كبيرًا من الذاكرة، أكثر بكثير من فتح ملف للعرض. غالبًا ما تتطلّب الملفات التي يتم تعديلها في Photoshop ذاكرة أكبر من تلك المتوفّرة لدى المستخدم على جهازه، وذلك بسبب الميزات العديدة التي يوفّرها البرنامج وأنواع التصميم الرقمي والتعديل الذي يتم استخدامه من أجله وإمكانات أجهزة المستخدمين.
يخزّن تنسيق ملف Photoshop البيانات باستخدام ضغط بدون فقدان البيانات. عند قراءة ملف أو مستند، يتم فك ضغط جميع بيانات الصورة للسماح بمعالجة أكثر فعالية. ونتيجةً لذلك، يمكن أن تكون كمية الذاكرة المطلوبة أكبر بعدة مرات من المساحة التي يستخدمها المستند على القرص أو في مساحة التخزين في السحابة الإلكترونية.
يتيح Photoshop إمكانية الوصول إلى سجلّ كبير جدًا لعمليات التراجع. إنّ العديد من العمليات في Photoshop هي ما نُطلق عليه اسم العمليات المدمرة. وهذا يعني أنّ إجراء تعديل، مثل الرسم باستخدام فرشاة، سيؤدي إلى إنشاء بيانات وحدات بكسل جديدة يمكن أن تكون كبيرة مثل بيانات وحدات البكسل الأصلية. يؤدي إجراء هذه التعديلات في جلسة تعديل طويلة إلى إنشاء كميات كبيرة من بيانات البكسل التي يجب الاحتفاظ بها لاتاحة عمليات التراجع. وبالتالي، يمكن أن يصل حجم السجلّ إلى عدة مئات من الميغابايت أو عدة غيغابايت من البيانات.
تدير جميع الأجهزة والمنصات، سواء كانت أجهزة كمبيوتر مكتبي أو أجهزة جوّالة أو متصفّحات، الذاكرة. وبعض الأجهزة توفّر للتطبيقات ذاكرة أكبر من غيرها. تختلف سعة الذاكرة أيضًا من جهاز إلى آخر، كما تعلم عند طلب جهاز كمبيوتر أو جهاز جديد وتحديد سعة ذاكرة الوصول العشوائي (RAM) المطلوبة. تتوافق العديد من هذه المنصات أيضًا مع الذاكرة الافتراضية، ما يسمح للتطبيق باستخدام ذاكرة أكبر من تلك المتوفّرة فعليًا. يختلف هذا التوافق حسب نظام التشغيل ووقت التشغيل، كما هو الحال مع WebAssembly، وقد لا يكون متاحًا للتطبيقات أو يمكن استخدامها بسهولة. بالإضافة إلى ذلك، تفرض الأنظمة الافتراضية الحديثة حدودًا قصوى يسهل تجاوزها لمتطلبات Photoshop.
من المفترض أن تستخدم التطبيقات مقدار الذاكرة الذي تحتاجه فقط. ويسمح لهم ذلك بشكل عام بتقديم أفضل أداء للمستخدمين. ومع ذلك، إذا استخدمت هذه التطبيقات قدرًا كبيرًا جدًا من الذاكرة، قد تفرض منصّة التشغيل عقوبات عليها أو قد تنفد ذاكرتها، ما يؤدي إلى حدوث أعطال.
في ما يلي ملاحظة تاريخية: كانت المشكلة الأصلية التي كان على Photoshop حلّها هي تعديل ملفات دقة الطباعة على الإصدارات الأولى من نظام التشغيل macOS، والتي كانت تبلغ أحيانًا 1 ميغابايت لنظام التشغيل وجميع التطبيقات. تبلغ مساحة صورة صفحة كاملة بدقة 300 نقطة في البوصة بتنسيق CMYK حوالي 32 ميغابايت بدون ضغط.
الحل
لحلّ مشكلة تجاوز التطبيق للمساحة المتوفّرة في ذاكرة الوصول العشوائي (RAM)، نفَّذ Photoshop نظام ذاكرة افتراضية للبرامج (VM). يستخدم Photoshop جهازه الظاهري لإدارة بيانات المستندات، خاصةً بيانات الصور، وجميع سجلّ التراجع والحالة، بالإضافة إلى مساحة التخزين النشطة للطلب الحالي. ويُستخدَم أيضًا لتخزين مجموعات كبيرة من البيانات مؤقتًا، مثل أوصاف الفرشاة، بحيث لا يلزم تسلسلها من القرص إلا مرة واحدة.
على سبيل المثال، أحد الجوانب التي تُدار من خلال الجهاز الظاهري هو تخزين بيانات الصور باستخدام تمثيل mipmap، وهي مجموعة هرمية من المربّعات، تقدّم بيانات الصور بمجموعة من درجات الدقة المنخفضة إلى العالية. يتيح ذلك لبرنامج Photoshop العمل على بيانات الدقة المناسبة للحصول على استجابة أسرع عند التكبير أو الاطّلاع على معاينة مقارنةً بالتصغير.
أثناء إعداد التطبيق، يحدِّد Photoshop مقدار ذاكرة الوصول العشوائي المتوفّرة. ويخصّص جزءًا واحدًا للبيانات التي سيتم تخزينها في الجهاز الظاهري. وتتوفّر ذاكرة الوصول العشوائي المتبقية لاحتياجات التطبيقات الأخرى من خلال مكتبة وقت التشغيل العادية لـ C++. يتم تقسيم ذاكرة الجهاز الظاهري إلى صفحات. وتكون كل صفحة عادةً مضاعِفًا لحجم صفحة الجهاز. عند استخدامها لبيانات الصور، تتم الإشارة إلى الذاكرة على أنّها مربّعات. المربّع هو مساحة مربّعة من وحدات البكسل في طبقة واحدة، بما في ذلك حدود الأشكال الهندسية. يشغل المربّع صفحة واحدة أو أكثر.
ينشئ Photoshop ملفًا مؤقتًا واحدًا أو أكثر لتوفير مساحة تخزين مستندة إلى القرص لصفحات VM. يتم تخزين ملفات المسودة هذه في نظام الملفات الخاص الأصلي. تعرض لقطة الشاشة تسلسلاً هرميًا مثاليًا للملفات، مثل ملف الاختبار (المميّز باللون الأصفر) والملفات الأخرى أثناء جلسة تعديل الصور. يمكن أن يحتوي كل ملف احتياطي على العديد من صفحات الأجهزة الافتراضية. عندما تحتاج آلة افتراضية إلى مزيد من الدعم، فإنّها تنشئ ملفات تخزين مؤقت إضافية. وعند إزالة الصفحات، يمكن إعادة استخدام مساحتها في ملف فارغ لإنشاء صفحات جديدة.
عند معالجة بيانات الصورة، يكرّر Photoshop التنقّل في المربّعات، ويُجري عمليات حسابية على وحدات البكسل. يمكن أن تشير كل عملية حسابية إلى عدة مربّعات. تتحمّل آلة افتراضية مسؤولية التأكّد من توفّر مربّعات المصدر والوجهة للتكرار الحالي في الذاكرة، وتحميلها من ملفات فارغة حسب الحاجة. وفي الوقت نفسه، يمكنه تفريغ الصفحات إلى ملفات التخزين المؤقت لإخلاء مساحة في الذاكرة.
الاستنتاجات
على الرغم من أنّ تفاصيل التنفيذ المحدّدة لوحدة VM تتجاوز نطاق هذا المستند (وهي أيضًا ملكية خاصة لشركة Adobe)، من خلال الوصف العام للحلّ، وضعناك في موضع يتيح لك فهم كيفية تعامل Photoshop مع الملفات الكبيرة. يُعدّ نظام الملفات الخاص الأصلي الذي يتمتع بأداء عالٍ في الوصول إلى الملفات للقراءة والكتابة مكوّنًا رئيسيًا في الحلّ.
الشكر والتقدير
راجعت "أوليفر أونتر إيكر" و"راشيل أندرو" مشاركة المدونة هذه. نشكر "راشد كمال" على إعداده لمستندات ممتازة حول جهاز Photoshop الظاهري.