เร็วขึ้นได้อีก Firefox 58 จะใช้เทคนิคคอมไพล์ JavaScript แบบใหม่ ทำงานแบบขนาน

หัวข้อกระทู้ ใน 'เทคโนโลยี' เริ่มโพสต์โดย iPokz, 21 มกราคม 2018.

  1. iPokz

    iPokz ~" iPokz "~ Staff Member

    เราทราบกันดีว่า Firefox 57 เร็วขึ้นกว่าเดิมมาก แต่นั่นเป็นเพียงจุดเริ่มต้นเท่านั้น เพราะ Mozilla มีแผนปรับปรุงเอนจินอีกมาก และใน Firefox 58 ก็มีของใหม่ที่ช่วยให้การประมวลผล JavaScript เร็วขึ้นอีก

    ที่ผ่านมา Firefox รองรับ WebAssembly หรือการคอมไฟล์ JavaScript เป็นไบนารีเพื่อให้ได้ประสิทธิภาพดีขึ้นกว่าเดิม ใน Firefox 58 จะปรับปรุงการคอมไพล์ WebAssembly โดยใช้เทคนิค 2 อย่างประกอบกัน

    เทคนิคแรกเรียกว่า streaming compilation หรือการเริ่มคอมไพล์โค้ดทันทีที่ไฟล์ของ JavaScript เริ่มถูกส่งเข้ามาผ่านเครือข่าย แม้ไฟล์ยังส่งไม่เสร็จสมบูรณ์ (เพราะ JavaScript มีขนาดใหญ่ขึ้นเรื่อยๆ) แต่ส่วนแรกที่ถูกส่งมายังเบราว์เซอร์ก็ถูกคอมไพล์แล้ว

    streaming compilation ยังใช้การประมวลผลแบบหลายเธร็ดเข้าช่วยทำงานขนานกันไป โดยเธร็ดหลักมีหน้าที่รับไฟล์เข้ามา และเธร็ดรองอื่นๆ ช่วยกันคอมไพล์รอไว้ เมื่อเสร็จแล้วเธร็ดหลักก็สามารถรันได้ทันที

    รูปแบบการคอมไพล์เดิม ต้องรอกันนาน

    [​IMG]

    streaming compilation คอมไพล์ทันที + แบ่งงานกันทำ

    [​IMG]

    เทคนิคที่สองเรียกว่า Tier 2 compiler ตามปกติแล้ว การคอมไพล์ให้ได้ไบนารีที่มีประสิทธิภาพ จำเป็นต้อง optimize โค้ดด้วย ซึ่งก็มีข้อเสียคือเสียเวลา optimize ตอนคอมไพล์

    ทางออกของ Mozilla คือการใช้คอมไพเลอร์หลายชั้น (tiered compiler) โดยคอมไพเลอร์ชั้นแรก (Tier 1) จะคอมไพล์โค้ดแบบตรงๆ ไม่ต้อง optimize เพื่อให้ได้ไบนารีมาใช้งานก่อน ส่วนคอมไพเลอร์ชั้นที่สอง (Tier 2) จะคอมไพล์โค้ดนั้นซ้ำ และทำการ optimize โค้ดอยู่เบื้องหลัง เมื่อเสร็จแล้วจะ "สลับ" (hot-swap) ไบนารีเป็นเวอร์ชันใหม่ที่มีประสิทธิภาพดีกว่า

    Mozilla บอกว่า คอมไพเลอร์ Tier 1 สามารถคอมไพล์ได้เร็วกว่า Tier 2 ถึง 10-15 เท่า (เพราะไม่ต้อง optimize) แต่ผลลัพธ์ที่ออกมาได้ โค้ดจะช้ากว่าเพียง 2 เท่า ดังนั้นการให้คอมไพเลอร์ Tier 1 ทำงานไปก่อนแล้วค่อยสลับโค้ดจาก Tier 2 มาใช้งาน จึงชดเชยจุดอ่อนของทั้งสองฝั่งได้

    [​IMG]

    Mozilla ยังระบุว่า ปัจจุบัน Firefox ยังต้องคอมไพล์ JavaScript ทุกครั้งที่รีโหลดหน้าเว็บ แต่ในอนาคต การคอมไพล์จะเกิดขึ้นครั้งแรกเพียงครั้งเดียว และการโหลดหน้าเว็บครั้งต่อๆ ไปจะเรียกใช้ไบนารีจากแคชแทน ประสิทธิภาพที่ได้ก็จะยิ่งเพิ่มขึ้นอีก

    ที่มา - Mozilla Hacks

    Topics: FirefoxJavaScriptCompilerWebAssemblyBrowserMozilla
     

แบ่งปันหน้านี้