JSの限界は、コードの実行を分離する能力が低いことです。私はコードが実行されるコンテキストを制御できるようにしたいJavaScriptの実行を隔離する
、「Node.jsの中に何Script.createContext
& Script.runInContext
に同様の効果を得る何かが(ノードがV8エンジンへの結合を使用していないので、私がすることができます実装をエミュレートします)。ここで
は、私はコードの実行を分離する理由いくつかの理由である:
- は、グローバル名前空間(
window
オブジェクトともDOM
)からコードを分離、私はしかし、可能な参照機能する必要がありますコンテキスト内で公開されているオブジェクトを呼び出して同期をとる必要があります。これにより、分離のためにWebWorker
を使用することはほとんど不可能になります。 - コードの実行を分離することで、もはや必要でなくなったときにその定義を解放することも可能です(メモリ管理)。
私は1つのiframe
にロードするスクリプトによって、部分的に分離された実行を達成することができる知っている、このアプローチは、しかし、非常に重く、私がしようとしている何のために必要とされていないDOMの2番目のインスタンスのために多くのメモリを使用していますする。
コンストラクタ定義を共有する必要があります。また、メインUIスレッド上で実行する必要がある分離されたコンテナ/コンテキスト間で共有されるオブジェクトの定義も共有する必要があります。主に私は自分自身のContext2D
オブジェクト上で描画コマンドを呼び出すことによって、それぞれが提示し、動的にビューポートを更新するプラグイン/モジュール(ミニアプリケーション)をホストするために、これらの分離されたコンテナを使用したい。
これらのコンテナは、メインUIスレッドで実行されていない場合には、ウォールドプロキシに痛いほど難しいことで画像オブジェクトがWorker
で作成することができないように、すべての役に立たないだろうなctx.measureText()
とctx.drawImage()
として呼び出します。
誰かがこれを可能にする将来の仕様を知っていますか?
これを達成するために使用できる現在の(隠された)ブラウザ側のAPIはありますか?
GoggleのDart VMのような仮想マシンを利用し、現在のコードベースを再実装する方が良いでしょうか? 私の現在のコードベースは20,000行をわずかに上回っています。あなたは複数を持っているしたい場合は
(function() {
// all your code goes here
// nobody outside of your code can reach your top level variables here
// your top level variables are not on the window object
// this is a protected, but top level variable
var x = 3;
// if you want anything to be global, you can assign it to the window object.
window.myGlobal = {};
function myTopLevelFunction(x,y,z) {
// code here
}
})();
:
それはあなたが簡単な自己実行中の関数オブジェクトとグローバル・ネームスペースからコードを分離することができます*
*このように修正する必要がある*既存の問題*がありますか? [IIABDFI](http://acronyms.thefreedictionary.com/IIABDFI)。 – Ryan
コメントに同意しますが、downvoteは少し不要です。 – Starx
@minitech私は実際に私がクライアント側のプラットフォーム用のプラグインアーキテクチャを達成しようとしているため、ブラウザランタイムでsandoxesの欠如(これは私が上で説明したもののより良い言葉です)に問題があります。 JavaScriptで書かれており、ブラウザランタイムを利用しています。プラットフォームは汎用的で、主な目的は、プラットフォームに追加機能を提供するプラグイン/モジュール/ミニアプリケーションを動的にロードして制御するための環境をホストすることです。 – Raweden