بیاموزید که چگونه Adobe توانسته است به کاربران اجازه دهد حتی بزرگترین فایل ها را در نسخه وب برنامه نمادین فتوشاپ خود ویرایش کنند.
معرفی
(این مقاله به صورت ویدئویی نیز موجود است.)
در سال 2021، Adobe به همراه مهندسی کروم، نسخهای از فتوشاپ را به وب ارائه کرد . این نرم افزار از WebAssembly با ویژگی هایی مانند SIMD ، ذخیره سازی با کارایی بالا در سیستم فایل خصوصی مبدا ، فضای رنگی P3 برای بوم، و اجزای وب با نور استفاده می کند. در این مقاله، میخواهیم بر روی این موضوع تمرکز کنیم که چگونه مهندسی Adobe Photoshop کار با فایلهای بزرگتر از ظرفیت حافظه را حل کرد. و در مورد WebAssembly، نحوه کار فتوشاپ با فایل های بزرگتر از فضای آدرس 32 بیتی wasm32.
مشکل
باز کردن یک فایل برای ویرایش نیاز به مقدار زیادی حافظه دارد که به طور قابل توجهی بیشتر از باز کردن یک فایل برای مشاهده است. فایلهای ویرایش شده در فتوشاپ به دلیل ویژگیهای فراوانی که نرمافزار ارائه میدهد، انواع طراحی و ویرایش دیجیتالی که برای آن استفاده میشود و قابلیتهای دستگاههای کاربر، اغلب به حافظه بیشتری نسبت به حافظه موجود کاربر در دستگاه خود نیاز دارند.
فرمت فایل فتوشاپ داده ها را با فشرده سازی بدون تلفات ذخیره می کند. هنگامی که یک فایل یا سند خوانده می شود، تمام داده های تصویر از حالت فشرده خارج می شوند تا امکان پردازش کارآمدتر فراهم شود. در نتیجه، مقدار حافظه مورد نیاز میتواند چندین برابر فضایی باشد که یک سند روی دیسک یا فضای ذخیرهسازی ابری استفاده میکند.
فتوشاپ از یک تاریخچه خنثی سازی بسیار بزرگ پشتیبانی می کند. بسیاری از عملیات در فتوشاپ همان چیزی است که ما به آن عملیات مخرب می گوییم. یعنی انجام یک ویرایش مانند نقاشی با قلم مو منجر به داده های پیکسلی جدیدی می شود که می تواند به اندازه داده های پیکسل اصلی باشد. انجام این ویرایشها در یک جلسه ویرایش طولانی، حجم زیادی از دادههای پیکسلی را به دست میدهد که برای پشتیبانی از عملیات خنثی کردن، باید در اطراف نگهداری شوند. بنابراین، تاریخ می تواند به چند صد مگابایت یا چندین گیگابایت داده افزایش یابد.
دستگاهها و پلتفرمها، خواه ماشینهای دسکتاپ، دستگاههای تلفن همراه یا مرورگرها، همگی حافظه را مدیریت میکنند. برخی از آنها در میزان حافظه ای که در اختیار برنامه ها قرار می دهند سخاوتمندتر از دیگران هستند. مقدار حافظه نیز از دستگاهی به دستگاه دیگر متفاوت است، همانطور که می دانید وقتی کامپیوتر یا دستگاه جدیدی سفارش می دهید و میزان حافظه دسترسی تصادفی (RAM) مورد نظر را مشخص می کنید. بسیاری از این پلتفرمها از حافظه مجازی نیز پشتیبانی میکنند که به یک برنامه اجازه میدهد از حافظهای که به صورت فیزیکی در دسترس است استفاده کند. این پشتیبانی بسته به سیستم عامل و زمان اجرا متفاوت است، همانطور که در مورد WebAssembly ممکن است به راحتی توسط برنامه ها قابل دسترسی یا استفاده نباشد. علاوه بر این، سیستمهای مجازی مدرن دارای محدودیتهای بالایی هستند که به راحتی توسط نیازهای فتوشاپ از آنها فراتر میرود.
در حالت ایدهآل، برنامهها به اندازه نیاز از حافظه استفاده میکنند. این به طور کلی به آنها اجازه می دهد تا بهترین عملکرد را به کاربران خود ارائه دهند. با این حال، اگر آنها از حافظه بیش از حد استفاده کنند، ممکن است توسط پلتفرم زمان اجرا جریمه شوند یا ممکن است حافظه آنها تمام شود و منجر به خرابی شود.
به عنوان یک یادداشت تاریخی، مشکل اصلی که فتوشاپ باید حل میکرد، ویرایش فایلهای با وضوح چاپ در نسخههای اولیه macOS بود، به اندازه ۱ مگابایت برای سیستمعامل و همه برنامهها. یک تصویر تمام صفحه 300 نقطه در اینچ در CMYK تقریباً 32 مگابایت فشرده نشده است.
راه حل
برای حل مشکل بیش از حد رم موجود در برنامه، فتوشاپ یک سیستم حافظه مجازی نرم افزاری (VM) را پیاده سازی کرد. فتوشاپ از ماشین مجازی خود برای مدیریت دادههای سند، بهویژه دادههای تصویر، تمام تاریخچه و وضعیت لغو، و همچنین فضای ذخیرهسازی کار برای دستور فعلی استفاده میکند. همچنین برای ذخیره کردن بلوک های بزرگ داده مانند توضیحات قلم مو استفاده می شود، به طوری که آنها فقط باید یک بار سریال شوند.
به عنوان نمونه ای از یکی از جنبه هایی که توسط VM مدیریت می شود، داده های تصویر با استفاده از نمایش mipmap که مجموعه ای هرمی از کاشی ها است، ذخیره می شود و داده های تصویر را در محدوده ای از وضوح پایین تا بالا ارائه می دهد. این به فتوشاپ اجازه می دهد تا بر روی داده های وضوح مناسب برای پاسخ سریعتر هنگام بزرگنمایی یا نگاه کردن به یک پیش نمایش، در مقابل کوچکنمایی، کار کند.
در طول مقداردهی اولیه برنامه، فتوشاپ میزان RAM موجود را تعیین می کند. این یک قسمت را برای ذخیره داده ها در VM کنار می گذارد. RAM باقیمانده برای سایر نیازهای برنامه از طریق کتابخانه استاندارد زمان اجرا C++ در دسترس است. حافظه VM به صفحات تقسیم می شود. هر صفحه معمولاً چند برابر اندازه صفحه سخت افزاری دستگاه است. هنگامی که برای داده های تصویر استفاده می شود، حافظه به عنوان کاشی ارجاع داده می شود. کاشی یک مساحت مربع از پیکسل های یک لایه است که شامل مرزهای هندسی می شود. یک کاشی یک یا چند صفحه را مصرف می کند.
فتوشاپ یک یا چند فایل اسکرچ را برای ارائه پشتیبان مبتنی بر دیسک برای صفحات VM ایجاد می کند. این فایل های اسکرچ در سیستم فایل خصوصی مبدا ذخیره می شوند. اسکرین شات سلسله مراتب فایل نمونه ای از چنین فایل اسکرچ (با رنگ زرد برجسته شده) و فایل های دیگر را در طول جلسه ویرایش تصویر نشان می دهد. هر فایل اسکرچ می تواند حاوی بسیاری از صفحات VM باشد. هنگامی که ماشین مجازی به پشتیبان بیشتری نیاز دارد، فایلهای اسکرچ اضافی ایجاد میکند. همانطور که صفحات آزاد می شوند، فضای آنها در یک فایل اسکرچ می تواند برای صفحات جدید مجددا استفاده شود.
هنگام پردازش داده های تصویر، فتوشاپ روی کاشی ها تکرار می شود و محاسبات پیکسل را انجام می دهد. هر محاسبه می تواند به چندین کاشی اشاره کند. VM مسئول اطمینان از اینکه کاشی های مبدا و مقصد برای تکرار فعلی در حافظه هستند، آنها را از فایل های اولیه در صورت لزوم بارگیری می کند. در عین حال، میتواند صفحات را روی فایلهای اسکرچ هموار کند تا فضایی در حافظه ایجاد کند.
نتیجه گیری
در حالی که جزئیات پیاده سازی واقعی VM بسیار فراتر از محدوده این سند است (و همچنین برای Adobe اختصاصی است)، با توضیحات سطح بالای راه حل، ما شما را در موقعیتی قرار داده ایم که می توانید درک کنید که Photoshop چگونه می تواند با فایل های حجیم برخورد کنید سیستم فایل خصوصی مبدا با دسترسی خواندن و نوشتن بسیار کارآمد به فایلها جزء کلیدی راه حل است.
سپاسگزاریها
این پست وبلاگ توسط الیور اونتر ایکر و ریچل اندرو بررسی شده است. تشکر ویژه از راسل ویلیامز برای مستندات عالی خود در Photoshop VM.