การเขียนโค้ด Javascript ที่มีประสิทธิภาพสูงโดยไม่ทำให้เสียเวลา
เมื่อเขียนโค้ดที่ไวต่อประสิทธิภาพใน Javascript ซึ่งทำงานในอาร์เรย์ตัวเลขขนาดใหญ่ (คิดว่าเป็นแพคเกจพีชคณิตเชิงเส้นการทำงานกับจำนวนเต็มหรือตัวเลขทศนิยม) หนึ่งต้องการให้ JIT ช่วยเท่าที่จะทำได้ ประมาณนี้หมายถึง: เราต้องการให้อาร์เรย์ของเราบรรจุ SMIs (จำนวนเต็มเล็กน้อย) หรือบรรจุคู่ขึ้นอยู่กับว่าเราทำการคำนวณจำนวนเต็มหรือทศนิยม เราต้องการที่จะส่งสิ่งประเภทเดียวกันไปยังฟังก์ชั่นเสมอเพื่อที่พวกเขาจะไม่ได้รับป้ายกำกับ "megamorphic" และ deoptimised ตัวอย่างเช่นเราต้องการที่จะโทรหาvec.add(x, y)ทั้งคู่xและyเป็นอาร์เรย์ SMI ที่บรรจุอยู่หรือทั้งสองอาร์เรย์ที่บรรจุแล้ว เราต้องการให้ฟังก์ชั่นอินไลน์มากที่สุด เมื่อมีหนึ่งเร่ร่อนอยู่นอกกรณีเหล่านี้จะมีการลดลงของประสิทธิภาพการทำงานอย่างกะทันหันและรุนแรง สิ่งนี้สามารถเกิดขึ้นได้ด้วยเหตุผลที่ไม่น่ากลัวหลายประการ: คุณอาจเปิด SMI myArray.map(x => -x)อาร์เรย์บรรจุลงในบรรจุอาร์เรย์คู่ผ่านการดำเนินการที่ดูเหมือนไม่มีอันตรายเช่นเทียบเท่า นี่เป็นกรณีที่แย่ที่สุด "ดีที่สุด" เนื่องจากอาร์เรย์ Double ที่บรรจุอยู่นั้นยังคงเร็วมาก คุณอาจจะกลายอาร์เรย์ที่บรรจุลงในกล่องอาร์เรย์ทั่วไปตัวอย่างเช่นโดยการทำแผนที่อาร์เรย์มากกว่าฟังก์ชั่นที่ (โดยไม่คาดคิด) กลับหรือnull undefinedกรณีที่ไม่ดีนี้ค่อนข้างง่ายที่จะหลีกเลี่ยง คุณอาจ deoptimise ฟังก์ชั่นทั้งหมดเช่นvec.add()โดยผ่านสิ่งต่าง ๆ มากเกินไปและเปลี่ยนเป็น megamorphic สิ่งนี้อาจเกิดขึ้นได้หากคุณต้องการทำ "การเขียนโปรแกรมทั่วไป" ซึ่งvec.add()จะใช้ทั้งในกรณีที่คุณไม่ได้ระมัดระวังเกี่ยวกับประเภท (ดังนั้นจึงเห็นหลายประเภทเข้ามา) และในกรณีที่คุณต้องการประสิทธิภาพสูงสุด (มันควรจะได้รับคู่ผสมชนิดบรรจุกล่องเท่านั้น) คำถามของฉันเป็นคำถามที่อ่อนกว่าเกี่ยวกับวิธีการเขียนโค้ด …