ระบบนิเวศของ JavaScript ยังคงเห็นนักพัฒนาสร้างการใช้งานแบบเนทีฟของไลบรารีที่โดยทั่วไปถูกคอมไพล์ โดย fast-png นำเสนอโซลูชันที่เขียนด้วย JavaScript ล้วนสำหรับการเข้าและถอดรหัส PNG อย่างไรก็ตาม การสนทนาในชุมชนเผยให้เห็นความกังวลที่สำคัญเกี่ยวกับข้อกล่าวอ้างด้านประสิทธิภาพและข้อพิจารณาด้านความปลอดภัย
การตรวจสอบประสิทธิภาพจริง
แม้ว่าชื่อจะบ่งบอกถึงความเร็วที่เหนือกว่า แต่การทดสอบเปรียบเทียบจากชุมชนบ่งชี้ว่า fast-png อาจไม่สามารถทำได้ตามที่สัญญาไว้ นักพัฒนาหลายคนได้แบ่งปันการวิเคราะห์เปรียบเทียบที่แสดงให้เห็นว่าไลบรารีทางเลือกอื่นมีประสิทธิภาพดีกว่าอย่างมีนัยสำคัญ นักพัฒนาคนหนึ่งสังเกตว่า png-tools เร็วกว่า fast-png ประมาณ 2-6 เท่าสำหรับการเข้ารหัส ในขณะที่ยังมีคุณสมบัติเพิ่มเติมเช่นการเข้ารหัสแบบหลายเธรดและการรองรับการยกเลิก การใช้งานการบีบอัดพื้นฐานซึ่งพึ่งพาแพ็คเกจ pako แสดงให้เห็นช่องว่างด้านประสิทธิภาพที่สำคัญเมื่อเทียบกับการใช้งานแบบเนทีฟ โดยการทดสอบเปรียบเทียบเผยให้เห็นว่าการทำงาน deflate ของ zlib เร็วกว่าเกือบสองเท่า และประสิทธิภาพ inflate ของมันเร็วกว่าการใช้งาน JavaScript ของ pako ประมาณสามเท่า
Not a single benchmark on the page... Just sloppy TBH.
ความรู้สึกนี้สะท้อนความคับข้องใจของชุมชนในวงกว้างกับไลบรารีที่อ้างประสิทธิภาพโดยไม่มีหลักฐานสนับสนุน ผู้แสดงความคิดเห็นหลายคนชี้ให้เห็นว่าการตั้งชื่อไลบรารีว่า fast สร้างความคาดหวังที่ควรมีข้อมูลเปรียบเทียบรองรับ
การเปรียบเทียบประสิทธิภาพ
ประสิทธิภาพการบีบอัด (จากการทดสอบประสิทธิภาพของ pako)
- deflate-pako: 10.22 ครั้ง/วินาที
- deflate-zlib: 18.48 ครั้ง/วินาที (เร็วกว่าประมาณ 1.8 เท่า)
- inflate-pako: 134 ครั้ง/วินาที
- inflate-zlib: 402 ครั้ง/วินาที (เร็วกว่าประมาณ 3 เท่า)
ไลบรารี PNG ทางเลือกที่กล่าวถึง
- png-tools: เร็วกว่า fast-png 2-6 เท่าสำหรับการเข้ารหัส
- fpnge: ตัวเข้ารหัส C++ ที่ทำงานเร็วแต่มีอัตราการบีบอัดต่ำกว่า
- stb_image: ไลบรารีรูปภาพแบบ single-header สำหรับการพัฒนาเกม
- wuffs: ตัวถอดรหัสรูปแบบสื่อที่ปลอดภัยด้านหน่วยความจำจาก Google
ข้อพิจารณาด้านความปลอดภัยสำหรับตัวถอดรหัส JavaScript
นอกเหนือจากความกังวลด้านประสิทธิภาพ ผู้เชี่ยวชาญด้านความปลอดภัยในการสนทนาได้เน้นย้ำถึงความเสี่ยงที่อาจเกิดขึ้นเมื่อใช้ตัวถอดรหัสที่ใช้ JavaScript สำหรับข้อมูลนำเข้าที่ไม่น่าเชื่อถือ ในขณะที่การใช้งาน JavaScript ล้วนของ fast-png ลดเวกเตอร์การโจมตีบางอย่างเมื่อเทียบกับตัวห่อหุ้มโค้ดเนทีฟ ความแข็งแกร่งของการใช้งาน Inflator และส่วนประกอบอื่นๆ ยังคงเป็นข้อกังวล การสนทนาในชุมชนชี้ไปที่โครงการ Wuffs ของ Google ว่าเป็นโซลูชันที่อาจเป็นไปได้สำหรับการแยกวิเคราะห์รูปภาพที่ปลอดภัยยิ่งขึ้น ซึ่งออกแบบมาโดยเฉพาะเพื่อแก้ไขช่องโหว่ทั่วไปในตัวถอดรหัสรูปแบบสื่อ
การใช้งานทางเลือก
การสนทนาเผยให้เห็นทางเลือกหลายอย่างที่ควรพิจารณาขึ้นอยู่กับกรณีการใช้งานเฉพาะ สำหรับสภาพแวดล้อม JavaScript, png-tools ดูเหมือนจะให้ประสิทธิภาพที่ดีกว่าพร้อมคุณสมบัติเพิ่มเติม สำหรับนักพัฒนา C++ ที่มองหาทางเลือกอื่นนอกจาก libpng, fpnge ได้รับการแนะนำว่าเป็นตัวเข้ารหัส png ที่เร็วมากพร้อมอัตราส่วนการบีบอัดที่ต่ำกว่าเล็กน้อยแต่ทำงานได้เร็วกว่าอย่างมีนัยสำคัญ ไลบรารีแบบ single-header ของ stb_image ก็ได้รับการกล่าวถึงว่าเป็นโซลูชันที่ใช้กันอย่างแพร่หลายในการพัฒนาเกม โดยรองรับรูปแบบรูปภาพหลายแบบนอกเหนือจาก PNG
การสนทนาเกี่ยวกับ fast-png เน้นย้ำบทเรียนสำคัญสำหรับนักพัฒนาที่กำลังประเมินไลบรารี: มองให้ลึกกว่าชื่อทางการตลาดและประเมินลักษณะประสิทธิภาพจริง ผลกระทบด้านความปลอดภัย และชุดคุณสมบัติอย่างรอบคอบก่อนการผสานรวม แม้ว่าการใช้งาน JavaScript ล้วนจะให้ความสะดวกและความเข้ากันได้อย่างกว้างขวาง แต่มักมาพร้อมกับการแลกเปลี่ยนประสิทธิภาพที่มีความหมายเมื่อเทียบกับทางเลือกแบบเนทีฟ
อ้างอิง: fast-png: ตัวเข้าและถอดรหัสภาพ PNG ที่เขียนด้วย JavaScript ทั้งหมด