Angular JIT และ AOT ต่างกันอย่างไร?

Just-in-Time (JIT) คือ compiler จะ compiles app ตอน runtime
เป็นค่า default ตั้งแต่ angular 2 ถึง 8

Ahead-of-Time (AOT) คือ compiler จะ compiles app ตอน build time.
เป็นค่า default ตั้งแต่ angular 9

คำถามต่อมา runtime, build time คืออะไร

runtime คือ ช่วงเวลาที่โปรแกรมเริ่มทำงานตั้งแต่ต้น จนจบ
บางภาษาอย่าง java บางคนอาจจะเคยเจอคำว่า java runtime error
นั้นหมายถึง โปรแกรมรันแล้ว error ทั้งๆที่ syntax ถูกต้อง
case แบบนี้อาจจะเกิดจาก เช่น index array ผิด หรือ หารด้วย input 0

โอเค ไปไกลละ// runtime ใน angular เลยหมายถึง โปรแกรมจะ compiles ทุกครั้ง
ที่โหลดหน้าเว็บใหม่ ทีนี้ใน angular จะมี [ng serve] ที่จะ rebuild ทุกครั้งที่ file changes

เพราะงั้น ในทางการใช้งาน เราแทบไม่รู้สึกเลยว่า JIT และ AOT ต่างกัน
เพราะ angular มัน compiles เสร็จหมดแล้ว เราแค่ใช้งานหน้าเว็บ สบายๆ

build time คือ ช่วงเวลาในการ build file (ตอบกวนตีนไปไหมเนี่ย 555)
ถ้าจะเล่าก็คือ ทำไมตอน runtime ต้อง compiles ทุกครั้งเลยละ
ทำไมไม่ compiles ตอน build ให้เสร็จทีเดียว
จากนั้นก็หยิบไปใช้งานปกติ

อ่านแล้วอาจจะงงๆ ลองมาดูรูปประกอบ น่าจะเข้าใจมากขึ้นครับ

https://miro.medium.com/max/1053/1*1BXaQT3UOIA7sMQghpwd7A.jpeg
https://miro.medium.com/max/1276/1*9WBbfK9VGgqbTVob1Ko2yw.jpeg