เอนจิน AOT JS เชิงทดลองที่สร้างขึ้นตั้งแต่ต้น
Porffor เป็นเอนจิน/คอมไพเลอร์/รันไทม์ JavaScript ที่มีเอกลักษณ์ โดยคอมไพล์โค้ด JS ล่วงหน้าเป็น WebAssembly หรือเนทีฟ ปัจจุบันใช้เพื่อการวิจัยเป็นหลัก และยังมีข้อจำกัดในการใช้งานจริง
การคอมไพล์ Wasm
เอาต์พุต WebAssembly ของ Porffor เร็วกว่าและมีขนาดเล็กกว่ามากเมื่อเทียบกับโปรเจ็กต์ JS -> Wasm แบบเดิม ๆ เพราะ Porffor คอมไพล์ JS แบบ AOT
- ขนาด Wasm: เล็กกว่า Javy 32 เท่า (~1.3MB -> ~40KB)
- ประสิทธิภาพ Wasm: เร็วกว่า Javy 18 เท่า (~70m -> ~4m)
การคอมไพล์เนทีฟ
เนื่องจากคอมไพล์ JS ล่วงหน้า Porffor จึงสามารถคอมไพล์เป็นไบนารีเนทีฟจริงได้โดยไม่ต้องแพ็กเกจรันไทม์ ซึ่งส่งผลดังนี้:
- ขนาดไบนารี: เล็กกว่า 1000 เท่าขึ้นไป (~90MB -> <50KB)
- การใช้หน่วยความจำ: น้อยกว่า 40 เท่าขึ้นไป (~50MB -> ~1MB)
- ประสิทธิภาพ: เร็วขึ้นสูงสุด 3 เท่า
รายละเอียดเพิ่มเติม
- Porffor ปลอดภัย: คอมไพล์เป็น Wasm และเขียนด้วยภาษาแบบ memory-safe (JS)
- Porffor ถูกสร้างขึ้นโดยคำนึงถึง AOT ตั้งแต่แรก: ไม่ได้อิงกับเอนจิน JS ที่มีอยู่เดิม โดยมี dependency เพียงตัวเดียวคือ JS parser
- Porffor รองรับอินพุต TypeScript: ไม่ต้องมีขั้นตอน transpiler ที่ยุ่งยาก สามารถป้อนไฟล์ TS ได้โดยตรง
Playground
คุณสามารถลองใช้ Porffor ได้ทั้งแบบออนไลน์หรือบนเครื่องโลคัล ใช้คำสั่ง npm i -g porffor@latest && porf
- Prime Numbers
- Fibonacci
- Factorial
- Sum of Digits
- Exception
- Array Reading
- ArrayPrototype
- Math Proposals Parser: acorn, meriyah, hermes-parser, @babel/parser
- Target: wasm
const isPrime = number => {
if (number < 2) return false;
for (let i = 2; i < number; i++) {
if (number % i == 0) return false;
}
return true;
}
let counter = 0;
while (counter <= 10000) {
if (isPrime(counter)) Porffor.numberLog(counter);
counter++;
}
Test262
Test262 คือชุดทดสอบความสอดคล้องตามมาตรฐาน ECMAScript อย่างเป็นทางการ โดย Porffor จะรันชุดทดสอบนี้ทุกครั้งที่มีการคอมมิต เพื่อติดตามความคืบหน้าด้านความเข้ากันได้
สรุปโดย GN⁺
Porffor เป็นเอนจินที่มีเอกลักษณ์ซึ่งคอมไพล์โค้ด JS ล่วงหน้าเป็น WebAssembly หรือเนทีฟ ทำให้ได้ขนาดที่เล็กกว่ามากและประสิทธิภาพที่เร็วกว่าวิธีเดิม ๆ ใช้เพื่อการวิจัยและรองรับอินพุต TypeScript โปรเจ็กต์นี้อาจมีประโยชน์ในการศึกษาด้านประสิทธิภาพและความมีประสิทธิผลของเอนจิน JS โดยโปรเจ็กต์ที่มีความสามารถคล้ายกันได้แก่คอมไพเลอร์ JS -> Wasm อย่าง Javy
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
evalแต่ Porffor รองรับเฉพาะการคอมไพล์แบบ AOT