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