Adobe'nin, simgesel Photoshop uygulamasının web sürümündeki en büyük dosyaları bile düzenleme konusunda kullanıcılara nasıl izin verdiğini öğrenin.
Giriş
(Bu makale video biçiminde de mevcuttur.)
2021'de Adobe, Chrome mühendisliğiyle birlikte Photoshop'un bir sürümünü web'e sundu. Yazılım; SIMD, kaynak özel dosya sisteminde yüksek performanslı depolama, tuval için P3 renk alanı ve Lit ile Web Bileşenleri gibi özelliklerle WebAssembly'den yenilikçi bir şekilde yararlanır. Bu makalede, Adobe Photoshop mühendisliğinin belleğe sığabilecek daha büyük dosyalarla çalışmayı nasıl çözdüğüne odaklanmak istiyoruz. WebAssembly örneğinde, Photoshop'un wasm32'nin 32 bit adres alanından daha büyük dosyalarla nasıl çalıştığını da belirtelim.
Sorun
Bir dosyayı düzenlemek için açmak, dosyayı görüntülemek üzere açmaktan önemli ölçüde daha fazla miktarda bellek gerektirir. Yazılım tarafından sunulan birçok özellik, kullanılan dijital tasarım ve düzenleme türleri ve kullanıcı cihazlarının özellikleri nedeniyle, Photoshop'ta düzenlenen dosyalar genellikle kullanıcının cihazında bulunandan daha fazla bellek gerektirir.
Photoshop dosya biçimi, verileri kayıpsız sıkıştırma yöntemiyle depolar. Bir dosya veya belge okunurken, daha verimli işleme için tüm resim verileri açılır. Sonuç olarak, gereken bellek miktarı bir dokümanın diskte veya bulut depolama alanında kullandığı alandan birkaç kat fazla olabilir.
Photoshop çok geniş kapsamlı bir geri alma geçmişini destekler. Photoshop'taki birçok işleme yıkıcı işlemler deriz. Yani fırçayla boyama gibi bir düzenleme yapıldığında yeni piksel verileri ortaya çıkar ve bu veriler, orijinal piksel verileri kadar büyük olabilir. Bu düzenlemelerin uzun bir düzenleme oturumunda yapılması, geri alma işlemlerini desteklemek için saklanması gereken büyük miktarda piksel verisi üretir. Böylece, geçmiş birkaç yüz megabayta veya birçok gigabayta kadar çıkabilir.
Cihazlar ve platformlar (masaüstü makineler, mobil cihazlar veya tarayıcılar) belleği yönetir. Bazıları, uygulamalara kullanım alanı ne kadar bellek ayırdıkları konusunda diğerlerine göre daha cömerttir. Yeni bir bilgisayar veya cihaz sipariş ettiğinizde ve istediğiniz Rastgele Erişim Bellek (RAM) miktarını belirttiğinizde, bellek miktarı da cihazdan cihaza değişiklik gösterir. Bu platformların birçoğu, bir uygulamanın fiziksel olarak kullanılabilir olandan daha fazla bellek kullanmasına olanak tanıyan sanal belleği de desteklemektedir. Bu destek, WebAssembly'de olduğu gibi işletim sistemine ve çalışma zamanına göre değişiklik gösterir ve uygulamalar tarafından erişilebilir veya kullanılabilir durumda olmayabilir. Hepsinden önemlisi, modern sanal sistemlerin Photoshop gereksinimlerinin kolayca aşılması gereken üst sınırları vardır.
İdeal olarak uygulamalar ihtiyaç duydukları kadar bellek kullanır. Bu, genellikle kullanıcılarına en iyi performansı sunmalarını sağlar. Bununla birlikte, çok fazla bellek kullanırlarsa çalışma zamanı platformu tarafından cezalandırılabilir veya belleği tükenebilir ve bu da hatalarla sonuçlanabilir.
Geçmişte de belirttiğimiz gibi, Photoshop'un çözmesi gereken asıl sorun, işletim sistemi ve tüm uygulamalarda macOS'in eski sürümlerinde 1 MB gibi düşük bir çözünürlüğe sahip dosyaları düzenlemekti. CMYK biçiminde 300 dpi tam sayfa resim, sıkıştırılmamış haliyle yaklaşık 32 MB'tır.
Çözüm
Uygulamanın mevcut RAM miktarını aşması sorununu çözmek için Photoshop bir yazılım sanal bellek sistemi (VM) uyguladı. Photoshop, sanal makinesini belge verilerini, özellikle de resim verilerini, tüm geri alma geçmişi ve durumunu ve geçerli komut için çalışan depolama alanını yönetmek için 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 verilerin diskten yalnızca bir kez serileştirilmesi gerekir.
Sanal makine tarafından yönetilen yönlerden birine örnek olarak, resim verileri bir mipmap temsili kullanılarak depolanır. Bu gösterim, piramit biçimli bir kutudur ve düşük ile yüksek çözünürlük aralığında görüntü verileri sağlar. Böylece Photoshop, yakınlaştırıldığında veya önizlemeye bakarken ya da uzaklaştırıldığında daha hızlı yanıt almak için uygun çözünürlük verileri üzerinde çalışır.
Uygulamanın başlatılması sırasında Photoshop, kullanılabilir RAM miktarını belirler. Verilerin bir kısmını sanal makinede depolamak için ayırır. Kalan RAM, standart C++ çalışma zamanı kitaplığı üzerinden diğer uygulama ihtiyaçları için kullanılabilir. Sanal makine belleği sayfalara ayrılır. Her sayfa genellikle cihaza ait donanım sayfası boyutunun bir katıdır. Resim verileri için kullanıldığında bellek karo olarak belirtilir. Parça, tek bir katmanın geometri sınırları da dahil olmak üzere piksellerden oluşan kare alanıdır. Karo bir veya daha fazla sayfa tüketir.
Photoshop, sanal makine sayfaları için disk tabanlı yedekleme sağlamak amacıyla bir veya daha fazla çalışma dosyası oluşturur. Bu çalışma dosyaları, kaynak gizli dosya sisteminde depolanır. Ekran görüntüsünde, bir resim düzenleme oturumu sırasında oluşturulan bir karalama dosyasının (sarı renkle vurgulanmıştır) ve diğer dosyaların örnek bir dosya hiyerarşisi gösterilmektedir. Her çalışma dosyası çok sayıda sanal makine sayfası içerebilir. Sanal makine daha fazla desteğe ihtiyaç duyduğunda ek çalışma dosyaları oluşturur. Sayfalar boşa çıktıkça, eski bir dosyadaki alanları yeni sayfalar için yeniden kullanılabilir.
Photoshop, resim verilerini işlerken döşemelerin ü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 olmasını sağlamaktan ve gerektiğinde bunları sıfırdan dosyalardan yüklemekten sorumludur. Aynı zamanda, bellekte yer açmak için sayfaları karalama dosyalarıyla boşaltabilir.
Sonuçlar
Sanal makinenin somut uygulama ayrıntıları bu belgenin kapsamının çok ötesine geçer (ve Adobe'ye aittir). Ancak çözümün üst düzey açıklaması da sizi Photoshop'un büyük dosyalarla nasıl başa çıkabileceğini anlayabileceğiniz bir konuma getirdik. Kaynak gizli dosya sistemi, yüksek performanslı okuma ve yazma erişimiyle bu çözümün önemli bir bileşenidir.
Teşekkür
Bu blog yayını Oliver Unter Ecker ve Rachel Andrew tarafından incelendi. Photoshop sanal makinesiyle ilgili mükemmel belgeleri için Russell Williams'a özel teşekkürlerimizi sunarız.