簡體   English   中英

在屬於單個隔離的多個V8上下文對象之間共享/離散是什么?

[英]What is shared/discrete across multiple V8 context objects belonging to a single isolate?

我了解v8 :: Isolate的概念,並且了解所有運行的內容都在與隔離項關聯的v8 :: Context內部運行。 與不同隔離群關聯的上下文不能共享任何內容。

我的問題是,單個隔離中包含多個上下文意味着什么? 上下文之間共享什么? 它們之間有什么離散? 您什么時候可以在一個容器中制造某些東西並在另一個容器中使用? 在API中,如果某些東西在創建時需要隔離或上下文,則通常看起來幾乎是任意的。

同樣,任何關於在單個隔離環境中使用多個案例的建議都將受到歡迎,以幫助我開始更好地理解它們。

我看到這個問題: v8 :: Isolate和v8 :: Context之間到底有什么區別? 但這並沒有真正涉及如何/為什么在單個隔離中使用多個上下文的細節。

謝謝。

我從郵件列表中得到的信息是,除了功能外,幾乎所有內容都可以在同一隔離環境中跨上下文共享。

這取決於安全策略。 默認情況下,所有內容都是共享的。

您可以使用v8 :: ObjectTemplate :: SetAccessCheckCallback()打開訪問檢查,以基於每個屬性阻止訪問,或者通過使用v8 :: Context :: SetSecurityToken()更改安全令牌來完全禁止共享。

另外:我相信您需要將上下文傳遞給v8 :: Object :: Set()的原因是為了消除重載函數的歧義。 C ++不允許僅在返回類型上進行重載。

它也快一點。 Set()的非上下文版本會查詢當前上下文並調用上下文化的Set()。

定義“一切”? 我可以使用任何javascript程序並使用每一行,然后在不同的上下文中(在同一隔離環境中)運行它嗎? 至少從理論上講,該程序沒有根本改變?

不完全的。 V8中執行的基本單位是功能。 函數屬於它們在其中編譯的上下文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM