如何强制服务器在一个 http 请求中发送所有导入的 ES6 模块
How to force server to send all imported ES6 modules in one http request
请看下面的代码;
import * as test from "./test2.js"
function test1()
{
}
let a=1
console.log(test.b)
test.test1();
console.log( "Finished" );
<html>
<head>
<script type="module" src="./test.js"></script>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
正如你在上面看到的,我在我的模块中导入了另一个 JS 文件。但在这种情况下,我在网络中有两个 http 请求;一份用于 "test.js" 一份用于 "test2.js".
我可以在一个 http 请求中发送这两个文件吗?我不想连接 JS 文件。我正在寻找与 ES6 模块相关的解决方案;类似于 "preload" 关键字,请不要建议外部库这样做
嗯,你的 http 客户端必须足够聪明才能做到这一点,否则你的 http 服务器必须向 http 客户端发出信号,表明它解析了 js 文件并且它知道它还需要其他文件...
您可以使用自定义 HTTP 服务器来实现此目的,但对于 IIS 或 apache,我不确定如果没有其他软件/插件来读取和提示文件是否容易实现。
Can I send both files in one http request?
不平凡。
您需要对 test.js
请求的响应是一个包含现有 test.js
和 test2.js
.[=15= 内容的单个 JS 文件]
您需要以某种方式创建该文件。它当然不是标准 HTTP 服务器的功能。
您拒绝使用外部库,但通常的做法是使用 Webpack 等工具将模块组合成单个(非模块)JS 脚本。
如果您使用的是 HTTP/2,那么您可以使用 multiplexing。
我建议您考虑在您的服务器上启用 http/2,以便您可以重用 http 连接并获得其他性能优势。该协议已经被所有主流浏览器支持,只要服务器支持它就会自动使用。查看此 medium article 基础知识,特别是针对您的情况
- Request multiplexing over a single TCP connection
- Request pipelining
请看下面的代码;
import * as test from "./test2.js"
function test1()
{
}
let a=1
console.log(test.b)
test.test1();
console.log( "Finished" );
<html>
<head>
<script type="module" src="./test.js"></script>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
正如你在上面看到的,我在我的模块中导入了另一个 JS 文件。但在这种情况下,我在网络中有两个 http 请求;一份用于 "test.js" 一份用于 "test2.js".
我可以在一个 http 请求中发送这两个文件吗?我不想连接 JS 文件。我正在寻找与 ES6 模块相关的解决方案;类似于 "preload" 关键字,请不要建议外部库这样做
嗯,你的 http 客户端必须足够聪明才能做到这一点,否则你的 http 服务器必须向 http 客户端发出信号,表明它解析了 js 文件并且它知道它还需要其他文件...
您可以使用自定义 HTTP 服务器来实现此目的,但对于 IIS 或 apache,我不确定如果没有其他软件/插件来读取和提示文件是否容易实现。
Can I send both files in one http request?
不平凡。
您需要对 test.js
请求的响应是一个包含现有 test.js
和 test2.js
.[=15= 内容的单个 JS 文件]
您需要以某种方式创建该文件。它当然不是标准 HTTP 服务器的功能。
您拒绝使用外部库,但通常的做法是使用 Webpack 等工具将模块组合成单个(非模块)JS 脚本。
如果您使用的是 HTTP/2,那么您可以使用 multiplexing。
我建议您考虑在您的服务器上启用 http/2,以便您可以重用 http 连接并获得其他性能优势。该协议已经被所有主流浏览器支持,只要服务器支持它就会自动使用。查看此 medium article 基础知识,特别是针对您的情况
- Request multiplexing over a single TCP connection
- Request pipelining