ดูวิธีที่ Adobe ช่วยให้ผู้ใช้แก้ไขไฟล์ขนาดใหญ่ที่สุดได้บนแอป Photoshop อันโด่งดังเวอร์ชันเว็บ
บทนำ
(บทความนี้มีให้บริการในรูปแบบวิดีโอด้วย)
ในปี 2021 Adobe ร่วมกับทีมวิศวกรของ Chrome ได้นำ Photoshop เวอร์ชันหนึ่งมาสู่เว็บ ซอฟต์แวร์นี้ใช้ WebAssembly อย่างสร้างสรรค์ด้วยฟีเจอร์ต่างๆ เช่น SIMD, พื้นที่เก็บข้อมูลประสิทธิภาพสูงในระบบไฟล์ส่วนตัวของต้นทาง, พื้นที่สี P3 สำหรับ Canvas และ Web Components ที่มี Lit ในบทความนี้ เราจะเน้นที่วิธีที่ทีมวิศวกรของ Adobe Photoshop แก้ปัญหาการทำงานกับไฟล์ที่มีขนาดใหญ่เกินกว่าหน่วยความจำจะรองรับ และในกรณีของ WebAssembly วิธีที่ Photoshop ทำงานกับไฟล์ที่มีขนาดใหญ่กว่าพื้นที่ที่อยู่ 32 บิตของ wasm32
ปัญหา
การเปิดไฟล์เพื่อแก้ไขต้องใช้หน่วยความจำจำนวนมาก ซึ่งมากกว่าการเปิดไฟล์เพื่อดู ไฟล์ที่แก้ไขใน Photoshop มักต้องใช้หน่วยความจำมากกว่าที่ผู้ใช้มีในอุปกรณ์ เนื่องจากซอฟต์แวร์มีฟีเจอร์มากมาย ประเภทการออกแบบและการแก้ไขแบบดิจิทัลที่ใช้ซอฟต์แวร์นี้ และความสามารถของอุปกรณ์ของผู้ใช้
รูปแบบไฟล์ Photoshop จะจัดเก็บข้อมูลด้วยการบีบอัดแบบไม่สูญเสียคุณภาพ เมื่ออ่านไฟล์หรือเอกสาร ระบบจะยกเลิกการบีบอัดข้อมูลรูปภาพทั้งหมดเพื่อให้ประมวลผลได้อย่างมีประสิทธิภาพมากขึ้น ด้วยเหตุนี้ ปริมาณหน่วยความจำที่ต้องการจึงอาจมากกว่าพื้นที่ที่เอกสารใช้บนดิสก์หรือในระบบพื้นที่เก็บข้อมูลระบบคลาวด์หลายเท่า
Photoshop รองรับประวัติการเลิกทำจำนวนมาก การดำเนินการหลายอย่างใน Photoshop เรียกว่าการดำเนินการแบบทำลาย กล่าวคือ การแก้ไข เช่น การวาดด้วยแปรง จะทำให้ข้อมูลพิกเซลใหม่มีขนาดใหญ่เท่ากับข้อมูลพิกเซลเดิม การแก้ไขเหล่านี้ในเซสชันการแก้ไขที่ยาวนานจะทำให้เกิดข้อมูลพิกเซลจำนวนมากที่ต้องเก็บไว้เพื่อรองรับการดำเนินการเลิกทำ ด้วยเหตุนี้ ประวัติจึงอาจมีข้อมูลเพิ่มขึ้นเป็นหลายร้อยเมกะไบต์หรือหลายกิกะไบต์
อุปกรณ์และแพลตฟอร์มทั้งหมด ไม่ว่าจะเป็นเครื่องเดสก์ท็อป อุปกรณ์เคลื่อนที่ หรือเบราว์เซอร์ ต่างก็จัดการหน่วยความจำ บางรุ่นให้หน่วยความจำแก่แอปพลิเคชันมากกว่ารุ่นอื่นๆ ปริมาณหน่วยความจำจะแตกต่างกันไปในแต่ละอุปกรณ์ ดังที่คุณทราบเมื่อสั่งซื้อคอมพิวเตอร์หรืออุปกรณ์ใหม่และระบุปริมาณหน่วยความจำเข้าถึงแบบสุ่ม (RAM) ที่ต้องการ แพลตฟอร์มเหล่านี้จำนวนมากยังรองรับหน่วยความจำเสมือนด้วย ซึ่งช่วยให้แอปพลิเคชันใช้หน่วยความจําได้มากกว่าที่หน่วยความจําที่มีอยู่จริง การรองรับนี้แตกต่างกันไปตามระบบปฏิบัติการและรันไทม์ เช่น ในกรณีของ WebAssembly แอปพลิเคชันอาจเข้าถึงหรือใช้งานไม่ได้ในทันที นอกจากนี้ ระบบเสมือนสมัยใหม่ยังมีขีดจำกัดสูงสุดที่เกินข้อกำหนดของ Photoshop ได้โดยง่าย
โดยหลักการแล้ว แอปพลิเคชันจะใช้หน่วยความจำเท่าที่จำเป็น ซึ่งโดยทั่วไปจะช่วยให้สามารถมอบประสิทธิภาพที่ดีที่สุดแก่ผู้ใช้ อย่างไรก็ตาม หากใช้หน่วยความจํามากเกินไป แพลตฟอร์มรันไทม์อาจลงโทษหรือหน่วยความจําอาจหมดลง ซึ่งส่งผลให้เกิดความล้มเหลว
ข้อมูลย้อนหลังคือปัญหาเดิมที่ Photoshop ต้องแก้ไขคือการแก้ไขไฟล์ความละเอียดระดับสิ่งพิมพ์ใน macOS เวอร์ชันแรกๆ ซึ่งมีขนาดเพียง 1 MB สำหรับระบบปฏิบัติการและแอปพลิเคชันทั้งหมด รูปภาพขนาดเต็ม 300 dpi ใน CMYK จะมีขนาดประมาณ 32 MB เมื่อไม่ได้บีบอัด
การแก้ปัญหา
Photoshop ใช้ระบบหน่วยความจำเสมือน (VM) ของซอฟต์แวร์เพื่อแก้ปัญหาแอปใช้ RAM เกินจำนวนที่มี Photoshop ใช้ VM เพื่อจัดการข้อมูลเอกสาร โดยเฉพาะข้อมูลรูปภาพ ประวัติการเลิกทำและสถานะทั้งหมด รวมถึงพื้นที่เก็บข้อมูลสำหรับการทำงานกับคำสั่งปัจจุบัน นอกจากนี้ยังใช้แคชข้อมูลขนาดใหญ่ เช่น คำอธิบายแปรง เพื่อให้ต้องจัดเรียงจากดิสก์เพียงครั้งเดียว
ตัวอย่างหนึ่งของแง่มุมที่ VM จัดการคือ ข้อมูลรูปภาพจะจัดเก็บโดยใช้การแสดงผล mipmap ซึ่งเป็นชุดไทล์รูปปิรามิดที่ให้ข้อมูลรูปภาพในระดับความละเอียดต่ำไปจนถึงสูง วิธีนี้ช่วยให้ Photoshop ทำงานกับข้อมูลความละเอียดที่เหมาะสมเพื่อให้ตอบสนองได้เร็วขึ้นเมื่อซูมเข้าหรือดูตัวอย่าง เมื่อเทียบกับการซูมออก
ในระหว่างการเริ่มต้นแอปพลิเคชัน Photoshop จะกำหนดปริมาณ RAM ที่ใช้ได้ โดยระบบจะจัดสรรพื้นที่ส่วนหนึ่งสำหรับจัดเก็บข้อมูลใน VM RAM ที่เหลือจะพร้อมใช้งานสำหรับแอปพลิเคชันอื่นๆ ผ่านไลบรารีรันไทม์ C++ มาตรฐาน หน่วยความจําของ VM จะแบ่งออกเป็นหน้า โดยปกติแล้วแต่ละหน้าจะเป็นจำนวนที่คูณกับขนาดหน้าฮาร์ดแวร์ของอุปกรณ์ เมื่อใช้กับข้อมูลรูปภาพ ระบบจะอ้างอิงหน่วยความจำเป็นไทล์ ไทล์คือพื้นที่สี่เหลี่ยมจัตุรัสของพิกเซลในเลเยอร์เดียว ซึ่งรวมถึงขอบเขตเรขาคณิต ไทล์ใช้หน้าเว็บอย่างน้อย 1 หน้า
Photoshop จะสร้างไฟล์พักชั่วคราวอย่างน้อย 1 ไฟล์เพื่อให้การสำรองข้อมูลแบบดิสก์สำหรับหน้า VM ไฟล์ขยะเหล่านี้จะจัดเก็บไว้ในระบบไฟล์ส่วนตัวต้นทาง ภาพหน้าจอแสดงลําดับชั้นไฟล์ตัวอย่างของไฟล์ร่างดังกล่าว (ไฮไลต์ด้วยสีเหลือง) และไฟล์อื่นๆ ระหว่างเซสชันการแก้ไขรูปภาพ ไฟล์ทดสอบแต่ละไฟล์อาจมีหน้า VM หลายหน้า เมื่อ VM ต้องการพื้นที่สำรองเพิ่มเติม ระบบจะสร้างไฟล์สแครชเพิ่มเติม เมื่อมีการลบหน้าเว็บออก ระบบจะนำพื้นที่ว่างในไฟล์ขยะมาใช้กับหน้าเว็บใหม่ได้
เมื่อประมวลผลข้อมูลรูปภาพ Photoshop จะวนซ้ำผ่านไทล์ต่างๆ เพื่อคำนวณพิกเซล การคํานวณแต่ละรายการจะอ้างอิงข้อมูลหลายรายการในการ์ดได้ VM มีหน้าที่ตรวจสอบว่าการ์ดต้นทางและปลายทางสำหรับการวนซ้ำปัจจุบันอยู่ในหน่วยความจำ โดยโหลดการ์ดจากไฟล์เริ่มต้นตามที่จำเป็น ในขณะเดียวกันก็สามารถล้างหน้าเว็บไปยังไฟล์พักชั่วคราวเพื่อเพิ่มพื้นที่ในหน่วยความจำ
สรุป
แม้ว่ารายละเอียดการใช้งานจริงของ VM จะนอกเหนือขอบเขตของเอกสารนี้ (และยังเป็นกรรมสิทธิ์ของ Adobe ด้วย) แต่คำอธิบายระดับสูงของโซลูชันนี้จะช่วยให้คุณเข้าใจวิธีที่ Photoshop จัดการกับไฟล์ขนาดใหญ่ ระบบไฟล์ส่วนตัวต้นทางที่มีสิทธิ์อ่านและเขียนไฟล์ที่มีประสิทธิภาพสูงเป็นองค์ประกอบหลักของโซลูชัน
ขอขอบคุณ
บล็อกโพสต์นี้ได้รับการตรวจสอบโดย Oliver Unter Ecker และ Rachel Andrew ขอขอบคุณ Russell Williams เป็นอย่างยิ่งสำหรับเอกสารประกอบที่ยอดเยี่ยมเกี่ยวกับ VM ของ Photoshop