Tìm hiểu cách Adobe giúp người dùng chỉnh sửa cả những tệp lớn nhất trên phiên bản web của ứng dụng Photoshop nổi tiếng.
Giới thiệu
(Bài viết này cũng được cung cấp dưới dạng video).
Vào năm 2021, Adobe cùng với kỹ thuật của Chrome đã đưa một phiên bản Photoshop lên web. Phần mềm này sử dụng WebAssembly theo cách sáng tạo với các tính năng như SIMD, bộ nhớ hiệu suất cao trong hệ thống tệp riêng tư gốc, không gian màu P3 cho canvas và Thành phần web với Lit. Trong bài viết này, chúng tôi muốn tập trung vào cách kỹ thuật Adobe Photoshop giải quyết việc xử lý các tệp lớn hơn mức có thể vừa với bộ nhớ. Và trong trường hợp của WebAssembly, cách Photoshop xử lý các tệp lớn hơn không gian địa chỉ 32 bit của wasm32.
Vấn đề
Việc mở tệp để chỉnh sửa sẽ tốn một dung lượng bộ nhớ lớn, nhiều hơn đáng kể so với việc mở tệp để xem. Các tệp được chỉnh sửa trong Photoshop thường cần nhiều bộ nhớ hơn so với lượng bộ nhớ mà người dùng có trên thiết bị, do phần mềm này có nhiều tính năng, các loại thiết kế và chỉnh sửa kỹ thuật số được sử dụng và khả năng của thiết bị của người dùng.
Định dạng tệp Photoshop lưu trữ dữ liệu ở chế độ nén không mất dữ liệu. Khi đọc tệp hoặc tài liệu, tất cả dữ liệu hình ảnh sẽ được giải nén để cho phép xử lý hiệu quả hơn. Do đó, dung lượng bộ nhớ cần thiết có thể nhiều hơn gấp vài lần so với dung lượng mà một tài liệu dùng trên ổ đĩa hoặc bộ nhớ trên đám mây.
Photoshop hỗ trợ lịch sử hoàn tác rất lớn. Nhiều thao tác trong Photoshop được gọi là hoạt động phá hoại. Tức là, việc thực hiện một chỉnh sửa như vẽ bằng bút vẽ sẽ dẫn đến dữ liệu pixel mới có thể lớn bằng dữ liệu pixel ban đầu. Việc thực hiện các chỉnh sửa này trong một phiên chỉnh sửa dài sẽ mang lại một lượng lớn dữ liệu pixel phải được giữ lại để hỗ trợ các thao tác hủy. Do đó, lịch sử có thể tăng lên vài trăm megabyte hoặc nhiều gigabyte dữ liệu.
Các thiết bị và nền tảng, cho dù là máy tính, thiết bị di động hay trình duyệt, tất cả đều quản lý bộ nhớ. Một số ứng dụng có dung lượng bộ nhớ lớn hơn những ứng dụng khác. Dung lượng bộ nhớ cũng thay đổi tuỳ theo thiết bị, như bạn biết khi đặt hàng máy tính hoặc thiết bị mới và chỉ định dung lượng Bộ nhớ truy xuất ngẫu nhiên (RAM) mong muốn. Nhiều nền tảng trong số này cũng hỗ trợ bộ nhớ ảo, cho phép ứng dụng sử dụng nhiều bộ nhớ hơn so với thực tế. Khả năng hỗ trợ này thay đổi tuỳ theo hệ điều hành và thời gian chạy, như trong trường hợp của WebAssembly, có thể khó truy cập hoặc sử dụng được đối với các ứng dụng. Ngoài ra, các hệ thống ảo hiện đại có giới hạn trên mà các yêu cầu của Photoshop có thể dễ dàng vượt qua.
Tốt nhất là các ứng dụng sẽ sử dụng mức bộ nhớ cần thiết. Việc này thường giúp họ mang lại hiệu suất tốt nhất cho người dùng. Tuy nhiên, nếu các trình xử lý này sử dụng quá nhiều bộ nhớ, thì các trình xử lý này có thể bị nền tảng thời gian chạy phạt hoặc có thể hết bộ nhớ, dẫn đến lỗi.
Theo lưu ý trước đây, vấn đề ban đầu mà Photoshop cần giải quyết là chỉnh sửa các tệp có độ phân giải in trên các phiên bản macOS trước đây, có kích thước tối đa là 1 MB cho hệ điều hành và tất cả các ứng dụng. Hình ảnh toàn trang 300 dpi bằng CMYK có kích thước khoảng 32 MB không nén.
Giải pháp
Để giải quyết vấn đề ứng dụng vượt quá dung lượng RAM hiện có, Photoshop đã triển khai một hệ thống bộ nhớ ảo (VM) phần mềm. Photoshop sử dụng máy ảo để quản lý dữ liệu tài liệu, đặc biệt là dữ liệu hình ảnh, tất cả lịch sử và trạng thái huỷ, cũng như bộ nhớ đang hoạt động của lệnh hiện tại. Lớp này cũng được dùng để lưu các khối dữ liệu lớn vào bộ nhớ đệm, chẳng hạn như mô tả bút vẽ để chúng chỉ cần được chuyển đổi tuần tự từ ổ đĩa một lần.
Ví dụ về một trong những khía cạnh do máy ảo quản lý, dữ liệu hình ảnh được lưu trữ bằng cách biểu diễn mipmap. Đây là một tập hợp các ô xếp hình kim tự tháp, cung cấp dữ liệu hình ảnh ở độ phân giải từ thấp đến cao. Điều này cho phép Photoshop hoạt động trên dữ liệu độ phân giải thích hợp để phản hồi nhanh hơn khi phóng to hoặc nhìn vào bản xem trước, thay vì thu nhỏ.
Trong quá trình khởi chạy ứng dụng, Photoshop xác định dung lượng RAM còn trống. Hệ thống này dành riêng một phần cho dữ liệu sẽ được lưu trữ trong máy ảo. Dung lượng RAM còn lại được cung cấp cho các nhu cầu khác của ứng dụng thông qua thư viện thời gian chạy C++ tiêu chuẩn. Bộ nhớ máy ảo được chia thành các trang. Mỗi trang thường là bội số của kích thước trang phần cứng cho thiết bị. Khi dùng cho dữ liệu hình ảnh, bộ nhớ được tham chiếu dưới dạng thẻ thông tin. Thẻ thông tin là một diện tích hình vuông các pixel của một lớp duy nhất bao gồm các giới hạn hình học. Một thẻ thông tin sử dụng một hoặc nhiều trang.
Photoshop tạo một hoặc nhiều tệp mã tạm thời để cung cấp bản sao lưu dựa trên ổ đĩa cho các trang máy ảo. Các tệp bản dựng này được lưu trữ trong hệ thống tệp riêng tư ở nguồn gốc. Ảnh chụp màn hình cho thấy một hệ phân cấp tệp mẫu của tệp cào như vậy (được đánh dấu bằng màu vàng) và các tệp khác trong một phiên chỉnh sửa hình ảnh. Mỗi tệp mã tạm thời có thể chứa nhiều trang máy ảo. Khi cần thêm dữ liệu sao lưu, máy ảo sẽ tạo thêm các tệp mã tạm thời. Khi các trang được giải phóng, không gian của chúng trong một tệp đầu có thể được sử dụng lại cho các trang mới.
Khi xử lý dữ liệu hình ảnh, Photoshop lặp lại các ô, thực hiện các phép tính pixel. Mỗi phép tính có thể tham chiếu đến nhiều ô. Máy ảo chịu trách nhiệm đảm bảo rằng các thẻ thông tin nguồn và đích của vòng lặp hiện tại đã có trong bộ nhớ, tải chúng từ các tệp đầu theo yêu cầu. Đồng thời, trình bổ trợ này có thể xoá dữ liệu các trang vào các tệp tạm thời để có thêm không gian lưu trữ trong bộ nhớ.
Kết luận
Mặc dù thông tin triển khai cụ thể của máy ảo sẽ nằm ngoài phạm vi của tài liệu này (và cũng thuộc quyền sở hữu riêng của Adobe), nhưng với nội dung mô tả cấp cao về giải pháp, chúng tôi đã đưa bạn vào vị trí mà bạn có thể hiểu cách Photoshop có thể xử lý các tệp lớn. Hệ thống tệp riêng tư gốc với quyền đọc và ghi với hiệu suất cao là các tệp là thành phần quan trọng của giải pháp này.
Xác nhận
Bài đăng trên blog này đã được Oliver Unter Ecker và Rachel Andrew đánh giá. Xin đặc biệt cảm ơn Russell Williams vì những tài liệu xuất sắc về máy ảo Photoshop.