Hướng dẫn how is javascript run by the browser? - javascript được chạy bởi trình duyệt như thế nào?

Node.js & npm

Trong bài học này, chúng ta sẽ xem xét động cơ JavaScript và giải phẫu của nó. Chúng tôi cũng sẽ tìm hiểu về ngăn xếp cuộc gọi của JavaScript, vòng lặp sự kiện, hàng đợi nhiệm vụ và nhiều phần khác làm cho JavaScript như chúng tôi biết nó hoạt động đúng.

Đã hỏi 11 năm, 7 tháng trước 11 years, 7 months ago

Đã xem 31k lần 31k times

Tôi đang cố gắng tìm hiểu xem các trình duyệt web có sử dụng trình thông dịch để thực thi JavaScript hay một số loại trình biên dịch hay không. Người ta biết rằng các ngôn ngữ kịch bản được giải thích không được biên soạn; Tuy nhiên, có JScriptCompiler có thể biên dịch JavaScript thành MSIL. Điều này khiến tôi tự hỏi liệu IE, FF, Chrome, v.v.

Bất cứ ai cũng có thể trích dẫn phương thức cụ thể trong đó các trình duyệt chạy JavaScript?

JMAX

25.6K12 Huy hiệu vàng67 Huy hiệu bạc87 Huy hiệu đồng12 gold badges67 silver badges87 bronze badges

Đã hỏi ngày 15 tháng 3 năm 2011 lúc 19:51Mar 15, 2011 at 19:51

1

Trong quá khứ, JavaScript đã được giải thích - và không có gì hơn.

Trong hai năm qua, các trình duyệt đã triển khai các công cụ JavaScript mới, cố gắng biên dịch một số phần mã, để tăng tốc JavaScript.


Để biết thêm thông tin về những gì đã được thực hiện cho Mozilla Firefox, bạn nên xem:

  • JavaScript:TraceMonkey
  • Tổng quan về Tracemonkey

Để biết thêm thông tin về động cơ của Chrome, bạn sẽ muốn đọc:

  • Tạo mã máy động

Và cho WebKit (Safari):

  • Thông báo Squirrelfish

Không chắc chắn những gì đã được (hoặc là) được thực hiện trên các trình duyệt khác - nhưng tôi cho rằng cùng một loại điều tồn tại, hoặc sẽ tồn tại.


Và, tất nhiên, để biết thêm thông tin: JavaScript Engine, trên Wikipedia.JavaScript engine, on wikipedia.

Đã trả lời ngày 15 tháng 3 năm 2011 lúc 19:55Mar 15, 2011 at 19:55

Hướng dẫn how is javascript run by the browser? - javascript được chạy bởi trình duyệt như thế nào?

Pascal Martinpascal MartinPascal MARTIN

389K77 Huy hiệu vàng647 Huy hiệu bạc656 Huy hiệu Đồng77 gold badges647 silver badges656 bronze badges

3

Đã trả lời ngày 15 tháng 3 năm 2011 lúc 19:57Mar 15, 2011 at 19:57

Các tập lệnh JavaScript thường được giải thích trong các trình duyệt web (không chắc chắn về Chrome và V8), nhưng ở đây và ở đó bạn có thể tìm thấy một số phần mềm độc lập có thể biên dịch nó ít nhiều chính xác. Ngôn ngữ này không nhanh như nhiều người khác và tốc độ và chức năng của anh ấy phụ thuộc vào động cơ trình duyệt.

Đã trả lời ngày 15 tháng 3 năm 2011 lúc 19:58Mar 15, 2011 at 19:58

FrizifriziFrizi

2.8301 Huy hiệu vàng18 Huy hiệu bạc25 Huy hiệu đồng1 gold badge18 silver badges25 bronze badges

Trong khi CSS đang được phân tích cú pháp và CSSOM được tạo, các tài sản khác, bao gồm các tệp JavaScript, được tải xuống. Điều này đang xảy ra nhờ preloader mà chúng tôi đã đề cập trong các bài viết trước.

A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.

5. Thực thi JavaScript

Vì vậy, sau khi chúng tôi nhận được tệp JavaScript từ máy chủ, mã được giải thích, biên dịch, phân tích cú pháp và thực thi. Máy tính không thể hiểu mã JavaScript, chỉ có trình duyệt mới có thể. Mã JS cần được dịch thành một cái gì đó mà máy tính có thể hoạt động và đây là công việc của Javascript browser engine (không bị nhầm lẫn với browser engine). Tùy thuộc vào trình duyệt, động cơ JS có thể có tên khác nhau và hoạt động khác nhau.

Động cơ JavaScript

Một công cụ JavaScript (đôi khi còn được gọi là ECMAScript engine) là một phần mềm thực thi (chạy) mã JavaScript trong trình duyệt và không chỉ (ví dụ: động cơ V8 là thành phần cốt lõi của môi trường Node.js).

Các công cụ JavaScript thường được phát triển bởi các nhà cung cấp trình duyệt web và mọi trình duyệt chính đều có một. Chúng tôi đã nói rằng các trình duyệt được sử dụng nhiều nhất với ngày hôm nay là Chrome, Safari, EdgeFirefox. Mỗi người đang sử dụng một công cụ JavaScript khác nhau và đó là:

V8 V8 là động cơ JavaScript hiệu suất cao của Google. Nó được viết bằng C ++ và nó được sử dụng trong Chrome và trong Node.js, trong số những người khác. Nó thực hiện preloader0 (một tiêu chuẩn JavaScript nhằm đảm bảo khả năng tương tác của các trang web trên các trình duyệt web khác nhau) và preloader1. Nó thực hiện ECMA-262.
V8 is Google’s high-performance JavaScript engine. It is written in C++ and it's used in Chrome and in Node.js, among others. It implements preloader0 (a JavaScript standard meant to ensure the interoperability of web pages across different web browsers) and preloader1. It implements ​ECMA-262.

JavaScriptCore JavaScriptCore là công cụ JavaScript tích hợp cho WebKit và nó cung cấp năng lượng cho trình duyệt Safari, Mail và các ứng dụng khác được sử dụng trên MacOS. Nó hiện đang thực hiện Ecmascript như trong đặc tả ECMA-262. Ngoài ra, nó cũng được gọi là preloader2 hoặc preloader3.
JavaScriptCore is the built-in JavaScript engine for WebKit and it powers the Safari browser, Mail and other applications used on macOS. It currently implements ​ECMAScript as in ​ECMA-262 specification. Also it also called preloader2 or preloader3.

Chakra Chakra là một công cụ JavaScript được phát triển bởi Microsoft cho trình duyệt web Microsoft Edge và các ứng dụng Windows khác. Nó thực hiện Ecmascript 5.1 và có hỗ trợ một phần (phát triển) cho Ecmascript 6. Nó được viết bằng C ++.
Chakra is a Javascript engine developed by Microsoft for its Microsoft Edge web browser and other Windows applications. It implements ECMAScript 5.1, and has partial (growing) support for ECMAScript 6. It is written in C++.

Spidermonkey Spidermonkey là động cơ JavaScript và Webass của Mozilla. Nó được viết bằng C ++, JavaScript và Rust và nó được sử dụng để cung cấp năng lượng cho Firefox, servo và các dự án khác.
SpiderMonkey is Mozilla's Javascript and WebAssembly Engine. It is written in C++, Javascript and Rust and it is used to power Firefox, Servo and other projects.

Ban đầu, động cơ JavaScript là phiên dịch đơn giản. Các trình duyệt hiện đại mà chúng ta sử dụng ngày nay có khả năng làm một cái gì đó gọi là preloader4, sự pha trộn giữa preloader5 và preloader6.

Biên dịch trong quá trình biên dịch, một phần mềm có tên preloader7 lấy mã được viết bằng ngôn ngữ cấp cao và chuyển đổi nó thành mã máy, tất cả cùng một lúc. Một tệp trung gian (được gọi là preloader8) được tạo và tệp đó có thể chạy trên bất kỳ máy nào. Sau khi các bước này được thực hiện, mã có thể được thực thi (ngay sau đó, đôi khi trong tương lai hoặc không bao giờ).
During compilation, a piece of software called preloader7 takes the code written in a high-level language and converts it into machine code, all at once. An intermediate file (called an preloader8) is created and that file can run on any machine. After these steps are taken, the code can be executed (imediately after, sometimes in the future or never).

Hướng dẫn how is javascript run by the browser? - javascript được chạy bởi trình duyệt như thế nào?

Giải thích Trong quá trình giải thích, trình thông dịch đang đi qua dòng mã JavaScript theo từng dòng và thực hiện nó một cách đúng đắn. Không có bản biên dịch nào diễn ra để không có mã đối tượng nào được tạo (đầu ra của mã được tạo bởi chính trình thông dịch, sử dụng các cơ chế nội bộ của nó). Các phiên bản cũ hơn của JavaScript Sử dụng loại thực thi mã này.
During interpretation, the interpreter is going through the Javascript code line by line and executes it imediately. No compilation is taking place so no Object Code is created (the output of the code is created by the interpreter itself, using its internal mechanisms). Older versions of Javascript use this type of code execution.

Hướng dẫn how is javascript run by the browser? - javascript được chạy bởi trình duyệt như thế nào?

Tổng hợp JIT preloader9 là một tính năng của một thông dịch viên cho một ngôn ngữ nhất định và nó cố gắng tận dụng cả hai A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.0. Cho dù trong A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.1, mã được dịch trước khi được thực thi, trong A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.2, mã được dịch A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.3 (tại thời gian chạy). Vì vậy, chúng tôi có thể nói rằng mã nguồn được chuyển đổi thành mã máy khi đang bay. Các phiên bản mới hơn của JavaScript Sử dụng loại thực thi mã này.
preloader9 is a feature of an interpreter for a given language and it tries to take advantage of both A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.0. Whether during A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.1, the code is translated before it is executed, in A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.2 the code is translated A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.3 (at run time). So we could say that source code is converted to machine code on the fly. Newer versions of Javascript use this type of code execution.

Hướng dẫn how is javascript run by the browser? - javascript được chạy bởi trình duyệt như thế nào?

Một khía cạnh rất quan trọng về biên dịch JIT là nó sẽ biên dịch mã nguồn thành các hướng dẫn mã máy của máy chạy. Điều này có nghĩa là mã máy kết quả được tối ưu hóa cho kiến ​​trúc CPU của máy chạy.

Nói một cách siêu đơn giản, ba quá trình này có thể được nối lại với:

  • Trình biên dịch: Dịch mã
  • Trình thông dịch: Chạy mã
  • Trình biên dịch JIT: Dịch trong khi chạy mã

Ngày nay, ranh giới giữa các điều khoản preloader5 và preloader6 đã trở nên rất mờ nên đối tượng có thể được tranh luận rộng rãi. Nếu bạn muốn biết thêm về các quy trình này, bạn có thể đọc bài viết này trên Mozilla Hacks cho người mới bắt đầu.

Thông báo tôi đã đề cập đến phiên bản cũ hơn và mới hơn của JavaScript. Các trình duyệt không hỗ trợ các phiên bản mới hơn của ngôn ngữ sẽ diễn giải mã trong khi các phiên bản sẽ sử dụng một số phiên bản JIT để thực thi mã (động cơ V8, Chakra JavaScriptcore và Spidermonkey đều sử dụng JIT). Sự thật là mặc dù JavaScript là một ngôn ngữ được giải thích (nó không cần biên dịch), nhưng hầu hết các trình duyệt ngày nay sẽ sử dụng tổng hợp JIT để chạy mã, thay vì giải thích thuần túy.

Mã JavaScript được xử lý như thế nào

Khi mã JavaScript vào công cụ JavaScript, nó sẽ được phân tích cú pháp như bước đầu tiên. Điều này có nghĩa là mã được đọc và trong khi điều này đang xảy ra, mã được chuyển thành cấu trúc dữ liệu được gọi là A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.6 (AST). Mã sẽ được chia thành các phần có liên quan đến ngôn ngữ (như từ khóa A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.7 hoặc A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.8) và sau đó tất cả các phần này sẽ xây dựng cây Synta trừu tượng.

Giả sử chúng ta có một tệp chứa một chương trình chỉ làm một điều và đó là để xác định một biến:

const age = 25;

Nhập chế độ FullScreenen EXIT Mode FullScreen

Đây là cách dòng mã siêu đơn giản cực kỳ đơn giản này trông như một cây cú pháp trừu tượng (tôi đang sử dụng @Babel/Parser-7.16.12):

Hướng dẫn how is javascript run by the browser? - javascript được chạy bởi trình duyệt như thế nào?

Nếu bạn muốn tự chuyển đổi một số JavaScript thành một cây cú pháp trừu tượng, bạn có thể sử dụng công cụ này. Kết quả của AST sau khi viết biến thể của tôi thực sự lớn hơn nhiều và có nhiều nút được ẩn trong ảnh chụp màn hình.

Sau khi AST được xây dựng, nó được dịch thành mã máy và được thực thi ngay lập tức, vì JavaScript hiện đại sử dụng biên dịch đúng lúc. Việc thực hiện mã này sẽ được thực hiện bởi công cụ JavaScript, sử dụng một cái gì đó gọi là "ngăn xếp cuộc gọi".

A preloader is like a parser that scans the HTML file while the main parser is processing the HTML code. Its role is to look for resources like stylesheets, scripts or images (that also need to be retrieved from a server) and request them. Hopefully, by the time the HTML is parsed, those resources are already downloaded and ready to be processed.9

Vật liệu giải quyết:

  • Khỉ nhện
  • Chakracore
  • JavaScriptCore
  • v8
  • Nút
  • Mdn

JavaScript chỉ chạy trong trình duyệt?

Ngày nay, JavaScript có thể thực thi không chỉ trong trình duyệt mà còn trên máy chủ hoặc thực sự trên bất kỳ thiết bị nào có chương trình đặc biệt có tên là JavaScript Engine. Trình duyệt có một động cơ nhúng đôi khi được gọi là máy ảo JavaScript.JavaScript can execute not only in the browser, but also on the server, or actually on any device that has a special program called the JavaScript engine. The browser has an embedded engine sometimes called a “JavaScript virtual machine”.

JavaScript hoạt động như thế nào dưới mui xe?

Tất cả bắt đầu bằng việc lấy mã JavaScript từ mạng.V8 phân tích mã nguồn và biến nó thành một cây cú pháp trừu tượng (AST).Dựa trên AST đó, trình thông dịch đánh lửa có thể bắt đầu thực hiện việc của nó và sản xuất mã byte.Tại thời điểm đó, động cơ bắt đầu chạy mã và thu thập phản hồi loại.

Làm thế nào để trình duyệt xử lý JavaScript và HTML?

Từ các giải thích trước, trình duyệt đọc các byte RAW của tệp HTML từ đĩa (hoặc mạng) và biến nó thành ký tự.Các nhân vật được phân tích nhanh hơn vào mã thông báo.Ngay khi trình phân tích cú pháp đạt đến dòng, một yêu cầu được thực hiện để tìm nạp tệp CSS, Style.the browser reads raw bytes of the HTML file from the disk (or network) and transforms that into characters. The characters are further parsed into tokens. As soon as the parser reaches the line with , a request is made to fetch the CSS file, style.

Trình duyệt sử dụng JavaScript nào?

Một trình duyệt đi kèm với một công cụ JavaScript chịu trách nhiệm thực hiện bất kỳ JavaScript nào có bên trong ứng dụng web (trang web).Ví dụ: Google Chrome sử dụng động cơ V8 JavaScript.JavaScript engine that is responsible to execute any JavaScript contained inside a web application (web page). For example, Google Chrome uses V8 JavaScript engine.