因此,我一直在构建一个 Angular 9 应用程序,其中有一个客户仪表板来管理保存在服务器上的模板。这些模板可以通过激活系统在不同的设备上查看,因此设备与用户绑定。
所以让我们说https://templates.com
我们有/login
, /dashboards
, /manage
带有查看和编辑数据的子路径。在这个网址上我们也有/:companyName
在此路径上,它请求一个模板,其中包含带插值字符串的 html,以及将动态加载的 css。
到目前为止,我能够实现这一目标要归功于Alarm9k 的帖子 https://github.com/angular/angular/issues/15275#issuecomment-434793800.
此解决方案出现的唯一问题是,在构建应用程序时,您无法使用ng build --prod
因为使用--prod
将无法工作,因为 Angular 编译器未包含在 AOT 中,因此您将陷入 JIT 困境。
这将导致应用程序变得更大,在我的例子中,大小几乎为 42MB。所以我想减小文件大小,因为这会极大地影响应用程序的延迟。
我一直在查看应用程序和 atm 的统计信息,它的延迟 http p95 延迟为 1.2 秒,http 平均延迟为 340 毫秒。
当使用不同的网站速度测试时,并选择英国作为测试应运行的位置。
我得到的加载时间值约为 600-900 毫秒。当检查多个位置时,我的平均加载时间为 5 秒。
问题:
所以我想知道是否有一种方法可以将应用程序分成 2 个,其中一个处于 AOT 模式,另一个处于 JIT 模式,将一部分保持在 JIT 模式是否安全,以及是否可以最大限度地减少是否申请。
如果这是不可能的,我想知道最小化此应用程序的最佳方法是什么以及如何做到这一点。
或者是否有一种方法至少可以使应用程序更安全,因为在 JIT 模式下可以在浏览器中查看所有代码。
EDIT 1:
我忘了提及,在我的例子中,我使用 socket.js 作为激活系统,因此仪表板和模板在某种程度上是有联系的。
所以去的时候/:companyname
并且设备在自动转到之前未连接/activate
它会生成一个代码并监听用户是否输入该代码,以便将设备连接到用户帐户。
EDIT 2:
我一直在读到 ivy 可以用来动态加载组件,因此仍然可以处于 AOT 中,而不需要编译器。
这是可以做到的吗?如果可以的话,你如何实现这一目标?