ESLint: การนำ linting แบบมัลติเธรดมาใช้ ช่วยเพิ่มความเร็วให้โปรเจ็กต์ขนาดใหญ่ได้สูงสุด 3 เท่า
(eslint.org)สรุปประเด็นสำคัญ
- ESLint v9.34.0 เพิ่มความสามารถในการ lint แบบมัลติเธรด ทำให้ประมวลผลหลายไฟล์พร้อมกันได้
- มีเป้าหมายเพื่อลดเวลาในการ lint สำหรับโค้ดเบสขนาดใหญ่อย่างมีนัยสำคัญ
- ฟีเจอร์ที่เตรียมกันมานานกว่า 10 ปีนี้ถูกพัฒนาเสร็จและเปิดใช้อย่างเป็นทางการแล้ว
อะไรที่ดีขึ้น
- ใช้งาน CPU core ได้คุ้มค่าขึ้นด้วยการประมวลผลแบบขนาน จึงช่วยลดเวลา lint โดยรวม
- ได้ผลชัดเจนเป็นพิเศษกับ monorepo/รีโพขนาดใหญ่ที่มีจำนวนไฟล์มาก
วิธีใช้งาน
- ใน CLI มีตัวเลือกสำหรับควบคุม concurrency (จำนวนเธรด) ให้ใช้งานได้แล้ว (เช่น การตั้งค่าที่เกี่ยวข้องกับ concurrency)
- สามารถปรับค่า concurrency ให้เหมาะกับโปรเจ็กต์หรือสภาพแวดล้อม CI เพื่อหาจุดที่เหมาะสมที่สุดได้
ข้อจำกัดและสิ่งที่ควรระวัง
- มีรายงานว่าเมื่อรันผ่าน external wrapper/เครื่องมือ integration บางตัว ประสิทธิภาพอาจไม่เป็นไปตามที่คาดหวัง (แตกต่างกันไปตามสภาพแวดล้อมและชุดเครื่องมือ)
- เนื่องจากเป็นฟีเจอร์ใหม่ จึงแนะนำให้ตรวจสอบทั้งประสิทธิภาพและความเสถียรทั้งใน CI และบนเครื่อง local เมื่อนำไปใช้กับ lint flow
เคล็ดลับในการนำไปใช้
- แทนที่จะเปิดใช้กับทั้งรีโพในครั้งเดียว ควรเริ่มใช้อย่างค่อยเป็นค่อยไปเป็นรายไดเรกทอรี พร้อมหาค่า concurrency ที่เหมาะสม
- ใน CI ควรปรับทั้ง cache และกลยุทธ์แบบขนานร่วมกัน พร้อมตรวจสอบกฎ/ปลั๊กอินที่เป็นคอขวดก่อน โดยเฉพาะส่วนที่ใช้ file I/O หรือใช้เวลารันกฎนาน
สรุปสั้นๆ
- “การ lint แบบขนานที่รอกันมานาน ถึงเวลาลองดูว่าช่วยให้เวลา lint ของโปรเจ็กต์ขนาดใหญ่ดีขึ้นได้แค่ไหน”
ยังไม่มีความคิดเห็น