Одно из ограничений JS, которое меня больше всего беспокоит, - это низкая способность изолировать выполнение кода.Изолировать выполнение JavaScript
Я хочу, чтобы иметь возможность контролировать контекст, в котором выполняется код, то, что достичь такого же эффекта, что Script.createContext
Script.runInContext
& в node.js делает (узел использует связывание с двигателем V8, так что я могу» t имитировать их реализацию).
Вот некоторые из причин, почему я хочу, чтобы изолировать выполнение кода:
- Изолировать код из глобального пространства имен (в
window
объекта и также вDOM
), но тем не менее должен быть в состоянии ссылки на функции вызовите объекты, выставленные в контексте, которые должны выполняться синхронно, что делает его почти невозможным с использованиемWebWorker
для изоляции. - Выделив выполнение кода, вы также сможете освободить его определения, когда они больше не нужны (управление памятью).
Я знаю, что один может достичь частично изолированного исполнения путем загрузки сценария в iframe
, этот подход, однако, очень тяжелый и использует много памяти для второго экземпляра DOM, который не нужен для того, что я пытаюсь делать.
Мне нужно разделить определение конструктора, а также определения объекта, которые совместно используются изолированными контейнерами/контекстами, которые оба должны запускаться в основном потоке пользовательского интерфейса. В основном я хочу использовать эти изолированные контейнеры для размещения плагинов/модулей (мини-приложений), каждый из которых представляет и динамически обновляет окно просмотра, вызывая команды рисования на свой собственный объект Context2D
.
Если эти контейнеры не работают в главном потоке UI это низина мучительно трудно прокси-вызовы, такие как ctx.measureText()
и ctx.drawImage()
все будет бесполезным, так как объекты изображения не могут быть созданы в Worker
.
Кто-нибудь знает о будущих спецификациях, которые сделают это возможным?
Существуют ли какие-либо текущие (скрытые) API-интерфейсы на стороне браузера, которые можно использовать для достижения этого?
Было бы лучше использовать виртуальную машину, такую как Dart VM Goggle, а также повторно реализовать мою текущую кодовую базу? Моя текущая база кода немного выше 20 000 строк кода.
Было бы лучше, чтобы вновь ввести в действие рамки в *
У вас есть * существующая проблема *, которая должна быть исправлена следующим образом? [IIABDFI] (http://acronyms.thefreedictionary.com/IIABDFI). – Ryan
Согласитесь с комментарием, но downvote немного ненужен. – Starx
@minitech У меня действительно есть проблема с отсутствием sandoxes (что является лучшим словом для того, что я описал выше) во время выполнения браузера, из-за того, что я пытаюсь создать архитектуру плагина для своей клиентской платформы, которая написан на JavaScript и использует для этого время выполнения браузера. Платформа является общей и основной целью является размещение среды для динамической загрузки и управления плагинами/модулями/мини-приложением, которая предоставляет платформе дополнительные функции. – Raweden