Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: Điểm Danh các Trình Biên Dịch JS 868

ngocdaothanh.myopenid.com 172
Updated over 2 years ago

JS có truyền thống bị coi là chậm, nhưng gần đây nhờ V8 của Google khuấy động phong trào, chất lượng đa số các trình biên dịch JS đã cải thiện đáng kể, giúp tăng tốc độ dịch và chạy JS lên cả chục lần. Nhờ đó, phong trào server-side JS đã rậm rịch trở lại. Ví dụ ngay bây giờ nếu search các project dựa trên V8 sẽ ra cả đống{#emotions_dlg.wink}. Bài viết này điểm danh vài trình biên dịch JS có máu mặt.

Rhino

Kính lão đắc thọ{#emotions_dlg.laughing}. Trình biên dịch có tuổi tác nhất có lẽ là Rhino. Nó dịch JS thành Java bytecode để chạy trên máy ảo Java. Rhino hay ở chỗ được tích hợp sẵn trong Java, dở ở chỗ tốc độ chỉ nhanh hơn IE{#emotions_dlg.tongue_out}.

Để ý ngôn ngữ chỉ là tập hợp các qui luật, bản thân nó không chạy được. Do đó có 2 cách để 2 đoạn mã viết bằng 2 ngôn ngữ khác nhau tương tác với nhau:

Cách 1:
Đoạn mã 1/Ngôn ngữ 1 -- Môi trường chạy 1
.
/ \
|
\ /
.
Đoạn mã 2/Ngôn ngữ 2 -- Môi trường chạy 2

Cách 2:
Đoạn mã 1/Ngôn ngữ 1 -- Môi trường chạy 1
.
/ \
|
Đoạn mã 2/Ngôn ngữ 2
  • Ở cách 1 2 đoạn mã thông qua 2 môi trường để tương tác với nhau, 2 môi trường tương tác với nhau ví dụ thông qua kết nối TCP hoặc standard IO. Cách này chậm vì cần context switch/convert qua lại nhiều. Ta chọn cách này khi 2 đoạn mã/môi trường không cần tương tác với nhau nhiều. Ví dụ khi viết web thì controller và model có thể viết bằng ngôn ngữ này, sau đó tập hợp tất cả các biến cần thiết rồi truyền một phát cho view viết bằng ngôn ngữ khác. Ví dụ khác, chiêu thức reverse proxy để chạy Rails với Nginx hay được dùng vì mặc dù phải parse HTTP request 2 lần, nhưng dữ liệu chỉ truyền qua truyền lại 1 lần nên tốc độ vẫn cao. Tuy vậy, cách này cũng có cái hay ở chỗ 2 môi trường được cách li với nhau, nên về độ ổn định của toàn hệ thống thì có thể thiết kế để cái này chết thì cái kia vẫn sống, về độ bảo mật thì có thể thiết kế để cái này không hack được cái kia v.v.
  • Ở cách 2 chỉ có 1 môi trường chạy, ngôn ngữ này được biến đổi thành ngôn ngữ kia, đây là cách hoạt động của JRuby và Rhino. Khi viết chương trình dùng JRuby thì về bản chất ta vẫn đang lập trình Java, chỉ có điều là ta dùng cú pháp của Ruby mà thôi. Cách này rất tốt vì tốc độ cao và cho phép 2 ngôn ngữ tương tác seamlessly với nhau, nhưng không phải lúc nào cũng thực hiện được vì dịch ngôn ngữ này sang ngôn ngữ khác là chuyện không phải lúc nào cũng làm được một cách hiệu quả. Ví dụ ngay trong bài viết này có nhiều từ tiếng Anh khó có thể Việt hoá.

V8

TraceMonkey

SFX

DOM

[còn tiếp]

Đọc thêm

Comments

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content