chrome 扩展是否在内部使用 JSON.stimingify 将消息发送到后台页面?

IT技术 javascript json google-chrome google-chrome-extension
2021-03-01 08:50:15

消息可以包含任何有效的 JSON 对象(空值、布尔值、数字、字符串、数组或对象)

chrome 扩展规范表明在后台和内容脚本之间传递的消息可以是一个 Javascript 对象,这意味着我们可以在不使用 JSON.stringify 的情况下传递一个 Javascript 对象。这是否意味着 Chrome 在发送消息之前会在内部执行 JSON.stringify?如果没有,如果我只是在没有 JSONification 的情况下传递 Javascript 对象,是否会提高性能?

1个回答

在 Chrome 中,消息JSON.stringify在 Chrome 的 JavaScript shim 层中自动 JSON 序列化(字面意思是使用),该层与扩展程序交互,如messages.js源代码中所示

这同样适用于在Port内部使用基于消息的chrome.runtime.sendMessage 和 chrome.tabs.sendMessage

这意味着只传递对象的 JSON 兼容部分:字符串、数字、布尔值、空值和由列出的类型组成的对象/数组。不支持复杂类型,将作为空对象发送,{}例如 DOM 元素、Set、Map、类实例、函数等。

希望 Chrome 有一天能够直接发送更多类型,请参阅https://crbug.com/248548

在 Firefox 中,使用了结构化克隆算法,它保留了许多流行的复杂类型,如 Date、RegExp、Blob、File、ArrayBuffer、Map、Set 等。