如何在 Scala.js React.js 应用程序中处理大型 js 文件?

How to handle large js files in a Scala.js React.js application?

我们如何处理具有大量 js 代码和依赖项的大型 Scala.js React applications 中的 app-jsdeps.jsapp-opt.js

我已经使用@japgolly scalajs-react using @ochrons spa-tutorial 示例构建了我的第一个 Web 应用程序,但即使在优化它之后 app-jsdeps.js (only 10 external JS deps)app-opt.js 文件的大小也在 900kb 左右在页面加载前大约需要 8 seconds 时间下载。

遇到这种情况我们通常怎么办?

您可以异步加载每页所需的 jsdeps,我目前在 scalajs-react-components 演示应用程序中这样做

Async Mixin

Async Mixin Example

app-opt.js file is around 900kb

gZip 压缩后约为 350-370kb。只是为了澄清事情 scala.js 核心(当前版本)增加了大约 150kb -200kb(在中型到大型项目的 gZip 之前)到输出文件,在你的情况下大小是巨大的,因为 spa-tutorial 依赖于 scalajs-react 和scalacss(这两个库在内部依赖于 scalaz,sha​​peless..,ofc 它们的存在是为了给你提供更多的安全性!)- https://github.com/japgolly/scalacss/issues/17,在这个基本大小之后,即使你向你的项目添加越来越多的功能,大小也不会'变化不大。

也就是说,如果启用长期缓存,则无需担心上述任何事情。用户在第一次访问您的页面时会遇到轻微的延迟,进一步访问几乎是即时的。这是一个使用 webpack 的例子:http://webpack.github.io/docs/long-term-caching.html

顺便说一句,我们必须为任何 Web 项目处理所有这些问题,sclaa.js 也不例外 ;)

此外,请记住,对于生产版本,您通常应该使用缩小的 JS 依赖项,并使用 -jsdeps.min.js 而不是 -jsdeps.js、as described here。如果您的 JavaScript 依赖项是使用良好的压缩器构建的,即使没有 gzip,它也会有很大帮助。

并且正如@invariant 所指出的,只要客户端正在缓存 jsdeps,影响就仅限于页面上的第一次点击,之后事情会变得更快...