Одно из ограничений JS, которое больше всего беспокоит меня, — это плохая способность изолировать выполнение кода.
Я хочу иметь возможность контролировать контекст, в котором выполняется код. Что-то, что дает эффект, аналогичный тому, что Script.createContext
и Script.runInContext
в node.js делает (узел использует привязку к движку V8, поэтому я не могу эмулировать их реализацию).
Вот причина, по которой я хочу изолировать выполнение кода:
window
, а также DOM
), но Однако мне нужно иметь возможность ссылаться на вызов функции для объектов, представленных в контексте, которые должны выполняться синхронно, что делает практически невозможным использование WebWorker
для изоляции.Я знаю, что можно достичь частично изолированного выполнения, загрузив скрипт в iframe
, однако этот подход очень тяжелый и использует много памяти для второго экземпляра DOM, который не нужен для того, что я пытаюсь сделать.
Мне нужно совместно использовать определение конструктора, а также определения объекта, которые являются общими для изолированных контейнеров/контекстов, которые оба должны выполняться в основном потоке пользовательского интерфейса.В основном я хочу использовать эти изолированные контейнеры для размещения плагинов/модулей (мини-приложений), каждое из которых представляет и динамически обновляет область просмотра, вызывая команды рисования для своего собственного объекта Context2D
.
Если эти контейнеры не работают в основном потоке пользовательского интерфейса, будет крайне сложно проксировать такие вызовы, как ctx.measureText()
и ctx.drawImage()
. бесполезен, так как объекты изображения не могут быть созданы в Worker
.
Кто-нибудь знает о будущей спецификации, которая сделает это возможным?
Существуют ли текущие (скрытые) API на стороне браузера, которые можно использовать для достижения этой цели?
Не лучше ли использовать виртуальную машину, такую как Dart VM от Goggle, а также повторно внедрить мою текущую кодовую базу? Моя текущая кодовая база составляет чуть больше 20 000 строк кода.
Не лучше ли повторно реализовать структуру в *