Tại sao nó được gọi là javascript động cơ v8?

V8 là tên của công cụ JavaScript hỗ trợ Google Chrome. Đó là thứ lấy JavaScript của chúng tôi và thực thi nó trong khi duyệt bằng Chrome

 

V8 cung cấp môi trường thời gian chạy trong đó JavaScript thực thi. DOM và các API nền tảng web khác do trình duyệt cung cấp

Điều thú vị là công cụ JavaScript độc lập với trình duyệt mà nó được lưu trữ. Tính năng chính này đã kích hoạt sự phát triển của Node. js. V8 được chọn là động cơ được chọn bởi Node. js trở lại vào năm 2009 và sự phổ biến của Node. js bùng nổ, V8 trở thành công cụ hiện hỗ trợ một lượng mã phía máy chủ đáng kinh ngạc được viết bằng JavaScript

nút. js rất lớn và nhờ đó, V8 cũng cung cấp năng lượng cho các ứng dụng dành cho máy tính để bàn, với các dự án như Electron

Các công cụ JS khác

Các trình duyệt khác có công cụ JavaScript của riêng họ

  • Firefox có Spidermonkey
  • Safari có JavaScriptCore (còn gọi là Nitro)
  • Cạnh có Chakra

và nhiều người khác cũng tồn tại

Tất cả các công cụ đó đều triển khai tiêu chuẩn ECMA ES-262, còn được gọi là ECMAScript, tiêu chuẩn được sử dụng bởi JavaScript

 

Động cơ Chrome V8

  • Công cụ V8 được viết bằng C ++ và được sử dụng trong Chrome và Nodejs
  • Nó triển khai ECMAScript như được chỉ định trong ECMA-262
  • Động cơ V8 có thể chạy độc lập, chúng tôi có thể nhúng nó vào chương trình C++ của riêng mình

Hãy để chúng tôi hiểu điểm cuối cùng tốt hơn một chút. V8 có thể chạy độc lập và đồng thời chúng tôi có thể thêm triển khai chức năng của riêng mình trong C++ để thêm các tính năng mới cho JavaScript

Ví dụ. print('hello world') không phải là một câu lệnh hợp lệ trong Node. js. Nó sẽ báo lỗi nếu chúng ta biên dịch nó. Nhưng chúng ta có thể thêm triển khai chức năng in của riêng mình trong C++ trên V8, mã nguồn mở tại Github, do đó làm cho chức năng in hoạt động nguyên bản. Điều này cho phép JavaScript hiểu nhiều hơn những gì tiêu chuẩn ECMAScript chỉ định mà JavaScript nên hiểu

Tại sao nó được gọi là javascript động cơ v8?

Đây là một tính năng mạnh mẽ vì C ++ có nhiều tính năng hơn với tư cách là ngôn ngữ lập trình so với JavaScript, vì nó gần với phần cứng hơn như xử lý các tệp và thư mục trên ổ cứng

Việc cho phép chúng tôi viết mã bằng C++ và cung cấp mã đó cho JavaScript giúp chúng tôi có thể thêm nhiều tính năng hơn vào JavaScript

Nút. js tự nó là một triển khai C++ của công cụ V8 cho phép lập trình phía máy chủ và các ứng dụng mạng

Bây giờ chúng ta hãy xem xét một số mã nguồn mở bên trong công cụ. Để làm điều này, bạn cần vào v8/samples/shell. thư mục cc

Tại đây, bạn có thể thấy việc triển khai các chức năng khác nhau, chẳng hạn như PrintRead, vốn không có sẵn trong Node. js

 

Tìm kiếm hiệu suất

V8 được viết bằng C++ và nó liên tục được cải tiến. Nó có thể di động và chạy trên Mac, Windows, Linux và một số hệ thống khác

Trong phần giới thiệu V8 này, tôi sẽ bỏ qua các chi tiết triển khai của V8. chúng có thể được tìm thấy trên các trang web có thẩm quyền hơn (e. g. trang web chính thức của V8) và chúng thay đổi theo thời gian, thường là triệt để

V8 luôn phát triển, giống như các công cụ JavaScript khác xung quanh, để tăng tốc Web và Nút. hệ sinh thái js

Trên web, có một cuộc đua về hiệu suất đã diễn ra trong nhiều năm và chúng tôi (với tư cách là người dùng và nhà phát triển) được hưởng lợi rất nhiều từ cuộc cạnh tranh này vì chúng tôi nhận được các máy nhanh hơn và tối ưu hơn qua từng năm

biên soạn

JavaScript thường được coi là một ngôn ngữ được giải thích, nhưng các công cụ JavaScript hiện đại không còn chỉ giải thích JavaScript, chúng biên dịch nó

Điều này xảy ra từ năm 2009 khi trình biên dịch JavaScript SpiderMonkey được thêm vào Firefox 3. 5, và mọi người đã làm theo ý tưởng này

JavaScript được V8 biên dịch nội bộ với trình biên dịch just-in-time (JIT) để tăng tốc độ thực thi

Điều này có vẻ phản trực giác, nhưng kể từ khi Google Maps ra đời vào năm 2004, JavaScript đã phát triển từ một ngôn ngữ thường thực thi vài chục dòng mã thành các ứng dụng hoàn chỉnh có hàng nghìn đến hàng trăm nghìn dòng chạy trong trình duyệt

Các ứng dụng của chúng tôi hiện có thể chạy hàng giờ bên trong trình duyệt, thay vì chỉ là một vài quy tắc xác thực biểu mẫu hoặc tập lệnh đơn giản

Trong thế giới mới này, việc biên dịch JavaScript có ý nghĩa hoàn hảo bởi vì mặc dù có thể mất thêm một chút thời gian để JavaScript sẵn sàng, nhưng sau khi hoàn thành, nó sẽ hiệu quả hơn nhiều so với mã được diễn giải thuần túy

Javascript nổi tiếng trong giới lập trình viên là một ngôn ngữ tệ hại. Nó không có lớp, gõ lỏng lẻo và bị cản trở bởi các vấn đề về trình duyệt chéo. Douglas Crockford, tác giả của JavaScript. The Good Parts, cho biết “JavaScript chứa một số ý tưởng hay nhất từng được đưa vào ngôn ngữ lập trình và nó chứa một số ý tưởng tồi tệ nhất từng được đưa vào ngôn ngữ lập trình. ” Nó được tạo ra chỉ trong 10 ngày vào năm 1995 và không được tiêu chuẩn hóa bởi ECMA cho đến gần 3 năm sau. Microsoft ban đầu quyết định không triển khai các tiêu chuẩn mới, gần như đặt dấu chấm hết cho ngôn ngữ sơ khai

Công cụ JavaScript đầu tiên, có tên mã là SpiderMonkey, được xây dựng cho Netscape Navigator và chỉ đơn giản là một trình thông dịch đọc và thực thi mã nguồn. Vào thời điểm đó và trong nhiều năm sau đó, Javascript thường bao gồm một số chức năng được viết vào phần đầu của trang web hoặc một số sự kiện nội tuyến. Phiên dịch mã khi cần là thỏa đáng, nếu không nhanh

Chúng ta sẽ bỏ qua 10 năm đầy biến động tiếp theo, đến năm 2004, khi Google giới thiệu một ứng dụng mới; . Đối với Javascript và các nhà phát triển ở khắp mọi nơi, đó là một công cụ thay đổi cuộc chơi. Một người thay đổi cuộc chơi rất, rất chậm. Các trình duyệt bị sa lầy vì công cụ JavaScript chỉ đơn giản là cày xới tất cả mã đó.  

Đã có vô số trang và bit dành riêng cho việc giải thích và mô tả về các công cụ JavaScript, hãy xem phần 'Tìm hiểu thêm" ở cuối bài đăng này để biết ví dụ. Và đó là một chủ đề mà ngay cả hầu hết các nhà phát triển JS chuyên nghiệp cũng không hiểu rõ về nó. Vì vậy, tôi muốn cung cấp cho bạn một cái nhìn tổng quan rất ngắn gọn về động cơ, đặc biệt là món đồ chơi bóng bẩy nhất hiện nay, động cơ V8

Hầu hết các công cụ Javascript xử lý mã trong một vài bước. Đầu tiên, phân tích từ vựng chia mã thành các mã thông báo để xác định ý nghĩa của chúng. Sau đó, mã thông báo được phân tích bởi trình phân tích cú pháp và được tích hợp vào cây cú pháp bằng ngôn ngữ trung gian, chẳng hạn như mã byte. Cuối cùng, trình biên dịch JIT khởi động và thực thi mã

Vào năm 2008, Google đã giới thiệu phiên bản cải tiến của động cơ, V8

Động cơ V8 sử dụng một số luồng. Chủ đề chính làm những gì bạn mong đợi. nó tìm nạp mã của bạn, biên dịch mã và thực thi mã đó. Ngoài ra còn có một luồng riêng biệt để biên dịch, để luồng chính có thể tiếp tục thực thi trong khi luồng này đang tối ưu hóa mã và một luồng trình lược tả sẽ cho bộ thực thi biết phương thức nào chúng ta dành nhiều thời gian, để trình biên dịch có thể tối ưu hóa chúng. Ngoài ra còn có một số chủ đề để xử lý thu gom rác và loại bỏ mã chết

V8 có 2 trình biên dịch là Full-Codegen và Crankshaft. Full-Codegen phân tích cú pháp JavaScript trực tiếp thành mã máy mà không cần ngôn ngữ trung gian, cho phép nó bắt đầu thực thi sớm hơn. Trình biên dịch JIT có tên là Crankshaft tạo mã được tối ưu hóa cho các phương thức nóng. Điều này có nghĩa là trong cùng một chương trình V8, các mức mã được tối ưu hóa khác nhau cùng tồn tại cùng một lúc

Trục khuỷu là nơi tốc độ thực sự bắt nguồn. Trong khi Full-Codgen đang chạy, trình cấu hình thời gian chạy xác định "mã nóng", mã được thực thi nhiều lần. Tại thời điểm này, chuỗi hiện tại ngừng thực thi mã của bạn và chuyển nó tới Trục khuỷu. Cơ sở ở đây cho tất cả các tối ưu hóa là bộ nhớ đệm nội tuyến, một kỹ thuật được tiên phong bởi Smaltalk. Nó bao gồm việc vá mã bằng mã tốt hơn ngay lập tức

JS được phân tích cú pháp trước tiên được biên dịch thành một biểu diễn cấp cao có tên là Hydrogen, nơi hầu hết các tối ưu hóa được thực hiện. Đây là nơi chuyên môn hóa xảy ra. Chuyên môn hóa loại bỏ cái mà JavaScript gọi là thao tác đóng hộp và mở hộp. Vì vậy, ví dụ: nếu tập lệnh của bạn thường chạy một hàm trên một tập hợp các số nguyên, thì nó sẽ tránh sắp xếp qua tất cả các bước cần thiết để phân tích chuỗi và số float, đồng thời lưu các bước cần thiết để phân tích cú pháp các số nguyên của bạn để nó không phải chạy chúng

Vì JS không được nhập, nên không có gì đảm bảo rằng mã được tạo chuyên biệt sẽ tiếp tục hoạt động. Hàm của bạn có thể được gọi để hoạt động với chuỗi hoặc nhân đôi. Mã này hiện phải được hủy tối ưu hóa, rút ​​ra khỏi chuỗi đang chạy và thay thế bằng mã thời gian chạy ban đầu. Điều này được thực hiện bằng một kỹ thuật gọi là thay thế trên ngăn xếp (OSR). OSR là cơ chế duy trì ngữ nghĩa của khung ngăn xếp hiện tại trong khi chuyển đổi giữa mã được tối ưu hóa và mã không được tối ưu hóa. Sử dụng OSR, khi các loại đối số chức năng của bạn chuyển đổi, mã được tối ưu hóa sẽ được kéo và chuỗi của bạn được đưa trở lại chuỗi được tạo Hydrogen ban đầu để biên dịch lại

Công việc cuối cùng của trục khuỷu là hạ thấp biểu diễn xuống một mức gọi là Lithium, là kiến ​​trúc cụ thể. Lithium là đại diện cuối cùng được dịch thành mã máy. Ở đây, chúng ta lại thấy OSR. Mã đã chạy trong trình duyệt hoặc ứng dụng của bạn trong khi tất cả các bước này đang diễn ra và bây giờ chúng tôi đã có phiên bản được biên dịch và tối ưu hóa đầy đủ, chúng tôi có thể chuyển sang phiên bản được tối ưu hóa ở giữa quá trình thực thi

Chỉ cần chạy đồng thời hai trình biên dịch sẽ tăng hiệu suất lên 27%. Và nó không được thực hiện. Cứ sau sáu tuần, nhóm V8 lại phát hành một nhánh mới. Vào ngày 11 tháng 9, nhóm đã công bố phiên bản 6. 2, sẽ được phát hành cùng với Chrome 62 sau vài tuần nữa. Phiên bản tiếp theo này bao gồm cái mà nhóm gọi là “tất cả các loại tiện ích dành cho nhà phát triển” và tối ưu hóa hiệu suất. Bạn có thể đọc về bản phát hành tiếp theo TẠI ĐÂY

Tìm hiểu thêm

Kênh nhà phát triển Chrome V8. https. // nhà phát triển. Google. com/v8/

Chương trình lập trình viên mũ đỏ. Công cụ Javascript & So sánh hiệu suất (V8, Chakra, Chakra Core). https. // nhà phát triển. Mũ đỏ. com/blog/2016/05/31/javascript-engine-performance-comparison-v8-charkra-chakra-core-2/

V8 có phải là một công cụ JavaScript không?

V8 là công cụ WebAssembly và JavaScript hiệu suất cao mã nguồn mở của Google , được viết bằng C++. Nó được sử dụng trong Chrome và trong Node. js, trong số những người khác. Nó triển khai ECMAScript và WebAssembly, đồng thời chạy trên Windows 7 trở lên, macOS 10. 12+ và hệ thống Linux sử dụng bộ xử lý x64, IA-32, ARM hoặc MIPS.

Ai đã tạo ra công cụ JavaScript V8?

V8 là một công cụ JavaScript nguồn mở và miễn phí được phát triển bởi Dự án Chromium dành cho trình duyệt web Google Chrome và Chromium. Người tạo dự án là Lars Bak . Phiên bản đầu tiên của động cơ V8 được phát hành cùng lúc với phiên bản đầu tiên của Chrome. 2 tháng 9 năm 2008.

Tại sao nút JS sử dụng động cơ V8?

Cần có V8 cho Nút hiện tại. công cụ js hoạt động . Trong trường hợp không có V8, nó sẽ không có công cụ JavaScript và do đó sẽ không thể chạy mã JavaScript. Giao diện V8 giữa C++ và JavaScript được sử dụng bởi các liên kết mã gốc đi kèm với Node.

V8 có phải là công cụ JavaScript nhanh nhất không?

Công cụ V8 của Google là nhanh nhất . Và nó chỉ quan trọng với bạn nếu bạn đang phát triển thứ gì đó cần diễn giải Javascript. Xem câu trả lời này trên StackOverflow để biết điểm chuẩn. Lưu câu trả lời này.