สำหรับ
for
ลูปมีประสิทธิภาพมากกว่ามาก เป็นโครงสร้างแบบวนซ้ำที่ออกแบบมาโดยเฉพาะเพื่อทำซ้ำในขณะที่เงื่อนไขเป็นจริงในขณะเดียวกันก็เสนอกลไกการก้าว (โดยทั่วไปจะเพิ่มตัววนซ้ำ) ตัวอย่าง:
for (var i=0, n=arr.length; i < n; ++i ) {
...
}
นี่ไม่ได้หมายความว่าสำหรับ -loops จะมีประสิทธิภาพมากกว่าเสมอไปเพียงแค่ที่เอ็นจิ้น JS และเบราว์เซอร์ได้ปรับแต่งให้เป็นเช่นนั้น ในช่วงหลายปีที่ผ่านมามีการประนีประนอมว่าโครงสร้างแบบวนซ้ำมีประสิทธิภาพมากกว่า (สำหรับในขณะที่ลดขณะย้อนกลับ ฯลฯ ) เบราว์เซอร์และเอ็นจิน JS ที่แตกต่างกันมีการใช้งานของตัวเองซึ่งเสนอวิธีการที่แตกต่างกันเพื่อให้ได้ผลลัพธ์ที่เหมือนกัน เนื่องจากเบราว์เซอร์ได้รับการปรับให้เหมาะสมยิ่งขึ้นเพื่อตอบสนองความต้องการด้านประสิทธิภาพในทางทฤษฎี[].forEach
สามารถนำไปใช้ในลักษณะที่เร็วกว่าหรือเทียบได้กับไฟล์for
.
สิทธิประโยชน์:
- มีประสิทธิภาพ
- การสิ้นสุดลูปในช่วงต้น (เกียรตินิยม
break
และcontinue
)
- การควบคุมเงื่อนไข (
i<n
สามารถเป็นอะไรก็ได้และไม่ผูกมัดกับขนาดของอาร์เรย์)
- กำหนดขอบเขตตัวแปร (
var i
ใบi
ใช้ได้หลังจากวงปลาย)
แต่ละ
.forEach
เป็นวิธีการที่เน้นย้ำบนอาร์เรย์เป็นหลัก (รวมถึงการแจกแจงอื่น ๆ เช่นMap
และSet
อ็อบเจ็กต์) พวกเขามีความใหม่และให้รหัสที่เป็นผู้กระทำให้อ่านง่ายขึ้น ตัวอย่าง:
[].forEach((val, index)=>{
...
});
สิทธิประโยชน์:
- ไม่เกี่ยวข้องกับการตั้งค่าตัวแปร (วนซ้ำในแต่ละองค์ประกอบของอาร์เรย์)
- ฟังก์ชัน / ฟังก์ชันลูกศรกำหนดขอบเขตตัวแปรไปยังบล็อก
ในตัวอย่างด้านบนval
จะเป็นพารามิเตอร์ของฟังก์ชันที่สร้างขึ้นใหม่ ดังนั้นตัวแปรใด ๆ ที่เรียกval
ก่อนลูปจะเก็บค่าไว้หลังจากสิ้นสุด
- สามารถบำรุงรักษาได้ง่ายขึ้นเนื่องจากอาจระบุได้ง่ายกว่าว่าโค้ดกำลังทำอะไรอยู่ซึ่งจะทำซ้ำมากกว่าจำนวนที่สามารถระบุได้ ในขณะที่สามารถใช้ for-loop สำหรับรูปแบบการวนซ้ำจำนวนเท่าใดก็ได้
ประสิทธิภาพ
ประสิทธิภาพเป็นหัวข้อที่ยุ่งยากซึ่งโดยทั่วไปต้องอาศัยประสบการณ์ในการคิดล่วงหน้าหรือแนวทาง เพื่อที่จะกำหนดล่วงหน้า (ในขณะที่กำลังพัฒนา) ว่าจะต้องมีการเพิ่มประสิทธิภาพมากน้อยเพียงใดโปรแกรมเมอร์จะต้องมีความคิดที่ดีเกี่ยวกับประสบการณ์ในอดีตเกี่ยวกับกรณีปัญหาตลอดจนความเข้าใจที่ดีเกี่ยวกับแนวทางแก้ไขที่เป็นไปได้
การใช้ jQuery ในบางกรณีอาจช้าเกินไปในบางครั้ง (นักพัฒนาที่มีประสบการณ์อาจทราบเรื่องนั้น) ในขณะที่บางครั้งอาจไม่ใช่ปัญหาซึ่งในกรณีนี้การปฏิบัติตามข้อกำหนดข้ามเบราว์เซอร์ของไลบรารีและความสะดวกในการใช้งานฟังก์ชันอื่น ๆ (เช่น AJAX, การจัดการเหตุการณ์) จะคุ้มค่ากับเวลาในการพัฒนา (และการบำรุงรักษา) ที่ประหยัดได้
อีกตัวอย่างหนึ่งคือหากประสิทธิภาพและการปรับให้เหมาะสมเป็นทุกอย่างจะไม่มีรหัสอื่นใดนอกจากเครื่องจักรหรือแอสเซมบลี เห็นได้ชัดว่าไม่เป็นเช่นนั้นเนื่องจากมีภาษาระดับสูงและภาษาระดับต่ำที่แตกต่างกันมากมายแต่ละภาษามีการแลกเปลี่ยนของตนเอง ข้อแลกเปลี่ยนเหล่านี้รวมถึง แต่ไม่ จำกัด เฉพาะความเชี่ยวชาญพิเศษความง่ายและความเร็วในการพัฒนาความสะดวกและความเร็วในการบำรุงรักษาโค้ดที่ปรับให้เหมาะสมรหัสที่ปราศจากข้อผิดพลาดเป็นต้น
วิธีการ
หากคุณไม่มีความเข้าใจที่ดีหากบางสิ่งบางอย่างจำเป็นต้องใช้โค้ดที่ปรับให้เหมาะสมโดยทั่วไปแล้วกฎง่ายๆคือการเขียนโค้ดที่บำรุงรักษาได้ก่อน จากนั้นคุณจะทดสอบและระบุสิ่งที่ต้องการความสนใจเพิ่มเติมได้เมื่อจำเป็น
กล่าวได้ว่าการเพิ่มประสิทธิภาพที่ชัดเจนบางอย่างควรเป็นส่วนหนึ่งของการปฏิบัติทั่วไปและไม่จำเป็นต้องใช้ความคิดใด ๆ ตัวอย่างเช่นพิจารณาลูปต่อไปนี้:
for (var i=0; i < arr.length; ++i ){}
สำหรับการวนซ้ำแต่ละครั้ง JavaScript จะดึงการarr.length
ดำเนินการคิดต้นทุนการค้นหาคีย์ในแต่ละรอบ ไม่มีเหตุผลที่ไม่ควร:
for (var i=0, n=arr.length; i < n; ++i){}
สิ่งนี้ทำสิ่งเดียวกัน แต่จะดึงข้อมูลเพียงarr.length
ครั้งเดียวแคชตัวแปรและเพิ่มประสิทธิภาพโค้ดของคุณ