الطريقة التي يتّبعها برنامج Photoshop لمعالجة ملفات أكبر من تلك التي تتسع للذاكرة

تعرّف على كيفية نجاح Adobe في السماح للمستخدمين بتعديل الملفات الكبيرة حتى على إصدار الويب من تطبيق Photoshop الشهير.

مقدمة

(تتوفر هذه المقالة أيضًا في شكل فيديو).

في عام 2021، جلبت Adobe وهندسة Chrome نسخة من Photoshop إلى الويب. يستفيد البرنامج بشكل مبتكَر من WebAssembly مع ميزات مثل SIMD وسعة التخزين العالية الأداء في نظام الملفات الخاصة المصدر ومساحة ألوان P3 للوحة الرسم ومكوّنات الويب التي تتضمّن Lit. في هذه المقالة، نريد التركيز على كيفية حل هندسة Adobe Photoshop للعمل على الملفات التي يزيد حجمها عن المساحة التي يمكن احتواؤها في الذاكرة. وفي حالة WebAssembly، كيفية عمل Photoshop مع الملفات التي تزيد مساحتها عن مساحة عنوان 32 بت في Wasm32.

تطبيق Photoshop أثناء تعديل صورة لشعار Project Fugu.

المشكلة

يتطلب فتح ملف لتعديله مساحة كبيرة من الذاكرة، تزيد بشكل كبير عن حجم فتح ملف لعرضه. غالبًا ما تتطلب الملفات التي يتم تعديلها في Photoshop ذاكرة أكبر من تلك المتوفرة على جهازه، ويرجع ذلك إلى الميزات العديدة التي يقدمها البرنامج وأنواع التصميم والتعديل الرقمي التي يتم استخدامها وإمكانيات أجهزة المستخدم.

يخزِّن تنسيق ملف Photoshop البيانات مع الضغط بدون فقدان البيانات. عند قراءة ملف أو مستند، يتم فك ضغط جميع بيانات الصورة للسماح بمعالجة أكثر كفاءة. ونتيجة لذلك، يمكن أن يزيد مقدار الذاكرة المطلوبة عدة مرات عن مقدار المساحة التي يستخدمها المستند على القرص أو في التخزين السحابي.

يتيح Photoshop سجل تراجع كبيرًا للغاية. نسمي العديد من العمليات في Photoshop باسم العمليات التخريبية. وهذا يعني أنّ إجراء تعديل، مثل الرسم باستخدام فرشاة، سيؤدي إلى الحصول على بيانات بكسل جديدة قد يتساوى حجمها مع حجم بيانات البكسل الأصلية. ويؤدي إجراء هذه التعديلات في جلسة تعديل طويلة إلى إنتاج كميات كبيرة من بيانات البكسل التي يجب الاحتفاظ بها لدعم عمليات التراجع. وهكذا، يمكن أن ينمو التاريخ ليصل إلى مئات الميغابايت أو العديد من الجيجابايت من البيانات.

وتعمل الأجهزة والأنظمة الأساسية على إدارة الذاكرة، سواء كانت أجهزة كمبيوتر مكتبي أو أجهزة جوّالة أو متصفِّحات. وبعضهم أكثر كرمًا من البعض الآخر في حجم الذاكرة التي يوفرونها للتطبيقات. يختلف مقدار الذاكرة أيضًا من جهاز إلى آخر، كما تعلم عند طلب جهاز كمبيوتر أو جهاز جديد وتحديد مقدار ذاكرة الوصول العشوائي (RAM) المطلوبة. يتوافق العديد من هذه الأنظمة الأساسية أيضًا مع الذاكرة الافتراضية، التي تسمح للتطبيق باستخدام ذاكرة أكبر من المساحة المتاحة. ويختلف هذا التوافق حسب نظام التشغيل ووقت التشغيل، كما في حالة WebAssembly، قد لا تتمكّن التطبيقات من الوصول إليها أو استخدامها بسهولة. علاوةً على ذلك، تتمتع الأنظمة الافتراضية الحديثة بحدود قصوى تتجاوز متطلبات برنامج Photoshop بسهولة.

سعيًا إلى المثالية، ستستخدم التطبيقات المساحة التي تحتاج إليها من الذاكرة. وهذا يتيح لها بشكل عام تقديم أفضل أداء للمستخدمين. ومع ذلك، إذا كانت تستخدم مقدارًا كبيرًا جدًا من الذاكرة، فقد يتم فرض عقوبات من خلال النظام الأساسي لوقت التشغيل أو قد تنفد الذاكرة، ما يؤدي إلى حدوث إخفاقات.

جدير بالذكر أنّ المشكلة الأصلية التي احتاج فريق Photoshop لحلها كانت تعديل ملفات درجة دقة الطباعة في الإصدارات الأولى من نظام التشغيل macOS، وبحجم يصل إلى 1 ميغابايت بالنسبة إلى نظام التشغيل وجميع التطبيقات. حجم الصورة الكاملة للصفحة بالكامل والتي تبلغ 300 نقطة لكل بوصة بتنسيق CMYK يبلغ 32 ميغابايت تقريبًا بدون ضغط.

الحل

لحل مشكلة تجاوز التطبيق للمساحة المتاحة من ذاكرة الوصول العشوائي، استخدم Photoshop نظام ذاكرة افتراضية برمجي (VM). يستخدم Photoshop جهازه الافتراضي لإدارة بيانات المستندات، خاصةً بيانات الصور، وجميع سجلّ التراجع وحالة التراجع، بالإضافة إلى مساحة التخزين المستخدمة للأمر الحالي. كما تُستخدم في التخزين المؤقت لكتل كبيرة من البيانات مثل أوصاف الفرشاة بحيث لا يلزم التسلسل المتسلسل من القرص مرة واحدة فقط.

كمثال على أحد الجوانب التي يديرها الجهاز الافتراضي (VM)، يتم تخزين بيانات الصور باستخدام تمثيل mipmap، وهو مجموعة هرمية من المربّعات، ويوفّر بيانات الصور بدرجات دقة منخفضة وعالية. ويتيح ذلك لبرنامج Photoshop تشغيل بيانات درجة الدقة المناسبة للحصول على استجابة أسرع عند التكبير أو استعراض المعاينة، بدلاً من التصغير.

مثال على تخزين صور mipmap: تكون الصورة الرئيسية على اليسار مصحوبة بنُسخ تمت فلترتها بحجم أصغر.

أثناء تهيئة التطبيق، يحدد برنامج Photoshop مقدار ذاكرة الوصول العشوائي المتاحة. ويخصص جزءًا واحدًا لتخزين البيانات في الجهاز الافتراضي. تتوفر ذاكرة الوصول العشوائي المتبقية لاحتياجات التطبيقات الأخرى من خلال مكتبة وقت تشغيل C++ القياسية. يتم تقسيم ذاكرة الجهاز الافتراضي إلى صفحات. وتكون كل صفحة عادةً مضاعفًا لحجم صفحة الجهاز للجهاز. عند استخدام الذاكرة لبيانات الصور، تتم الإشارة إلى الذاكرة كمربّعات. المربع هو مساحة مربعة مكونة من وحدات بكسل لطبقة واحدة بما في ذلك الحدود الهندسية. يستهلك المربّع صفحة واحدة أو أكثر.

ينشئ Photoshop ملف خدش واحدًا أو أكثر لتوفير نسخة احتياطية مستندة إلى القرص لصفحات الأجهزة الافتراضية. يتم تخزين ملفات الخدش هذه في نظام الملفات الخاصة المصدر. تعرض لقطة الشاشة تدرجًا هرميًا نموذجيًا لملف الخدش (المظلل باللون الأصفر) والملفات الأخرى أثناء جلسة تعديل الصور. يمكن أن يحتوي كل ملف خدش على العديد من صفحات الأجهزة الافتراضية. عندما يحتاج الجهاز الافتراضي إلى مزيد من النسخ الاحتياطي، ينشئ ملفات خدش إضافية. ونظرًا لتحرير الصفحات، يمكن إعادة استخدام مساحتها في ملف خدش للصفحات الجديدة.

فحص التسلسل الهرمي لملفات نظام الملفات الخاصة الأصلية في Photoshop باستخدام إضافة OPFS Explorer في Chrome.

عند معالجة بيانات الصور، يتكرر Photoshop على شكل المربّعات، وينفِّذ حسابات وحدات البكسل. يمكن أن تشير كل عملية حسابية إلى مربّعات متعددة. يكون الجهاز الافتراضي مسؤولاً عن التأكّد من أنّ مربّعَي المصدر والوجهة للتكرار الحالي في الذاكرة يتم تحميله من ملفات البداية على النحو المطلوب. وفي الوقت نفسه، يمكنه مسح الصفحات إلى ملفات البداية لتوفير مساحة في الذاكرة.

الاستنتاجات

على الرغم من أنّ تفاصيل التنفيذ الملموسة للجهاز الافتراضي ستكون خارج نطاق هذا المستند (وهي أيضًا مملوكة لشركة Adobe)، ومع تقديم وصف عالي المستوى للحلّ، وضعناك في مكان يمكنك من خلاله فهم كيفية التعامل مع الملفات الكبيرة بواسطة Photoshop. يُعدّ نظام الملفات الخاص المصدر مع إمكانية الوصول للقراءة والكتابة عالية الأداء إلى الملفات أحد المكوّنات الرئيسية للحلّ.

شكر وتقدير

تمت مراجعة مشاركة المدونة هذه بواسطة أوليفر أونتر إيكر وراشيل أندرو. نشكر "راسل ويليامز" على وثائقه الممتازة حول جهاز Photoshop الافتراضي.