2009-10-15 21 views
7

Javascript không có chủ đề hiển thị (chưa - Chủ đề công nhân đang đến, xem thêm thông tin trong JavaScript and Threads).Làm cách nào để "nhiều ngữ cảnh thực thi" của Javascript hoạt động?

Tuy nhiên, dường như có nhiều bối cảnh thực thi xuất hiện cùng một lúc - độc lập, khi bạn có nhiều cửa sổ Firefox và nhiều tab Firefox/IE.

Khi bạn có nhiều iframe trên một trang, mỗi khung nội tuyến có ngữ cảnh thực thi riêng, nhưng chúng có dữ liệu được chia sẻ. Nếu hai khung nội tuyến nằm trên cùng một tên miền, chúng có thể truy cập DOM của nhau và gọi các hàm của nhau. Tuy nhiên, tôi không thể tìm thấy trên Google mô tả về mô hình lập lịch, tức là liệu đó có phải là:

  • song song/preemptive, trong trường hợp này - bạn có thể tạm ngưng không? bất kỳ hình thức loại trừ lẫn nhau?
  • hợp tác xã, trong trường hợp nào - làm cách nào để tạo ra một ngữ cảnh khác?
  • không trùng lặp - tức là, trình xử lý sự kiện trong khung chính phải trả về trước khi trình xử lý sự kiện trong iframe có thể được gọi (Và ngược lại)?

Vì vậy, câu hỏi là:

  • Có một bối cảnh được bảo đảm chuyển đổi mô hình?
  • Nếu không, các mô hình chuyển đổi ngữ cảnh hiện hành là gì?
    • Có vẻ như Firefox và IE có lịch biểu không trùng lặp giữa các ngữ cảnh cùng tab và hợp tác giữa các tab/cửa sổ khác nhau trong cùng một quy trình - nhưng tôi không chắc chắn.
    • Chrome sử dụng trình lên lịch hệ thống cho các tab khác nhau (có thể sử dụng nhiều lõi, nằm trong nhóm song song/preemptive, nhưng tôi không biết nó sử dụng cho nhiều khung trong cùng một tab.
    • Tôi không có ý tưởng về Safari hay Opera.

Cảm ơn!

Trả lời

6

trong Firefox, tất cả các JavaScript trong trang web chạy trên các chủ đề chính, vì vậy nó là tất cả serialized. Mỗi khung sẽ có riêng JSContext của nó, và mỗi phương thức được thực hiện để hoàn thành.

+1

(Bạn biết điều đó, nhưng để hoàn thành: đó là Firefox 3.5. Khi trình duyệt trở thành đa xử lý, như Chrome đã và Firefox sẽ có vài phiên bản sau đó, các tab không liên quan có thể chạy độc lập, trong khi (ít nhất là bây giờ) cho "liên quan "tab các nhà phát triển trình duyệt cố gắng bảo toàn ngữ nghĩa" chạy để hoàn thành ".) – Nickolay

+0

Chắc chắn, nhưng Firefox vẫn chưa làm điều đó, và sẽ không ít nhất cho đến Firefox 4.0;) – sdwilsh

+0

Các tab riêng biệt nằm trong các quy trình riêng biệt, không có vấn đề gì đó. Iframe/khung trong một tab vẫn chia sẻ cùng một chuỗi. Các nhà phát triển Js vẫn có thể thở dễ dàng và không lo lắng về sự tương tranh. –

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