调整图像大小和转换图像在开发和生产模式下都会发生,因此您也可以使用正确的图像尺寸和格式进行测试。有关更多详细信息,请参阅图像转换 Image transformer文档。
arcel 还包括在生产模式下默认对 JPEG 和 PNG 进行无损图像优化,这可以在不影响图像质量的情况下减小图像的大小。这不需要使用任何查询参数或配置。但是,由于优化是无损的,因此与使用查询参数quality
或使用 WebP 或 AVIF 等现代格式相比,可能减少的大小可能更少。
Parcel 会自动生成<script type="module">
现代 JavaScript 语法,并<script nomodule>
在必要时为旧版浏览器提供备用。通过避免转换类、异步/等待等功能,这为大多数用户减少了包大小。有关更多详细信息,请参阅 Targets 文档中的差异捆绑 Differential bundling。
Parcel 支持使用Gzip和Brotli压缩包。虽然许多服务器即时压缩数据,但其他服务器要求您提前上传预压缩的有效负载。这也可能允许更好的压缩,这对于每个网络请求来说都太慢了。
因为不是每个人都需要它,所以默认情况下不启用压缩。要启用它,请将@parcel/compressor-gzip
或@parcel/compressor-brotli
添加到您的.parcelrc
。
yarn add @parcel/compressor-gzip @parcel/compressor-brotli --dev
现在,您将在原始未压缩包旁边获得一个.gz
和.br
文件。如果基于文本的文件类型比上面示例中列出的要多,则需要相应地扩展 glob。
如果您不需要未压缩的包,您也可以从上面的示例中删除"..."
以仅输出压缩文件。例如,要仅输出一个.gz
文件,您可以使用以下配置:
Parcel 包含与浏览器和 CDN 缓存相关的多项优化,包括内容散列、打包清单和共享打包。
Parcel 会自动在所有输出文件的名称中包含内容哈希,从而实现长期浏览器缓存。每当包的内容发生变化时,文件名中包含的哈希值就会更新,从而触发 CDN 和浏览器缓存的失效。
默认情况下,所有捆绑包都包含内容哈希,但条目和某些需要名称稳定的依赖类型除外。例如,服务工作者需要一个稳定的文件名才能正常工作,并且 HTML 中的<a>
标签引用用户可读的 URL。
您还可以使用--no-content-hash
CLI 标志禁用内容散列。请注意,名称仍将包含哈希,但不会在每次构建时更改。您可以使用Namer插件完全自定义包命名。
Parcel 在每个条目包中使用清单来避免在许多情况下cascading invalidation问题。此清单包括稳定包 ID 到最终内容散列文件名的映射。当一个包需要引用另一个包时,它使用包 id 而不是内容散列名称。这意味着当一个包更新时,只有那个包和条目需要在浏览器缓存中失效,中间包不会改变。这提高了跨部署的缓存命中率。
在生产构建中,Parcel 会自动优化应用程序中的打包图,以减少重复并提高可缓存性。当您的应用程序的多个部分依赖于相同的公共模块时,它们会自动去重到一个单独的包中。这允许常用的依赖项与您的应用程序代码并行加载,并由浏览器单独缓存。
例如,如果您的应用程序中的多个页面依赖于react
和lodash
,它们可能会被移动到一个单独的包中,而不是在每个页面中重复。这样,当用户从一个页面导航到另一个页面时,他们只需要下载该页面的附加代码,而不是重新下载那些已经缓存的库。
有关如何配置的更多详细信息,请参阅代码拆分 Code splitting。
Parcel 包含一些工具来帮助您分析打包的大小。
默认情况下,Parcel 在为生产构建时会在终端中输出打包报告。它包括每个输出包的大小和构建时间。要查看有关组成每个包的文件的更多详细信息,您可以使用--detailed-report
CLI 选项。默认情况下,每个包中最多显示 10 个文件,按大小排序。您也可以传递一个数字来增加它,例如--detailed-report 20
。
@parcel/reporter-bundle-analyzer
插件可用于生成包含树形图的 HTML 文件,该树形图直观地显示每个包中每个资产的相对大小。您可以使用--reporter
CLI 选项运行它。
parcel build src/index.html --reporter @parcel/reporter-bundle-analyzer
这会在您的项目根目录中生成一个文件夹parcel-bundle-reports
,其中包含每个目标的 HTML 文件:
如果您想在每个构建中自动运行打包分析器,您也可以将"reporters"
添加到.parcelrc
文件中。
@parcel/reporter-bundle-buddy
插件可用于生成与Bundle Buddy兼容的报告。您可以使用--reporter
CLI 选项运行它。
parcel build src/index.html --reporter @parcel/reporter-bundle-buddy
现在将dist
录中的文件上传到Bundle Buddy website.