JavaScript đã biên dịch

Javascript nổi tiếng với các nhà phát triển vì nhiều ưu điểm, tính năng của nó. Vì vậy, loạt bài này nhằm liệt kê và giải thích từng tính năng của ngôn ngữ lập trình này

Vì vậy, trong bài viết này, chúng ta hãy tìm hiểu tại sao JavaScript được biên dịch, biên dịch JIT(Just In Time) & nó có nghĩa là gì?

Biên dịch là gì

Biên dịch là một quá trình chuyển đổi mã nguồn chương trình thành mã nhị phân mà máy có thể đọc được trước khi thực thi. Hầu hết các ngôn ngữ chương trình hiện đại đều sử dụng mô hình này để gửi gói ứng dụng để thực thi chúng tại máy của người dùng cuối. Điều này giúp tăng hiệu suất ứng dụng vì mã được trình biên dịch tối ưu hóa cho nền tảng của người dùng cuối

Tuy nhiên, với mô hình này, mỗi chương trình cần một quy trình biên dịch khác nhau cho các nền tảng khác nhau do những thay đổi cơ bản của chúng trong tập lệnh CPU. Bạn có thể đã quan sát thấy khi muốn cài đặt một ứng dụng cho máy của mình, bạn cần tìm một ứng dụng có thể cài đặt cụ thể cho HĐH, phần cứng, v.v.

Thông dịch viên là gì

Trình thông dịch là một chương trình thực thi các hướng dẫn của chương trình mà không yêu cầu chúng phải được biên dịch trước thành định dạng mà máy có thể đọc được
phương pháp giải thích có thể chọn một trong các phương pháp dưới đây

  • phân tích cú pháp mã nguồn để thực thi hành vi,
  • dịch mã thành biểu diễn được tối ưu hóa trung gian và thực thi nó
  • đã chọn thực thi mã byte được biên dịch trước (từ trình biên dịch) cùng với trình thông dịch thích hợp VM

Với mã được giải thích khi đang di chuyển, việc thực thi có thể được bắt đầu ngay lập tức. Vì mã được biên dịch nhanh chóng nên nó không cần phải được xây dựng riêng cho bất kỳ nền tảng, hướng dẫn nào và làm cho nó trở thành trải nghiệm phân phối tuyệt vời cho các nhà phát triển

Vì mã không được biên dịch, mã được giải thích sẽ không có bất kỳ tối ưu hóa nào được thực hiện trước khi thực thi mã

JavaScript là một phiên dịch, biên dịch JIT

Như chúng tôi đã quan sát, Trình biên dịch đảm bảo rằng mã đã biên dịch được tối ưu hóa để thực thi nhanh hơn & Trình thông dịch đảm bảo rằng việc thực thi mã có thể ngay lập tức đảm bảo khởi động nhanh hơn

Vì vậy, các công cụ JavaScript được thiết kế để tận dụng tốt nhất cả hai cách tiếp cận và phát triển mô hình Biên dịch Just In Time (JIT). JavaScript có thể được mô tả là cả ngôn ngữ được biên dịch và thông dịch nhưng việc triển khai thực tế khác nhau đối với từng công cụ

Một số động cơ phổ biến được liệt kê dưới đây

  • V8 từ Google. phổ biến nhất. Kích hoạt nút. js, Chrome và các trình duyệt dựa trên crom khác
  • Khỉ nhện. Kích hoạt Firefox và triển khai ngã ba của nó
  • Cho phép Safari và các trình duyệt dựa trên WebKit khác

Một số bước chính trong việc thực thi Javascript như sau,

  • Mã được phân tích cú pháp để tạo định dạng trung gian, chẳng hạn như AST (Cây cú pháp trừu tượng) có thể được sử dụng để tối ưu hóa
  • Định dạng trung gian được trình thông dịch dịch sang mã máy có thể đọc được để bắt đầu thực thi nhanh chóng
  • Việc thực thi mã được tạo được theo dõi liên tục và bất kỳ đơn vị mã nào có phạm vi tối ưu hóa đều được chuyển qua bước biên dịch để tạo mã được tối ưu hóa cho cùng một mã
  • Một lần, mã được tối ưu hóa được tạo, nó được thay thế bằng mã do trình thông dịch tạo
  • Do đó đảm bảo hiệu suất được cải thiện dần dần

Hy vọng nó đã giúp bạn hiểu tại sao Javascript được gọi là phiên dịch hoặc Biên dịch JIT. Hãy chia sẻ suy nghĩ của bạn

Theo dõi tôi để có thêm các bài viết thú vị về JavaScript và Phát triển Web. Ngoài ra, vui lòng theo dõi trên Twitter

Thêm nội dung bằng tiếng Anh. io. Đăng ký nhận bản tin hàng tuần miễn phí của chúng tôi. Nhận quyền truy cập độc quyền để viết các cơ hội và lời khuyên trong cộng đồng của chúng tôi Discord

Vì vậy, bạn nghĩ rằng JavaScript được giải thích? . Đây là lý do tại sao

hình ảnh từ fossbytes. com

Tất cả chúng ta đều biết câu hỏi phổ biến mà mọi lập trình viên phải hỏi về ngôn ngữ lập trình mà anh ta học - nó được biên dịch hay thông dịch

Trước tiên hãy xác định ý nghĩa của từng ý nghĩa đó

Biên soạn vs. Diễn dịch

Có rất nhiều thông tin về từng quy trình đó nên tôi sẽ giữ cho nó đơn giản

Ngôn ngữ biên dịch — tệp nguồn thường sẽ được “biên dịch” thành mã máy (hoặc mã byte) trước khi được thực thi

Ngôn ngữ thông dịch — mã nguồn sẽ được đọc và thực thi trực tiếp, từng dòng một

Và giống như mọi thứ trong cuộc sống, tôi thực sự tin rằng bạn có thể hiểu rõ hơn bằng rượu

Giả sử bạn muốn làm Mojito, bạn truy cập Google (hoặc Bing nếu bạn là người lập dị) và tìm kiếm danh sách nguyên liệu, đây là kết quả bạn nghĩ ra

· Nước cốt của 1 quả chanh
· Rượu rum trắng
· Cây bạc hà
· Nuoc soda

Có 2 cách để pha cocktail, cách Biên dịch hoặc Thông dịch viên

Trước tiên, người pha chế sẽ sắp xếp tất cả các nguyên liệu trước mặt anh ta, trước khi thực hiện bất kỳ pha trộn nào, số lượng cụ thể của từng nguyên liệu riêng lẻ, chỉ sau đó, anh ta mới trộn tất cả các thành phần sẵn có của ly cocktail

Thông dịch viên sẽ cầm ly của mình và bắt đầu đọc thành phần, từng dòng một. anh ta sẽ đi đến tủ lạnh của mình và lấy một quả chanh, cắt nó và vắt trực tiếp vào ly, sau đó rót rượu rum trắng, v.v.

Thời gian xây dựng (chuẩn bị) của trình biên dịch sẽ lâu hơn các trình thông dịch. tuy nhiên, thời gian chạy (trộn) sẽ ngắn hơn nhiều

Bây giờ bạn đã biết sự khác biệt, hãy nói về JavaScript

Vì vậy - JavaScript được biên dịch hoặc giải thích

Chà, giống như nhiều bạn, khi tôi bắt đầu học JavaScript, tôi đã được cho biết rằng JavaScript - giống như hầu hết các ngôn ngữ kịch bản là một ngôn ngữ được giải thích và tôi đã sống với giả định này trong hòa bình

Đọc đoạn sau được xuất bản tại web. standford. giáo dục

JavaScript là ngôn ngữ được giải thích, không phải là ngôn ngữ được biên dịch. Một chương trình như C++ hoặc Java cần được biên dịch trước khi chạy

Theo hầu hết internet, JavaScript là một ngôn ngữ được giải thích, nhưng điều đó không nhất thiết đúng

Ví dụ: công cụ V8, công cụ chạy Google Chrome và NodeJS, biên dịch thành mã gốc bên trong

V8 tăng hiệu suất bằng cách biên dịch JavaScript thành mã máy gốc trước khi thực thi nó, so với thực thi mã byte hoặc diễn giải nó

Ngoài ra, Rhino và TraceMonkey sử dụng quá trình biên dịch như một phần của quy trình của họ

TraceMonkey thêm trình biên dịch mã gốc vào công cụ JavaScript® của Mozilla (được gọi là “SpiderMonkey”)

Ví dụ, nhìn vào chương trình này

console.log('Hippity Hoppity');
oops oops;

Về lý thuyết, một trình thông dịch sẽ đọc dòng đầu tiên, in ra “Hippity Hoppity” và chỉ sau đó đưa ra Lỗi Cú pháp

Nhưng đối với môi trường thời gian chạy của JavaScript hiện đại thì không phải như vậy, ngay sau khi chạy chương trình, trước khi thực hiện chức năng ghi nhật ký, nó đã bị treo

Một ví dụ khác là Hoisting, xem xét

max(1, 2);
// 2
function max(num1, num2){
return num1 > num2 ? num1 : num2;
}

Làm cách nào để công cụ JS biết về Hàm 'max' trước khi nó "đạt" đến mức giảm tốc?

Vì vậy, JavaScript là một ngôn ngữ được biên dịch, phải không?

Chà, nó phức tạp. trước đây, mọi ngôn ngữ lập trình đều khá dễ phân loại thành ngôn ngữ này hay ngôn ngữ kia, nhưng cách tiếp cận hiện đại để chạy mã nguồn đã tạo ra một loại khu vực “ở giữa”

Tất nhiên, kết quả của quá trình biên dịch không thể di chuyển giữa các công cụ JS khác nhau. Ngoài ra, JS không được biên dịch trước, giống như ngôn ngữ biên dịch truyền thống. Tuy nhiên, các công cụ JS hiện đại thực hiện các bước tương tự như các trình biên dịch khác

Xem xét dòng chảy của một chương trình

1. Mã nguồn được biên dịch (Babel) và đóng gói (Webpack)

2. Công cụ JS phân tích mã thành Cây cú pháp trừu tượng (AST)

3. Công cụ chuyển đổi AST đó thành một loại mã byte, sau đó được trình biên dịch JIT chuyển đổi hơn nữa

4. JS VM thực thi chương trình

Một số người sẽ lập luận rằng máy ảo JS đang “thông dịch” “mã byte”, nhưng nếu bạn nói như vậy thì bạn cũng nói rằng Java (một ngôn ngữ dựa trên JVM khác) cũng được thông dịch

Cái giếng?. Nó được biên dịch sau đó?

Câu trả lời gần như có hơn là không, nhưng đó là vấn đề về quan điểm và cách thực hiện, tôi đoán vậy

Tôi thực sự khuyên bạn nên tiếp tục khám phá chủ đề này và cho tôi biết suy nghĩ của bạn trong phần bình luận

Và lần tới khi bạn đứng trước một Người phỏng vấn và anh ấy hỏi bạn câu hỏi này - chỉ cần nói với anh ấy rằng bạn đã biên soạn, giải thích về bản thân và sau đó đưa cho anh ấy liên kết đến bài viết này

Có cách nào để biên dịch JavaScript không?

Có liên quan. Nhiều ngôn ngữ lập trình yêu cầu trình biên dịch để biên dịch chúng thành mã mà máy có thể đọc được, nhưng Trình duyệt web có thể đọc JavaScript mà không cần trình biên dịch . Tuy nhiên, trình biên dịch JavaScript có thể tối ưu hóa mã JavaScript của bạn và tạo mã cải tiến.

JavaScript có được biên dịch trong Nodejs không?

Nút. js sử dụng V8 và nó biên dịch JavaScript thành một chiến lược tối ưu hóa . Vì vậy, JavaScript chạy ở phía máy chủ thông qua nút.

JS có được biên dịch sang C++ không?

Chương trình JS được biên dịch bằng mã C++ (V8) và cuối cùng trở thành mã máy.