Large-Allocation

非标准的**Large-Allocation** 响应头部是用来告诉浏览器加载该页面可能需要申请大内存。当前只有 Firefox 实现该特性,但是对其他浏览器也无损害。

WebAssembly 或者 asm.js 会使用比较大的连续内存空间。例如,对于一些复杂的游戏,其申请的空间将会非常大,甚至会达到 1GB。Large-Allocation 告诉浏览器其将要加载的页面可能需要申请一个大的连续内存空间,浏览器依据该头部可能会单独启动一个专有的进程用于处理该页面。

Header type Response header
Forbidden header name no

语法

Large-Allocation: 0
Large-Allocation: <megabytes>

指令

0

0 是一个特殊的值,代表给它分配的大小是不确定的 (动态允许).

<megabytes>

预期需要申请的内存大小,以 M 为单位

示例

Large-Allocation: 0
Large-Allocation: 500

排除错误

如果使用不当, Large-Allocation 会抛出警告或者错误信息,你可以在 web console 查看它们。

由于Large-Allocation 报头存在,这个页面会在一个新的进程处理和加载

This message means that the browser saw the Large-Allocation header, and was able to reload the page into a new process which should have more available contiguous memory.

Large-Allocation 报头由于非non-GET 请求而直接忽略

当一个 POST 请求用语加载文档,that load cannot currently be redirected into a new process. This error is displayed when loading a document with a Large-Allocation header with a non-GET HTTP method. This could be caused due to the document being loaded by a form submission, for example.

A Large-Allocation header was ignored due to the presence of windows which have a reference to this browsing context through the frame hierarchy or window.opener.

This error means that the document was not loaded at the top level of an user-opened or noopener-opened tab or window. It can occur in these situations:

  • The document with the Large-Allocation header was loaded in an <iframe>. Firefox cannot move an iframe into a new process currently, so the document must load in the current process.
  • The document with the Large-Allocation header was loaded in a window which was opened by window.open(), <a target="_blank"> or other similar methods without rel="noopener" or the "noopener" feature being set. These windows must remain in the same process as their opener, as they can communicate, meaning that we cannot allow them to switch processes.
  • The document with the Large-Allocation header has opened another window with window.open(), <a target="_blank"> or other similar methods without rel="noopener" or the "noopener" feature being set. This is for the same reason as above, namely that they can communicate and thus we cannot allow them to switch processes.
Large-Allocation 报头由于 文档在加载过程没有被加载而直接忽略

Firefox has moved to a multiprocess architecture, and this architecture is required in order to support the Large-Allocation header. Some legacy Addons can prevent Firefox from using this new, faster, multiprocess architecture. If you have one of these Addons installed, then we will continue to use the old single process architecuture for compatibility, and cannot handle the Large-Allocation header.

由于Large-Allocation头部,此页面应将被加载到新进程中,但是在非 Win32 平台上禁用此选项。

由于在 64 位系统里内存碎片不是问题,Firefox 只在 32 位系统支持Large-Allocation头部。如果你运行一个非 32 位的程序,这类信息就会出现。可以设置 about:config 里面的"dom.largeAllocation.forceEnable"布尔值来关闭此检查。

规范

现还不属于任何规范,可以通过这篇文档了解该头部的背后思想。

浏览器兼容性

BCD tables only load in the browser

参见