Adobe'ın, ikonik Photoshop uygulamasının web sürümünde kullanıcıların en büyük dosyaları bile düzenlemesine nasıl izin verdiğini öğrenin.
Giriş
(Bu makaleyi video olarak da inceleyebilirsiniz.)
2021'de Adobe, Chrome mühendisliğiyle birlikte Photoshop'un bir sürümünü web'e getirdi. Yazılım; SIMD, orijinal özel dosya sisteminde yüksek performanslı depolama, tuval için P3 renk alanı ve Lit ile Web Bileşenleri gibi özelliklerle WebAssembly'i yenilikçi bir şekilde kullanır. Bu makalede, Adobe Photoshop mühendisliğinin belleğe sığabilecekten daha büyük dosyalarla çalışma sorununu nasıl çözdüğüne odaklanmak istiyoruz. WebAssembly söz konusu olduğunda ise Photoshop, wasm32'nin 32 bit adres alanından daha büyük dosyalarla nasıl çalışır?
Sorun
Bir dosyayı düzenlemek için açmak, görüntülemek için açmaktan çok daha fazla bellek gerektirir. Photoshop'ta düzenlenen dosyalar, yazılımın sunduğu birçok özellik, kullanıldığı dijital tasarım ve düzenleme türleri ve kullanıcı cihazlarının özellikleri nedeniyle genellikle kullanıcının cihazında mevcut olandan daha fazla bellek gerektirir.
Photoshop dosya biçimi, verileri kayıpsız sıkıştırma ile depolar. Bir dosya veya doküman okunduğunda, daha verimli bir şekilde işlenebilmesi için tüm resim verilerinin sıkıştırması kaldırılır. Sonuç olarak, gereken bellek miktarı, bir belgenin diskte veya bulut depolama alanında kullandığı alandan birkaç kat daha fazla olabilir.
Photoshop, çok büyük bir geri alma geçmişini destekler. Photoshop'taki birçok işlem, bozucu işlem olarak adlandırılır. Yani fırçayla boyama gibi bir düzenleme yaptığınızda, orijinal piksel verileri kadar büyük olabilecek yeni piksel verileri elde edersiniz. Bu düzenlemelerin uzun bir düzenleme oturumunda yapılması, geri alma işlemlerini desteklemek için saklanması gereken büyük miktarlarda piksel verisi oluşturur. Bu nedenle, geçmiş birkaç yüz megabayt veya birçok gigabayt veriye ulaşabilir.
Masaüstü bilgisayarlar, mobil cihazlar veya tarayıcılar gibi cihazlar ve platformların tümü belleği yönetir. Bazıları, uygulamalara ne kadar bellek sunduğu konusunda diğerlerinden daha cömerttir. Yeni bir bilgisayar veya cihaz sipariş ettiğinizde ve istediğiniz rastgele erişim belleği (RAM) miktarını belirttiğinizde bildiğiniz gibi bellek miktarı da cihaza göre değişir. Bu platformların çoğu, bir uygulamanın fiziksel olarak mevcut olandan daha fazla bellek kullanmasına olanak tanıyan sanal belleği de destekler. Bu destek, işletim sistemine ve çalışma zamanına göre değişir. WebAssembly'de olduğu gibi, uygulamalar tarafından kolayca erişilebilir veya kullanılabilir olmayabilir. Ayrıca, modern sanal sistemlerin Photoshop gereksinimleri tarafından kolayca aşılan üst sınırları vardır.
İdeal olarak, uygulamalar ihtiyaç duydukları kadar bellek kullanır. Bu sayede genellikle kullanıcılarına en iyi performansı sunabilirler. Ancak çok fazla bellek kullanırsa çalışma zamanı platformu tarafından cezalandırılabilir veya belleği tükenerek hatalara neden olabilir.
Photoshop'un çözmesi gereken asıl sorun, macOS'in eski sürümlerinde baskı çözünürlüğü dosyalarını düzenlemekti. İşletim sistemi ve tüm uygulamalar için dosya boyutu 1 MB'a kadar düşüyordu. CMYK'de 300 dpi tam sayfa bir resim, sıkıştırılmamış halde yaklaşık 32 MB'tır.
Çözüm
Uygulamanın kullanılabilir RAM miktarını aşması sorununu çözmek için Photoshop, bir yazılım sanal bellek sistemi (VM) uyguladı. Photoshop, belge verilerini (özellikle resim verilerini), tüm geri alma geçmişini ve durumunu ve mevcut komutun çalışma depolama alanını yönetmek için sanal makinesini kullanır. Ayrıca, fırça açıklamaları gibi büyük veri bloklarını önbelleğe almak için de kullanılır. Böylece, bu blokların diskten yalnızca bir kez serileştirilmesi gerekir.
Sanal makine tarafından yönetilen özelliklerden biri olarak görüntü verileri, düşükten yükseğe kadar çeşitli çözünürlüklerde görüntü verileri sağlayan piramit şeklinde bir karo grubu olan mipmap gösterimi kullanılarak depolanır. Bu sayede Photoshop, yakınlaştırıldığında veya önizlemeye bakıldığında daha hızlı yanıt vermek için uygun çözünürlük verilerini kullanabilir.
Photoshop, uygulamanın başlatılması sırasında ne kadar RAM'in kullanılabileceğini belirler. Sanal makinede depolanacak veriler için bir bölüm ayırır. Kalan RAM, standart C++ çalışma zamanı kitaplığı aracılığıyla diğer uygulama ihtiyaçları için kullanılabilir. Sanal makine belleği sayfalara ayrılır. Her sayfa genellikle cihazın donanım sayfa boyutunun bir katı olur. Bellek, resim verileri için kullanıldığında karo olarak adlandırılır. Karo, geometri sınırları dahil olmak üzere tek bir katmanın piksellerinden oluşan kare bir alandır. Kartlar bir veya daha fazla sayfa kaplar.
Photoshop, VM sayfaları için disk tabanlı destek sağlamak üzere bir veya daha fazla taslak dosyası oluşturur. Bu taslak dosyalar orijinal özel dosya sisteminde depolanır. Ekran görüntüsünde, bir resim düzenleme oturumundaki bu tür bir taslak dosyanın (sarı renkle vurgulanmıştır) ve diğer dosyaların örnek dosya hiyerarşisi gösterilmektedir. Her taslak dosyası birçok sanal makine sayfası içerebilir. Sanal makinenin daha fazla desteğe ihtiyacı olduğunda ek taslak dosyalar oluşturur. Sayfalar boşaldığında, bir taslak dosyasındaki alanları yeni sayfalar için yeniden kullanılabilir.
Photoshop, resim verilerini işlerken karolar üzerinde iterasyon yaparak piksel hesaplamaları gerçekleştirir. Her hesaplama birden fazla karoya referans verebilir. Sanal makine, geçerli iterasyonun kaynak ve hedef karolarının bellekte olduğundan emin olmakla ve gerektiğinde bunları sıfırdan dosyalardan yüklemekle sorumludur. Aynı zamanda, bellekte yer açmak için sayfaları geçici dosyalara aktarabilir.
Sonuçlar
Sanal makinenin uygulama ayrıntıları bu dokümanın kapsamının çok ötesine geçse de (ayrıca Adobe'a özeldir) çözümün üst düzey açıklamasını sunarak Photoshop'un büyük dosyalarla nasıl başa çıkabileceğini anlayabilmenizi sağladık. Dosyalara yüksek performanslı okuma ve yazma erişimi sunan kaynak özel dosya sistemi, çözümün önemli bir bileşenidir.
Teşekkür ederiz
Bu blog yayını Oliver Unter Ecker ve Rachel Andrew tarafından incelendi. Photoshop sanal makinesi ile ilgili mükemmel dokümanları için Russell Williams'a özel teşekkürler.