TypeScript 7.0 RC พอร์ตคอมไพเลอร์ทั้งตัวไปเป็น Go · tsc เร็วขึ้นราว 10 เท่า ลองจับเวลาเองได้เลย
TypeScript 7.0 RC พอร์ตคอมไพเลอร์ทั้งตัวจาก TypeScript ไปเป็น Go ทำให้ tsc เร็วขึ้นราว 10 เท่า วิธีพิสูจน์ที่ดีที่สุดคืออย่าเพิ่งเชื่อตัวเลขในประกาศ ให้จับเวลาบิลด์โปรเจกต์เดิมก่อนและหลังด้วยตัวเอง

TypeScript คือภาษาที่ต่อยอดจาก JavaScript โดยเพิ่มระบบระบุชนิดข้อมูล (type system) เพื่อให้ช่วยตรวจจับข้อผิดพลาดในโค้ดได้ตั้งแต่ก่อนนำไปรันจริง โดยมีเครื่องมือหลักที่ทำหน้าที่ตรวจสอบคือคำสั่ง tsc ปัญหาที่นักพัฒนาเจอกันประจำคือ เมื่อโปรเจกต์ขยายใหญ่ขึ้น การรัน npx tsc แต่ละครั้งอาจต้องรอนานหลายสิบวินาทีกว่าจะรู้ผล ทำให้เสียจังหวะในการเขียนโค้ดอย่างมาก
เพื่อแก้ปัญหานี้ ทีมพัฒนา TypeScript จึงได้ปล่อย TypeScript 7.0 RC (Release Candidate) โดยตัดสินใจยกเครื่องคอมไพเลอร์ tsc ทั้งหมด จากเดิมที่เขียนด้วย TypeScript ย้ายไปเขียนใหม่ด้วยภาษา Go ส่งผลให้ความเร็วในการคอมไพล์และตรวจ type ทำได้เร็วขึ้นราว 10 เท่าเมื่อเทียบกับ TypeScript 6.0
ตัวเลข 10 เท่าอาจฟังดูเหมือนคำโฆษณา แต่จุดเด่นของการอัปเดตครั้งนี้คือ เราสามารถพิสูจน์ผลลัพธ์ได้ด้วยตัวเองภายในเวลาไม่กี่นาที เพียงแค่ติดตั้งตัว RC ในโปรเจกต์ปัจจุบัน แล้วลองจับเวลาการบิลด์เทียบกันระหว่างเวอร์ชันเก่ากับเวอร์ชันใหม่
เบื้องหลังความเร็ว: ทำไมการย้ายภาษาถึงสร้างความต่างได้ขนาดนี้

เดิมทีคอมไพเลอร์ของ TypeScript เขียนด้วยตัวภาษา TypeScript เองและรันอยู่บน JavaScript engine ซึ่งแม้จะมีความยืดหยุ่นสูง แต่ไม่ได้ถูกออกแบบมาเพื่อการประมวลผลไฟล์โค้ดระดับแสนบรรทัดด้วยความเร็วสูงสุด ทีมงานจึงตัดสินใจพอร์ตคอมไพเลอร์ทั้งหมดไปเป็นภาษา Go ซึ่งสามารถคอมไพล์เป็น native binary และจัดการการประมวลผลแบบ multi-thread บนหน่วยความจำร่วมกันได้อย่างมีประสิทธิภาพ
การเพิ่มความเร็วครั้งนี้เกิดจาก 2 ปัจจัยหลักควบคู่กัน ปัจจัยแรกคือ โค้ดทำงานด้วยความเร็วระดับ native โดยตรงโดยไม่ต้องผ่านเลเยอร์ของ JavaScript engine ปัจจัยที่สองคือ กระบวนการหนักๆ อย่างการอ่านไฟล์ (parsing) การตรวจสอบชนิดข้อมูล (type-checking) และการแปลงโค้ดออกเป็น JavaScript (emitting) ถูกแยกไปประมวลผลแบบขนานกันหลาย thread แทนที่จะต้องรอคิวประมวลผลทีละสเต็ปเหมือนเดิม
ผลลัพธ์คือตัวเลขความเร็วเฉลี่ยที่ทีมงานระบุไว้ว่า "often about 10 times faster than TypeScript 6.0" ซึ่งใช้คำว่า often เพราะความเร็วที่เพิ่มขึ้นจริงจะขึ้นอยู่กับโครงสร้างและความซับซ้อนของแต่ละ codebase
วิธีทดสอบจับเวลาบนเครื่องของคุณใน 5 นาที

หากต้องการพิสูจน์ความเร็วกับโค้ดของคุณเอง สามารถทำตาม 3 ขั้นตอนนี้ได้ทันที
- จับเวลาเวอร์ชันปัจจุบัน: รันคำสั่ง
npx tscบนโปรเจกต์ที่ใช้ TypeScript 6.0 อยู่ แล้วบันทึกเวลาที่ใช้ในการบิลด์ไว้ - ติดตั้งเวอร์ชัน RC: อัปเดตแพ็กเกจด้วยคำสั่ง
npm install -D typescript@rcแล้วตรวจสอบเวอร์ชันด้วยnpx tsc --versionซึ่งควรแสดงผลเป็นVersion 7.0.1-rc - จับเวลาเวอร์ชันใหม่: รัน
npx tscอีกครั้งบนโค้ดชุดเดิม แล้วนำตัวเลขเวลามาเปรียบเทียบกัน
ผลต่างของเวลาที่ได้คือคำตอบที่สะท้อนประสิทธิภาพบนเครื่องและโปรเจกต์ของคุณอย่างแท้จริง ตัวแพ็กเกจ RC สามารถติดตั้งได้จาก TypeScript บน npm ได้ตามปกติ
โค้ดเดิมทำงานได้ทันที เพราะนี่คือการพอร์ตตรรกะเดิม
สิ่งที่นักพัฒนาส่วนใหญ่กังวลเมื่อมีการเปลี่ยนคอมไพเลอร์ใหม่ คือผลการตรวจ type จะเพี้ยนไปจากเดิมหรือไม่ โค้ดที่เคยผ่านจะกลายเป็น error หรือเปล่า คำตอบคือไม่ต้องกังวล เพราะทีมงานใช้วิธี "พอร์ต" ตรรกะเดิม ไม่ใช่การ "เขียนสเปกใหม่" นั่นหมายความว่า semantic และกฎเกณฑ์การตรวจชนิดข้อมูลทั้งหมดถูกยกมาเหมือนเดิมแทบทุกประการ ผลการประเมิน type บน TS 7.0 จึงสอดคล้องกับ TS 6.0 อย่างสมบูรณ์
ความเสถียรนี้ผ่านการทดสอบอย่างเข้มข้นด้วย test suite ที่สะสมมากว่า 10 ปี รวมถึงการนำไปทดสอบกับ codebase ขนาดหลายล้านบรรทัดทั้งภายใน Microsoft และองค์กรพันธมิตร เช่น Bloomberg, Canva, Figma, Google, Notion, Slack และ Vercel เพื่อให้มั่นใจว่าจะไม่เกิด breaking changes กับโค้ดที่มีอยู่เดิม
สำหรับฝั่งโค้ดเอดิเตอร์ สามารถทดลองใช้งานได้ผ่านส่วนขยาย TypeScript Native Preview บน VS Code เพื่อให้ฟีเจอร์อย่าง auto-import, inlay hint และ go to definition ทำงานบนคอมไพเลอร์ตัวใหม่ ทั้งนี้ส่วนขยายพัฒนาขึ้นบนมาตรฐาน LSP (Language Server Protocol) จึงสามารถนำไปปรับใช้กับเอดิเตอร์ตัวอื่นที่รองรับมาตรฐานนี้ได้เช่นกัน
สิ่งที่ควรรู้ก่อนนำไปใช้งานบน Production
แม้ประสิทธิภาพจะดีขึ้นอย่างเห็นได้ชัดและเข้ากันได้กับโค้ดเดิม แต่ยังมีข้อควรพิจารณา 3 ประการก่อนตัดสินใจนำไปใช้จริง
เรื่องแรก สถานะของเวอร์ชันนี้ยังคงเป็น RC (Release Candidate) ซึ่งเหมาะสำหรับการทดสอบและประเมินผลภายในทีม โดยทีมงานมีแผนจะปล่อยตัวจริงที่เสถียรภายในระยะเวลาประมาณ 1 เดือน
เรื่องที่สอง สำหรับผู้ที่พัฒนาเครื่องมือต่อยอดจาก TypeScript API โดยตรง ตัว programmatic API ที่เสถียรจะถูกปล่อยใน TypeScript 7.1 ซึ่งมีกำหนดการตามมาในอีกไม่กี่เดือนข้างหน้า ดังนั้นเครื่องมือใน ecosystem ที่ต้องพึ่งพา API นี้ยังคงต้องทำงานบน TS 6.0 ไปก่อน
เรื่องที่สาม มีการปรับค่าเริ่มต้นบางตัว เช่น strict, module, rootDir และ types รวมถึง flag เก่าบางตัวที่เคยเป็นแค่ warning ใน TS 6.0 จะกลายเป็น error ทันทีใน TS 7.0 คำแนะนำคือควรเคลียร์โค้ดให้ผ่านบน TS 6.0 ให้เรียบร้อยก่อนขยับมาใช้ TS 7.0
การที่ tsc ทำงานได้เร็วขึ้นระดับนี้ ไม่ใช่แค่เรื่องของการประหยัดเวลาบิลด์ แต่ช่วยเปลี่ยน workflow ในการเขียนโค้ดให้ลื่นไหลขึ้นอย่างมาก รอบ feedback loop ที่เคยสะดุดจะสั้นลงจนกลมกลืนไปกับการเขียนโปรแกรม ทำให้เราโฟกัสกับตรรกะของงานได้ต่อเนื่องโดยไม่ต้องคอยรอระบบตรวจเช็กโค้ดอีกต่อไป
ที่มา: บทความ Announcing TypeScript 7.0 RC จาก TypeScript Devblog
ชอบเรื่องแนวนี้ มีอีบุ๊คฟรีให้อ่านต่อ
ChatGPT Work ฉบับเข้าใจง่าย มอบงานให้ AI ทำจนจบ ตั้งแต่งานแรกจนถึงงานอัตโนมัติ พร้อม workflow ใช้ได้จริง 8 แบบ
กดสมัครแล้วเราจะส่งเทคนิค AI และของแจกใหม่ๆ ให้ทางอีเมล เลิกรับได้ตลอด
Claude Cowork · The Business Playbook

ฉบับภาษาไทย 15 บท เรียนรู้ผ่านโปรเจกต์จำลองต่อเนื่องทั้งเล่ม ตั้งแต่ตั้งค่า Workspace จัดการไฟล์ เชื่อมแอป ตั้งระบบอัตโนมัติ จนถึงสร้าง Plugin


