Chrome là bộ ba cuối cùng của bộ ba lớn (IE, Firefox, Chrome) ngừng sử dụng các cuộc gọi XMLHttpRequest đồng bộ trên "chủ đề chính" (như Firefox gọi nó). Một số trình duyệt cũng đã xóa hoàn toàn khả năng thiết lập tùy chọn .widthCredentials
cho các yêu cầu đồng bộ trên chuỗi chính.Mã nào sẽ chạy trên chuỗi chính của trình duyệt?
Sau khi tìm kiếm xa và rộng, tôi không thể tìm đủ thông tin để xác định chính xác mã nào sẽ chạy trên chuỗi chính và chuỗi nào sẽ không chạy.
Rõ ràng là javascript được bao gồm qua thẻ tập lệnh (nội tuyến hoặc với src) là trên chuỗi chính. Và XHR đồng bộ chạy bên trong cuộc gọi lại của XHR không đồng bộ sẽ không chạy trên luồng chính.
Nhưng về các trường hợp khác thì sao? Sự kiện chuột, sự kiện chạm, sự kiện tài liệu khác nhau? Làm thế nào để nói mà không cần cố gắng tất cả mọi thứ? Nó sẽ là tốt đẹp để tránh làm cho tất cả mọi thứ không đồng bộ và một địa ngục gọi lại.
Vui lòng thử câu trả lời kỹ lưỡng.
Edit: W3C spec warning: phát triển phải không vượt qua sai lầm cho đối số async khi môi trường toàn cầu JavaScript là một môi trường tài liệu vì nó có tác động bất lợi đến kinh nghiệm của người dùng cuối. Tác nhân người dùng được khuyến khích mạnh mẽ để cảnh báo về việc sử dụng như vậy trong các công cụ nhà phát triển và có thể thử nghiệm với việc ném một ngoại lệ "InvalidAccessError" khi nó xảy ra để tính năng cuối cùng có thể bị xóa khỏi nền tảng.
Chỉnh sửa 2: Làm rõ:
Có những tình huống mà gọi mã phải hoặc là chờ đợi cho tất cả các async đồng thời đua đòi để kết thúc (sử dụng một số quầy hoặc theo dõi trạng thái variabiles cho mỗi cuộc gọi), hoặc đã cho họ xích sử dụng gọi lại. Mỗi tình huống rất tệ. Ví dụ: tôi có ứng dụng JSONRPC cần cần để tự động tạo các hàm có thể gọi bằng cách thẩm vấn API phản chiếu. Đây là trên bàn tay để có tất cả mã thực hiện (UI, hoặc NOT) chạy bên trong cuộc gọi lại của một thư viện khác, đặc biệt nếu nó phải được thực hiện trên nhiều trang, và nếu thư viện phải hoạt động như một định nghĩa đơn giản (ẩn đang chạy mã tại thời điểm xác định). Đây chỉ là một ví dụ về sự phức tạp, tôi không yêu cầu giải pháp cho nó, mà là một giải thích rõ ràng về cách các trình duyệt quyết định đó là chủ đề chính.
Bạn nghĩ gì là "chuỗi chính"? Tại sao một XHR đồng bộ (từ một cuộc gọi lại không đồng bộ) rõ ràng không chạy trên luồng chính? – Bergi
@Bergi Đó chính là câu hỏi của tôi, tóm tắt. Trình duyệt xem xét "chủ đề chính" khi chạy javascript trên trang là gì? (Firefox đang gọi nó là "chủ đề chính"). Đây là một tham chiếu: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests –
Chỉ có một chuỗi * javascript * duy nhất (cho mỗi môi trường, tức là trang). Các chủ đề khác mà trình duyệt sử dụng để tính toán trong một trang và các trình duyệt nào trong số đó được coi là "chính", phụ thuộc vào việc triển khai thực hiện và phải hoàn toàn không liên quan. – Bergi