优化 EAS Update 的资源

编辑页面

了解 EAS Update 如何下载资源,以及如何针对下载大小进行优化。


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

新的资源选择功能可以大幅减少已下载资源的总数量和总大小。

当应用发现新的更新时,它会下载一个清单,然后下载任何新的或已更新的资源,以便运行该更新。流程如下:

许多运行 Android 和 iOS 应用的用户使用的是移动网络,这些网络的稳定性和速度都不如 Wi-Fi,因此,确保作为更新一部分分发的资源尽可能小非常重要。

代码资源

发布更新时,EAS CLI 会运行 Expo CLI,将项目打包为一个更新。该更新会出现在项目的 dist 目录中。

dist/bundles 中,我们可以看到将分别作为 Android 和 iOS 更新一部分的 index.android.jsindex.ios.js 文件的大小。请注意,这些是未压缩的文件大小;EAS Update 使用 Brotli 和 gzip 压缩,可以显著减小下载大小。不过,如果设备之前没有下载过这些文件,那么在获取新更新时,仍会将这些文件下载到用户设备上。尽可能减小这些文件的大小有助于终端用户快速下载更新。

图片资源

如果应用用户检测到新的更新,而这些资源又不在其构建中,他们就必须下载任何新的图片或其他资源。你可以在 dist/assets 中查看上传到 EAS 服务器的所有资源。那里的资源名称都经过了哈希处理,并移除了扩展名,因此很难看出里面有哪些资源。要查看格式化后的资源列表,我们可以运行:

Terminal
npx expo export

优化图片资源

要手动优化项目中的图片资源,你可以使用 npx expo-optimize 命令。它使用 sharp 库来压缩图片。

Terminal
npx expo-optimize

运行该命令后,所有图片资源都会被压缩,已经优化过的除外。你可以通过在命令中添加 --quality [number] 选项来调整压缩质量。例如,要压缩到 90%,请运行:

Terminal
npx expo-optimize --quality 90

其他手动优化方法

要手动优化图片和视频,请参阅 资源 了解更多信息。

确保资源包含在更新中

当你发布更新时,EAS 会将你的资源上传到 CDN,以便用户运行应用时可以获取这些资源。不过,资源要上传到 CDN,必须在应用代码中的某处被显式引用。如果有条件地引用资源,打包器将无法检测到它们,而你发布项目时它们也不会被上传。

进一步考虑

需要注意的是,用户的应用只会下载新的或已更新的资源。它不会重新下载应用中已存在的未更改资源。

确保更新尽可能轻量的一种方法,是频繁地构建并提交应用到应用商店,这样用户就可以下载一个包含更多最新资源的新应用二进制文件。通常来说,在添加较大的资源或多个资源时构建并提交应用是个好习惯,而在两次应用商店发布之间使用更新来修复小 bug 和进行小幅修改也是很好的做法。