Một trong những hạn chế của JS làm tôi khó chịu nhất là khả năng cô lập kém khả năng thực thi mã.Thực hiện cách ly JavaScript
Tôi muốn có thể kiểm soát ngữ cảnh trong đó mã được thực hiện, Cái gì đó đạt được hiệu ứng tương tự như những gì Script.createContext
& Script.runInContext
trong node.js (nút đang sử dụng liên kết với động cơ V8, vì vậy tôi có thể ' t thi đua triển khai của họ).
Dưới đây là một số lý do tại sao tôi muốn cô lập thực thi mã:
- Cô lập mã từ namespace toàn cục (đối tượng
window
và cũng làDOM
), nhưng tuy nhiên tôi cần phải có chức năng tham khảo có thể kêu gọi các vật thể tiếp xúc trong bối cảnh phải được thực hiện đồng bộ, làm cho nó gần như không thể sử dụngWebWorker
để cách ly. - Bằng cách cách ly việc thực thi mã, nó cũng có thể giải quyết các định nghĩa của nó khi không còn cần thiết nữa (quản lý bộ nhớ).
Tôi biết người ta có thể đạt được thực hiện một phần cô lập bằng cách tải đoạn script vào một iframe
, phương pháp này tuy nhiên là rất nặng nề và sử dụng một bộ nhớ rất nhiều cho một trường hợp thứ hai của DOM mà là không cần thiết cho những gì tôi đang cố gắng làm.
Tôi cần chia sẻ định nghĩa hàm tạo và định nghĩa của đối tượng được chia sẻ giữa các vùng chứa/ngữ cảnh riêng biệt mà cả hai đều phải chạy trên chuỗi giao diện người dùng chính. Chủ yếu là tôi muốn sử dụng các thùng chứa riêng biệt này để lưu trữ các plugin/mô-đun (các ứng dụng nhỏ) mà mỗi trình bày và tự động cập nhật một khung nhìn bằng cách gọi các lệnh vẽ trên đối tượng Context2D
của riêng chúng.
Nếu các vùng chứa này không chạy trên luồng giao diện người dùng chính, thì sẽ khó khăn khi thực hiện các cuộc gọi proxy như ctx.measureText()
và ctx.drawImage()
vì không thể tạo đối tượng hình ảnh trong Worker
.
Có ai đó biết đặc điểm kỹ thuật trong tương lai có thể làm điều này có thể không?
Có bất kỳ API bên trình duyệt hiện tại (ẩn) nào có thể được sử dụng để đạt được điều này không?
Bạn có nên tận dụng tốt hơn máy ảo như máy ảo Dart của Goggle và cũng có thể triển khai lại hệ thống mã hiện tại của mình không? Codebase hiện tại của tôi hơi cao hơn 20 000 dòng mã.
Nó sẽ được tốt hơn để tái thực hiện khuôn khổ trong *
Bạn có * vấn đề hiện tại * phải được khắc phục như thế này không? [IIABDFI] (http://acronyms.thefreedictionary.com/IIABDFI). – Ryan
Đồng ý với nhận xét, nhưng downvote là một chút không cần thiết. – Starx
@minitech Tôi thực sự có một vấn đề với việc thiếu các sandox (đó là một từ tốt hơn cho những gì tôi đã mô tả ở trên) trong thời gian chạy trình duyệt, do tôi đang cố gắng để đạt được một kiến trúc plugin cho nền tảng phía máy khách của tôi, được viết bằng JavaScript và sử dụng thời gian chạy của trình duyệt cho điều này. Nền tảng này là chung chung và mục đích chính của nó là lưu trữ môi trường để tự động tải và kiểm soát các plugins/modules/mini-application cung cấp nền tảng với các tính năng bổ sung. – Raweden