ภูมิหลังการเกิด
คอมไพเลอร์ Flash ของ Adobe (ASC, ActionScript Compiler) มีประสิทธิภาพ "เมื่อวาน" เกินไป และเครื่องเสมือน Flash ยังมีพื้นที่อีกมากสำหรับการปรับปรุงประสิทธิภาพ Flash มักถูกมองว่าเป็นของเล่นหรือเรียกอีกอย่างว่า CPU hog โดยทั่วไปแล้ว เราไม่ค่อยเพิ่มประสิทธิภาพ SWF ด้วยตนเอง ในกรณีส่วนใหญ่ ไฟล์ SWF สามารถทำงานได้ดี แต่เมื่อขนาดของไฟล์ SWF มีขนาดใหญ่เกินไป เวลาโหลดนานเกินไป หรือเวลาดำเนินการโค้ดนานเกินไป ส่งผลให้เฟรม อัตราที่สูงเกินไป เมื่อต่ำ เราต้องพิจารณาเพิ่มประสิทธิภาพ SWF เช่น การปรับปรุงโค้ดและการบีบอัดทรัพยากรคงที่ (รูปภาพ วิดีโอ ฯลฯ) อย่างไรก็ตาม การปรับปรุงประสิทธิภาพที่เกิดจากการเพิ่มประสิทธิภาพด้วยตนเองนั้นมีจำกัดมาก งานเพิ่มประสิทธิภาพอื่นๆ ควรปล่อยให้เป็นหน้าที่ของคอมไพเลอร์ โชคดีที่เฟรมเวิร์ก Apparat สามารถช่วยให้เราหลุดพ้นจากฝันร้ายของการเพิ่มประสิทธิภาพด้วยตนเองได้ ไม่เพียงแค่นั้น SWF ที่ปรับให้เหมาะสมทั้งหมดในอนาคตสามารถทำได้ ได้รับการปรับให้เหมาะสมจากมัน Joa Ebert ผู้เขียน Apparat มีข้อมูลเชิงลึกอย่างลึกซึ้งเกี่ยวกับการเพิ่มประสิทธิภาพการทำงานของ Flash ในการประชุม FlashAndTheCity ปีนี้ ผลงานที่โดดเด่นของ joa ทำให้เขาได้รับรางวัลสองรางวัล ได้แก่ "The Most Genius Flash Developer in 2010" และ "The Most Outstanding Contributor in 2010" " รางวัลใหญ่.
สร้างสภาพแวดล้อม
กรอบงาน Apparat เขียนผ่าน Scale ก่อนที่จะฝึกฝนคุณต้องติดตั้ง Scala 2.8.0 และ Java 1.6 การติดตั้ง 7-zip เป็นทางเลือก หลังจากตั้งค่าสภาพแวดล้อมการทำงานพื้นฐานเหล่านี้ (ซึ่งจำเป็นต้องเพิ่มในตัวแปรสภาพแวดล้อม PATH) คุณจะสามารถดาวน์โหลดแพ็คเกจการติดตั้งล่าสุด (ปัจจุบันคือ 1.0RC8) ได้จาก Google Code หลังจากดาวน์โหลดแล้ว ให้แตกไฟล์ไปยังโฟลเดอร์ใหม่ดังนี้
Apparat มีเครื่องมือบรรทัดคำสั่งมากมาย เช่น tdsi, สตริปเปอร์, ตัวลด ฯลฯ รวมถึง ActionScript API พิเศษบางตัว (มีอยู่ในไฟล์ SWC) ต่อไปเรามาดูกันว่า Apparat เพิ่มความเร็ว Flash ได้อย่างไร
ปรับไบต์โค้ดให้เหมาะสม
ฟังก์ชันหลักของ Apparat คือ TAAS (Three Address ActionScript Compiler) TAAS จะไม่เปลี่ยนแปลงบรรทัดใดๆ ของ ActionScript สามารถรับการปรับปรุงประสิทธิภาพได้อย่างมากโดยใช้เทคนิคการปรับให้เหมาะสมแบบธรรมดา Apparat แตกต่างจาก ASC คอมไพเลอร์ของ Adobe โดยจะวิเคราะห์ จัดระเบียบใหม่และประกอบไฟล์ SWF และ SWC ที่คอมไพล์แล้วใหม่
bytecode ใน Flash virtual machine นั้นใช้สแต็ก โครงสร้างนี้ยากต่อการปรับให้เหมาะสม ก่อนอื่น Apparat จะแปลงโค้ดไบต์แบบสแต็กเป็น CFG (Control Flow Graph) จากนั้นจึงแปลงเป็น TAC แบบไม่มีสแต็กผ่าน CFG Address Code) นั่นคือ TAAS (Three Address ActionScript)
ด้วย TAC/TAAS โค้ดไบต์ Flash สามารถปรับให้เหมาะสมได้อีกครั้งโดยใช้เทคนิคการปรับให้เหมาะสมคอมไพเลอร์ เช่น การขยายแบบอินไลน์ การขยายพันธุ์สำเนา การพับอย่างต่อเนื่อง การกำจัดโค้ดที่ไม่ทำงาน เป็นต้น
Apparat มีไฟล์ SWC ที่มีประโยชน์หลายไฟล์พร้อม API ที่มีประสิทธิภาพมากกว่า และยังมี Alchemy API ที่ยังไม่มีใน ActionScript อีกด้วย หลังจากที่ Apparat ประมวลผล SWF โดยใช้ API เหล่านี้ ประสิทธิภาพการดำเนินการจะดีขึ้นอย่างมาก หลักการคือ Apparat ดำเนินการเพิ่มประสิทธิภาพแบบอินไลน์ในโค้ดที่เกี่ยวข้อง รูปแบบคำสั่งสำหรับการเพิ่มประสิทธิภาพ bytecode คือ:
tdsi -i input.swf -o เอาท์พุท.swf
ที่มา: Koubei.com ทีม UED