เราทราบกันดีว่า Firefox 57 เร็วขึ้นกว่าเดิมมาก แต่นั่นเป็นเพียงจุดเริ่มต้นเท่านั้น เพราะ Mozilla มีแผนปรับปรุงเอนจินอีกมาก และใน Firefox 58 ก็มีของใหม่ที่ช่วยให้การประมวลผล JavaScript เร็วขึ้นอีก
ที่ผ่านมา Firefox รองรับ WebAssembly หรือการคอมไฟล์ JavaScript เป็นไบนารีเพื่อให้ได้ประสิทธิภาพดีขึ้นกว่าเดิม ใน Firefox 58 จะปรับปรุงการคอมไพล์ WebAssembly โดยใช้เทคนิค 2 อย่างประกอบกัน
เทคนิคแรกเรียกว่า streaming compilationหรือการเริ่มคอมไพล์โค้ดทันทีที่ไฟล์ของ JavaScript เริ่มถูกส่งเข้ามาผ่านเครือข่าย แม้ไฟล์ยังส่งไม่เสร็จสมบูรณ์ (เพราะ JavaScript มีขนาดใหญ่ขึ้นเรื่อยๆ) แต่ส่วนแรกที่ถูกส่งมายังเบราว์เซอร์ก็ถูกคอมไพล์แล้ว
streaming compilation ยังใช้การประมวลผลแบบหลายเธร็ดเข้าช่วยทำงานขนานกันไป โดยเธร็ดหลักมีหน้าที่รับไฟล์เข้ามา และเธร็ดรองอื่นๆ ช่วยกันคอมไพล์รอไว้ เมื่อเสร็จแล้วเธร็ดหลักก็สามารถรันได้ทันที
รูปแบบการคอมไพล์เดิม ต้องรอกันนาน
streaming compilation คอมไพล์ทันที + แบ่งงานกันทำ
เทคนิคที่สองเรียกว่า 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 มาใช้งาน จึงชดเชยจุดอ่อนของทั้งสองฝั่งได้
Mozilla ยังระบุว่า ปัจจุบัน Firefox ยังต้องคอมไพล์ JavaScript ทุกครั้งที่รีโหลดหน้าเว็บ แต่ในอนาคต การคอมไพล์จะเกิดขึ้นครั้งแรกเพียงครั้งเดียว และการโหลดหน้าเว็บครั้งต่อๆ ไปจะเรียกใช้ไบนารีจากแคชแทน ประสิทธิภาพที่ได้ก็จะยิ่งเพิ่มขึ้นอีก
ที่มา - Mozilla Hacks
Comments
เทคนิคดูเรียบง่าย จนแปลกใจว่าค่ายอื่นเขาไม่ใช่เทคนิคนี้หรอ หรือหมาไฟพึ่งตามมา???
[1] , [2] ครับ
Russia is just nazi who accuse the others for being nazi.someone once said : ผมก็ด่าของผมอยู่นะ :)
ทำมาตั้งแต่ 2014 !!!
เข้าใจว่าตอนนั้นยังไม่รองรับ multithread นะครับ ไม่รู้ตอนนี้รองรับหรือยัง
แต่ตอนนี้เป็นยังไงไม่ทราบได้ เพราะ V8 มันเปลี่ยนไปมากครับ
ยกตัวอย่างปี 2010 , 2017
edit: มาดูอีกที อันนี้มันเรื่อง WebAssembly แฮะ
Russia is just nazi who accuse the others for being nazi.someone once said : ผมก็ด่าของผมอยู่นะ :)
กลัว 2 เรื่อง:
- race conditions
- จะ detect cache ยังไงถ้า code ต้นทางโดนแก้?
บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P
คงจะให้แก้ปัญหาเฉพาะหน้าไปก่อนโดยการ ctrl+f5ว่าแต่ feature นี้มันยังไม่ออกนี่ครับ
น่าจะ E-tag and/or Last-Modified
จะกินแรมเพิ่มขึ้นอีกหรือเปล่าตอนนี้กินแรมแซงโครมไปแล้วนะเธอ
ไม่น่ากินแรมเพิ่มขึ้นมากมายครับ
คือที่ผ่านมา ตอนเปลี่ยนจาก multi-threading มาเป็น multi-processing เนี่ย ข้อมูลบางส่วนมันใช้แชร์กันไม่ได้ (เพราะโอเอสไม่ยอม) ดังนั้นก็เลยต้องมีการโหลดข้อมูลบางส่วนขึ้นมาใหม่ พอรวมกับหน่วยความจำที่โอเอสจองไว้เผื่อให้ด้วย มันเลยบวมเข้าไปใหญ่
(แต่ผู้ใช้ส่วนใหญ่ใช้งานที่แรม 8GB ขึ้นไปกันแล้วคงไม่มีผลกระทบเท่าไหร่)
อันนี้แค่เพิ่มอีก thread นึงสำหรับคอมไพล์สองครั้งพร้อมกัน ไม่น่ากินแรมมากมาย แต่ซีพียูอีกเรื่องนะครับ
ผมเพิ่งรุ้นะเนี่ยว่า บราวเซอร์ปัจจุบันมันไปไกลขนาดนี้แล้ว
สบายใจกะ Firefox เหมือนคนอินดี้ เพราะรอบตัวชอบใช้แต่ Chrome กัน ซึ่งพยายามใช้แล้วไม่เคยถูกจริตเลย
//ตอน Firefox 56 นั้นเลวร้ายมาก ใช้ Ubuntu ที่ใช้แรม 12GB รันบน SSD แทบจะใช้ไม่ได้เลย เลยต้องกล้ำกลืนใช้ Chrome ไปพักใหญ่
ถามหน่อยครับตอนนี้รุ่นfirefox version 57 นี่ถือว่าเร็วหรือยังครับ จะได้ลองใช้บ้าง
เร็วกว่า 56 มาก
แต่ plugin ที่ผมใช้ตายเรียบ
เลยยังไม่อัพ
ถ้าไม่ติดเรื่อง plugin ผมแนะนำให้อัพเลย
ขอบคุณจ้า
เร็วขึ้นมากครับ ผมเปลื่ยนจาก Chrome มาใช้ Firefox เป็นหลักก็เพราะ engine ใหม่นี่ล่ะ
ขอบคุณจ้าาา เดี๋ยวจัดเลย
+1 ใช้เป็นหลักเลย
ด้วยความเป็น fanboy ...รู้สึกปลื้มปริ่ม
กลับมาใช้อีกครั้งตั้งแต่ 57 หลังจากเลิกใช้ไปแล้วก่อนหน้าตอนนี้เลยใช้คูกับโครมไปก่อน
ตั้งแต่ใช้ Firefox 57 มา ผมเจอปัญหา Browser ค้างจนคลิกอะไรไม่ได้เลยอยู่บ่อยครั้ง จนต้อง End Process ตลอด ต่อให้ไม่ลง Add-ons ใดๆ ก็ยังมีค้าง คอมพิวเตอร์ที่พบว่าค้าง เป็นคอมพิวเตอร์ที่ใช้ CPU Core 2 Duo, Core i ตัวล่างๆ, Core i Gen แรกๆ ส่วน RAM 4GB-6GB ก็ยังมีค้าง (2GB ไม่ต้องกล่าวก็คงจะรู้ล่ะว่าเดี้ยงแน่นอน)
เดี๋ยวนี้ Browser ไม่ว่าจะเจ้าไหน ก็กิน RAM กินทรัพยากรมากๆ ทั้งนั้้น ไม่มีหรอก กินแรมไม่ถึง 300MB
Firefox 57 ที่ทุกคนว่าเร็ว ผมเจอ bug กระจาย ยอมช้าเหมือนเดิมดีกว่ามันยังไม่ดีพอจะ update ตามครับ
ตั้งแต่ 58 มา เจอปัญหากับ FB จนหงุดหงิด