2016-06-23 3 views
6

私はv8 :: Isolateのアイデアを理解しています。実行されるすべてが分離されたv8 :: Context内で実行されることを理解しています。異なる分離株に関連するコンテクストは何も共有できません。単一の分離株に属する複数のV8コンテキスト・オブジェクト間で共有/離散とは何ですか?

私の質問は、単一の分離株で複数のコンテキストを持つことはどういう意味ですか?コンテキスト間で共有されるものは何ですか?彼らの間の離散は何ですか?あなたはいつ何かを作り、それを別のもので使うことができますか? APIの中には、何かがそれを作成している間に分離またはコンテキストを取ると、ほとんど恣意的に見えることがあります。

また、1つの分離株で複数のコンテキストを使用する場合の提案は、私がそれらをよりよく理解し始めるのを助けることができます。

私はこの質問を参照してください:What exactly is the difference between v8::Isolate and v8::Context?しかし、それは実際にどのように/なぜあなたは単一の隔離物で複数のコンテキストを使用するかについての詳細には入っていません。

ありがとうございます。

答えて

1

私がメーリングリストから得た情報は、機能を除いて同じアイソレートのコンテキストでほとんどすべてを共有できるということでした。

セキュリティポリシーによって異なります。デフォルトでは、すべてが共有されます。あなたが V8でのアクセスチェックをオンにすることができます:: ObjectTemplate :: SetAccessCheckCallback() プロパティ単位でのアクセスをブロックしたり、V8 ::コンテキストで セキュリティトークンを変更することにより、完全に共有を許可しないように

:: SetSecurityToken( )。

脇に: にコンテキストを渡す必要がある理由が考えられます。v8 :: Object :: Set()は、オーバーロードされた関数を明確にするためです。 C++ は、戻り値の型だけでオーバーロードを許可しません。

また、やや速いです。 Set()の非コンテキストバージョンは、現在のコンテキストを で検索し、コンテキスト設定されたSet()を呼び出します。

"すべて" を定義しますか?私は、任意のjavascriptプログラムを取って、それぞれの 行を取って別のコンテキスト(同じ隔離物)でそれを実行すると、それは だろうか?少なくとも理論的には、プログラムの根本的な変更はありませんか?

ないかなり。 V8の基本的な実行単位が関数です。 関数はコンパイルされたコンテキストに属します。

関連する問題