2012-03-30 39 views
10

Trong trường hợp bạn không biết những gì tôi đang nói về, vui lòng đọc John Resig - How JavaScript Timers WorkIs JavaScript guaranteed to be single-threaded?Điều gì kích hoạt việc thực thi mã JavaScript?

Có một số kích tố enqueue nhiệm vụ trong thực hiện các công cụ JS FIFO. Đây không phải là một phần của bất kỳ tiêu chuẩn nào, vì vậy tôi đang cố gắng tìm một danh sách exhausive của những người kích hoạt. (Tôi đoán tất cả nắm để xử lý sự kiện nội bộ, như sự kiện kịch bản tải hoặc sự kiện timer, nhưng tôi thà bỏ qua internals của động cơ và nhìn mọi thứ từ quan điểm của người sử dụng xem.)

Vì vậy, đến nay tôi đã xác định được

  • <script> yếu tố trong văn bản ban đầu (bao gồm cả những người bổ sung bởi document.write) *
  • <script> yếu tố chèn vào bởi JS khi chạy *
  • Event handl ERS
    - đây bao gồm một loạt các trường hợp, chẳng hạn như tương tác người dùng, các sự kiện Lỗi, các thông điệp Worker Web hoặc callbacks Ajax ...
  • window.setTimeout
  • window.setInterval

*) chỉ trong trình duyệt/Môi trường DOM

Còn nữa? Bất kỳ sự khác biệt nào giữa các công cụ JS?

+0

Tương tự như window.setTimeout và window.setInterval, hiện giờ có window.requestAnimationFrame sẽ cố gắng kích hoạt hàm vào lần làm mới màn hình tiếp theo (thường là 1/60 giây) – jcmiller11

+1

Bạn có thể nhóm 'setTimeout() 'và' setInterval() 'cùng với các trình xử lý sự kiện vì đó là những gì chúng là: các sự kiện theo thời gian. Về cơ bản, chỉ có hai điều: trình xử lý sự kiện và tải tập lệnh. – slebetman

Trả lời

1

"JavaScript" làm tên ngôn ngữ không nên được sử dụng quá rộng.

ECMAScript là những gì bạn đang đề cập đến. Bạn có thể tìm thông tin về ECMAScript tại http://www.ecmascript.org/ Tiêu chuẩn ngôn ngữ được gọi là ECMA-262 với phiên bản 5.1 được hỗ trợ bởi hầu hết các trình duyệt.

setTimeout, setInterval, sự kiện DOM và hơn thế nữa không phải là một phần của ngôn ngữ. Chúng được cung cấp bởi môi trường máy chủ như là các đối tượng host. Viết ECMAScript cho một loạt các môi trường máy chủ cần phải đặc biệt quan tâm khi sử dụng các đối tượng host.

Mã ECMAScript được thực thi trong ngữ cảnh thực thi. Điều này có dạng ngăn xếp và sẽ giữ trạng thái của ngữ cảnh thực thi hiện tại ở trên cùng.

Có 3 cách để đẩy ngữ cảnh thực thi. Mã, eval và hàm toàn cục. Đây là cách duy nhất để bắt đầu mã. Môi trường máy chủ sẽ sử dụng các phương thức này để thực thi mã.

Môi trường máy chủ có thể cung cấp ngăn xếp cuộc gọi. Điều này được sử dụng để ngăn xếp các cuộc gọi chức năng được tạo ra bởi các đối tượng lưu trữ có thể chạy trong các chuỗi độc lập. Thông thường một sự kiện như setTimeout sẽ thêm một chức năng vào ngăn xếp cuộc gọi. Môi trường máy chủ sau đó sẽ đợi cho đến khi ngăn xếp ngữ cảnh thực hiện rỗng rồi bật chức năng từ ngăn xếp cuộc gọi, tạo ngữ cảnh thực thi mới, thực thi mã cho đến khi hoàn thành. Nó sẽ lặp lại điều này cho đến khi ngăn xếp cuộc gọi trống.

Cố gắng xây dựng danh sách toàn diện các trình quản lý ngữ cảnh thực thi đối tượng lưu trữ là vô ích.

Để trả lời câu hỏi.

Còn nữa? Có nhiều hơn nữa.Điều này nằm ngoài phạm vi của câu trả lời này. Tham khảo môi trường máy chủ lưu trữ cụ thể mà bạn muốn sử dụng.

Bất kỳ sự khác biệt nào giữa các công cụ JS? (Môi trường máy chủ ECMAScript). Có. Một lần nữa điều này vượt ra ngoài phạm vi của câu trả lời này và phụ thuộc vào máy chủ

Có hàng chục môi trường lưu trữ, với những môi trường mới được tạo ra mọi lúc. Điều gì gây nên việc tạo ra một bối cảnh thực thi mới phụ thuộc nhiều vào môi trường máy chủ.

Các vấn đề liên quan