Pelajari cara Adobe mengizinkan pengguna mengedit file terbesarnya di versi web, yaitu aplikasi Photoshop yang ikonis.
Pengantar
(Artikel ini juga tersedia dalam bentuk video.)
Pada tahun 2021, Adobe bersama tim engineering Chrome menghadirkan Photoshop versi di web. Software ini memanfaatkan WebAssembly secara inovatif dengan fitur seperti SIMD, penyimpanan berperforma tinggi dalam sistem file pribadi asal, ruang warna P3 untuk kanvas, dan Komponen Web dengan Lit. Dalam artikel ini, kami ingin berfokus pada cara rekayasa Adobe Photoshop menyelesaikan pekerjaan dengan file yang lebih besar dari yang dapat ditampung di dalam memori. Dan, pada kasus WebAssembly, bagaimana Photoshop bekerja dengan file yang lebih besar dari ruang alamat 32-bit wasm32.
Permasalahan
Membuka file untuk pengeditan memerlukan memori yang besar, jauh lebih banyak daripada membuka file untuk ditampilkan. File yang diedit di Photoshop sering kali memerlukan lebih banyak memori daripada yang tersedia bagi pengguna di perangkatnya, karena banyaknya fitur yang ditawarkan oleh software tersebut, jenis desain dan pengeditan digital yang digunakan, serta kemampuan perangkat pengguna.
Format file Photoshop menyimpan data dengan kompresi lossless. Saat file atau dokumen dibaca, semua data gambar didekompresi untuk memungkinkan pemrosesan yang lebih efisien. Akibatnya, jumlah memori yang diperlukan bisa beberapa kali lebih banyak daripada jumlah ruang yang digunakan dokumen pada disk atau penyimpanan cloud.
Photoshop mendukung histori urungkan yang sangat besar. Banyak operasi di Photoshop disebut sebagai operasi destruktif. Artinya, melakukan pengeditan seperti melukis dengan kuas akan menghasilkan data piksel baru yang bisa sama besarnya dengan data piksel aslinya. Melakukan pengeditan ini dalam sesi pengeditan yang panjang menghasilkan data piksel dalam jumlah besar yang harus disimpan untuk mendukung operasi urungkan. Dengan demikian, histori dapat mencapai beberapa ratus megabyte atau beberapa gigabyte data.
Perangkat dan platform, baik itu komputer desktop, perangkat seluler, atau browser, semuanya mengelola memori. Beberapa di antaranya lebih murah daripada yang lain dalam hal banyaknya memori yang mereka sediakan untuk aplikasi. Jumlah memori juga bervariasi dari satu perangkat ke perangkat lainnya, seperti yang Anda ketahui ketika memesan komputer atau perangkat baru dan menentukan jumlah Random Access Memory (RAM) yang diinginkan. Banyak dari platform ini juga mendukung memori virtual, yang memungkinkan aplikasi menggunakan lebih banyak memori daripada yang tersedia secara fisik. Dukungan ini bervariasi menurut sistem operasi dan runtime, seperti dalam kasus WebAssembly, mungkin tidak mudah diakses atau digunakan oleh aplikasi. Selain itu, sistem virtual modern memiliki batas maksimal yang mudah dilampaui oleh persyaratan Photoshop.
Idealnya, aplikasi akan menggunakan memori sebanyak yang mereka butuhkan. Hal ini umumnya memungkinkan ekstensi tersebut memberikan performa terbaik kepada pengguna. Namun, jika mereka menggunakan terlalu banyak memori, mereka dapat dihukum oleh platform {i>runtime<i} atau mungkin kehabisan memori, yang mengakibatkan kegagalan.
Sebagai catatan historis, masalah awal yang perlu diselesaikan Photoshop adalah mengedit file resolusi cetak pada versi awal macOS, hanya 1 MB untuk OS dan semua aplikasi. Gambar halaman penuh 300 dpi dalam CMYK berukuran sekitar 32 MB tanpa kompresi.
Solusi
Untuk mengatasi masalah aplikasi yang melebihi jumlah RAM yang tersedia, Photoshop mengimplementasikan sistem memori virtual (VM) software. Photoshop menggunakan VM-nya untuk mengelola data dokumen, terutama data gambar, semua histori dan status urungkan, serta penyimpanan yang berfungsi untuk perintah saat ini. {i>Cache<i} juga digunakan untuk meng-cache blok data besar seperti deskripsi kuas sehingga hanya perlu diserialisasi dari disk satu kali.
Sebagai contoh dari salah satu aspek yang dikelola oleh VM, data gambar disimpan menggunakan representasi mipmap, yang merupakan kumpulan ubin piramida, yang memberikan data gambar pada rentang resolusi rendah hingga tinggi. Hal ini memungkinkan Photoshop beroperasi pada data resolusi yang sesuai untuk respons yang lebih cepat saat memperbesar atau melihat pratinjau, dibandingkan saat diperkecil.
Selama inisialisasi aplikasi, Photoshop menentukan berapa banyak RAM yang tersedia. Ia menyisihkan satu bagian untuk data yang akan disimpan di VM. RAM yang tersisa tersedia untuk kebutuhan aplikasi lain melalui library runtime C++ standar. Memori VM dipecah menjadi beberapa halaman. Setiap laman biasanya merupakan kelipatan dari ukuran laman perangkat keras untuk perangkat tersebut. Saat digunakan untuk data gambar, memori dirujuk sebagai petak. Kartu adalah area persegi piksel dari satu lapisan yang mencakup batas geometri. Kartu menggunakan satu atau beberapa halaman.
Photoshop membuat satu atau beberapa file scratch untuk menyediakan dukungan berbasis disk untuk halaman VM. File scratch ini disimpan di sistem file pribadi asal. Screenshot menampilkan hierarki file contoh dari file coretan tersebut (disorot dengan warna kuning) dan file lainnya selama sesi pengeditan gambar. Setiap file awal dapat berisi banyak halaman VM. Saat memerlukan lebih banyak dukungan, VM akan membuat file awal tambahan. Saat halaman dibebaskan, ruangnya dalam file gosok dapat digunakan kembali untuk halaman baru.
Saat memproses data gambar, Photoshop akan melakukan iterasi pada petak, melakukan penghitungan piksel. Setiap penghitungan dapat mereferensikan beberapa kartu. VM bertanggung jawab untuk memastikan bahwa kartu sumber dan tujuan untuk iterasi saat ini ada dalam memori, memuatnya dari file awal sesuai kebutuhan. Pada saat yang sama, fitur ini dapat menghapus halaman ke file awal untuk mengosongkan ruang di memori.
Kesimpulan
Meskipun detail implementasi konkret VM akan jauh melampaui cakupan dokumen ini (dan juga merupakan eksklusif Adobe), dengan deskripsi solusi tingkat tinggi, kami menempatkan Anda pada posisi di mana Anda dapat memahami bagaimana Photoshop dapat menangani file besar. Sistem file pribadi asal dengan akses baca dan tulis yang berperforma tinggi ke file adalah komponen utama dari solusi ini.
Ucapan terima kasih
Postingan blog ini diulas oleh Oliver Unter Ecker dan Rachel Andrew. Terima kasih khusus kepada Russell Williams atas dokumentasinya yang luar biasa tentang VM Photoshop.