Javascript 有32字节或64字节这样的大小限制吗?用于在chrome扩展的内容脚本和背景页面之间传递消息?

Javascript 有32字节或64字节这样的大小限制吗?用于在chrome扩展的内容脚本和背景页面之间传递消息?,javascript,api,google-chrome,google-chrome-extension,Javascript,Api,Google Chrome,Google Chrome Extension,我正在开发一个chrome扩展,可以从网页中提取大型公钥。我需要知道我是否会遇到谷歌网站上找不到的与消息传递API相关的限制 谢谢 使用chrome.runtime.sendMessage时,消息会被序列化,并一次性从发送者的进程(例如,包含内容脚本的选项卡)发送到扩展的进程(后台页面)。IPC消息的硬限制为。如果发送的内容大于此值,则发件人的进程将终止 现在,消息大小为128MB并不意味着您可以发送长度为134217728的JavaScript字符串,因为消息本身也需要一些空间来存储元数据。J

我正在开发一个chrome扩展,可以从网页中提取大型公钥。我需要知道我是否会遇到谷歌网站上找不到的与消息传递API相关的限制


谢谢

使用
chrome.runtime.sendMessage
时,消息会被序列化,并一次性从发送者的进程(例如,包含内容脚本的选项卡)发送到扩展的进程(后台页面)。IPC消息的硬限制为。如果发送的内容大于此值,则发件人的进程将终止

现在,消息大小为128MB并不意味着您可以发送长度为134217728的JavaScript字符串,因为消息本身也需要一些空间来存储元数据。JavaScript字符串中的字符数不一定是字节数(假设由任意字符组成的JavaScript字符串平均每个字符需要2个字节的存储空间)。这将最大限制降低到50MB

虽然50MB在技术上是可以接受的,但您不应该尝试发送这么多数据。这是启动浏览器并发送50MB数据后Chrome任务管理器的屏幕截图。图片显示,从选项卡到后台页面的消息需要5秒钟,浏览器和选项卡进程都使用大约300MB的内存,扩展进程使用663MB的内存(其中初始值分别为32、17和22MB)

不过,几兆字节的消息不是问题


回答得很好。然而,在32位Chrome上,这里成功传输了100MB的字符串,而不是50MB,而且只花了大约1秒的时间。@wOxxOm我说任意字符串的最大值是50MB。发送100MB的ASCII字符串(每个字符8位)可以正常工作,但在其他情况下,数据可能编码为UTF-16(或UCS-2)。当我试图传输一个大小为55MB的二进制文件的内容时,该选项卡被终止。我不认为这是疯狂的。例如,我有一个扩展,它向后台发送一个sql查询,并发送结果。理想情况下,代码不需要担心正常结果和巨大结果之间的矛盾。但我看到它确实需要区分:(@ZigMandel您真的需要一次发送所有内容吗?您不能格式化结果,然后将小结果发送到内容脚本吗?或者将结果拆分为多个部分,然后使用
chrome.runtime.connect
通过端口交换小消息吗?或者,通过在中插入iframe,完全消除传递扩展消息的需要该页面并从那里执行数据库查询。在我的情况下不实用。我可以将结果以部分形式传递,但我认为我的消息已经处理好了。