Engine JS AOT thử nghiệm ngay từ đầu
Porffor là một engine/trình biên dịch/runtime JS độc đáo, biên dịch trước mã JS sang WebAssembly hoặc mã native. Hiện tại nó được dùng cho mục đích nghiên cứu và còn hạn chế trong sử dụng thực tế.
Biên dịch Wasm
Đầu ra WebAssembly của Porffor nhanh hơn và nhỏ hơn nhiều so với các dự án JS -> Wasm hiện có. Lý do là Porffor biên dịch JS theo kiểu AOT.
- Kích thước Wasm: nhỏ hơn 32 lần so với Javy (~1.3MB -> ~40KB)
- Hiệu năng Wasm: nhanh hơn 18 lần so với Javy (~70m -> ~4m)
Biên dịch native
Vì biên dịch trước JS, Porffor có thể biên dịch thành các binary native thực sự mà không cần đóng gói runtime. Điều này dẫn đến:
- Kích thước binary: nhỏ hơn hơn 1000 lần (~90MB -> <50KB)
- Mức dùng bộ nhớ: ít hơn hơn 40 lần (~50MB -> ~1MB)
- Hiệu năng: nhanh hơn tối đa 3 lần
Thông tin bổ sung
- Porffor an toàn: được biên dịch sang Wasm và được viết bằng ngôn ngữ an toàn bộ nhớ (JS).
- Porffor được viết với AOT ngay từ đầu: không dựa trên các engine JS hiện có. Phụ thuộc duy nhất là parser JS.
- Porffor hỗ trợ đầu vào TypeScript: không cần bước transpiler rườm rà. Có thể đưa trực tiếp tệp TS vào.
Playground
Có thể thử Porffor trực tuyến hoặc cục bộ. Chỉ cần dùng lệnh 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 là bộ test tuân thủ ECMAScript chính thức. Porffor chạy bộ này trên mỗi commit để theo dõi tiến độ tuân thủ.
Tóm tắt của GN⁺
Porffor là một engine độc đáo biên dịch trước mã JS sang WebAssembly hoặc native. Nó mang lại kích thước nhỏ hơn nhiều và hiệu năng nhanh hơn so với các giải pháp hiện có. Dự án này được dùng cho mục đích nghiên cứu và hỗ trợ đầu vào TypeScript. Đây có thể là một dự án hữu ích để nghiên cứu hiệu năng và hiệu quả của engine JS. Một dự án có chức năng tương tự là các trình biên dịch JS -> Wasm như Javy.
1 bình luận
Ý kiến trên Hacker News
eval, còn Porffor chỉ hỗ trợ biên dịch AOT