webpack - 将 Webpack 与 HTTP/2 结合使用的值(value)是什么

标签 webpack http2

我正在开始一个新项目,我正在努力向前思考它。我过去使用过 Browserify。对于我的新项目,我想使用 Webpack、Rollup 或 SystemJS。 Webpack 看起来是迄今为止最成熟的,拥有大量出色的功能。

不过,我担心 Webpack 将在一两年内与 HTTP/2 的采用无关。所以我想知道,Webpack 为通过 HTTP/2 提供服务的站点提供了什么值(value)?我不是在寻找意见,而是对在 HTTP/2 中使用 Webpack 的好处的事实解释。如果没有任何好处,或者好处很少,那也会帮助我做出决定。

最佳答案

TL;博士

在 HTTP/1.1 中,您必须尽可能少地发出请求才能获得性能;在 HTTP/2 中,您对每个请求的性能影响最小,但仍然会遇到资源限制和依赖项管理,这需要诸如 webpack 之类的捆绑工具。

长版:

Webpack(或任何其他捆绑器)仍然可以在 HTTP/2 世界中提供值(value),因为虽然 HTTP/2 允许从客户端到服务器的多路复用、异步、同时查询,但这并不意味着您正在连接的实际服务器有无限的能力来处理它们,甚至会允许它们。

在您连接时发送的 SETTINGS 帧中,大多数服务器会将并发流的数量限制为一个合理的值,例如 100。这意味着您不能发出超过 100 个并发请求,如果您有一个大的非捆绑用数百个 js 文件 react 应用程序。

此外,在许多情况下,您在 javascript 文件之间具有传递依赖关系,如果您不捆绑所有依赖关系,您将需要多次请求往返,因为浏览器只会在收到先前响应时发现依赖关系,从而否定 HTTP/2 好处。 (或者,服务器可能能够自动推送依赖项,但这会产生一系列其他问题)。

出于这些原因,使用 webpack 打包多个同类包以确保最大并发请求保持在服务器限制以下,同时保持包的粒度足以利用有效的浏览器缓存是有意义的。

关于webpack - 将 Webpack 与 HTTP/2 结合使用的值(value)是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37556283/

相关文章:

typescript - 捆绑和使用 webpack 构建的 typescript 库的正确方法?

npm - 错误: Cannot find scss module error after babel build

ssl - GOlang/https : timeout waiting for client preface

amazon-s3 - 通过 http/2 提供 S3 资源

c++ - 使用 Berkeley 套接字进行多路复用

javascript - 通过 Webpack 插件查找所有函数调用

npm - 字段 'browser' 不包含有效的别名配置

javascript - 无法在 WebPack 中导出 API

java - Jetty 客户端无法通过 HTTP/2 连接到 Jetty 服务器

android - 为什么 Xamarin Android 无法发送 GRPC/Http2 请求?