关于sap:一些关于-SAP-Spartacus-组件和模块延迟加载的问题和解答

4次阅读

共计 1226 个字符,预计需要花费 4 分钟才能阅读完成。

  1. 仅执行组件提早 (Component lazy load) 加载是不是不起作用?进行这项工作是否须要任何设置?思考到咱们在整个网站上应用的共享组件,咱们想采纳这种办法(即组件提早加载)。这样,咱们能够只测试每个组件。

答复:组件提早加载无效,然而在更简单的组件(应用不同的指令和组件)的状况下更加艰难,因为动静导入仅针对组件类 Component class,而不是 Angular 模块。如果这些组件类中应用到的指令和其余组件并没有被加载,则运行时会报各种谬误。

这些简单状况的一种解决办法是将模块 (module definition) 定义嵌入到与组件自身雷同的文件,即在 Component 实现文件里,再定义一遍模块。因而模块将与组件一起加载。

  1. 如果咱们持续抉择模块提早加载,咱们如何从插槽提早加载没有与 CMS 组件映射的 Angular 组件?

答复:它目前在 Angular 框架中不是开箱即用的。默认状况下,Angular 反对路由提早加载,对于像 Spartacus 这样的 CMS 驱动的站点,咱们不能应用基于路由的形式来提早加载一个 Angular 组件,因为咱们在构建时不晓得指定路由须要哪些组件。

这就是 Spartacus 利用 CMS 映射作为反对提早加载的机制的起因。简而言之,咱们能够失去一个提醒(在导航到它时)指定页面须要哪些组件,而后应用 CMS 映射配置,提早加载所需的组件或性能。

  1. 模块内的动态导入是否会影响组件 / 模块提早加载?例如:咱们在 HomePage 模块中导入了 iconModule 并且以后主页模块正在 app.module 中提早加载。在这种状况下,组件提早加载不起作用。模块提早加载仅实用于 home 模块

答复:如果您动静(惰性)和动态地导入一个入口点,那么构建器(webpack)将使其动态捆绑。这是一个常见的状况,为什么提早加载可能不起作用,在某种程度上,应用程序应该依然能够工作,如果配置正确,代码拆分机制将不会对这段代码起作用,并且不会生成独自的 JS 块。

然而,动态导入能够在独自的提早加载模块之间共享。如果这些导入仅在提早加载的模块之间共享,则将创立非凡的共享块,它将加载两个性能。如果导入也与间接在主块(app.module)中导入的某些组件或模块共享,那么代码将被动态捆绑到主块中。

  1. 为了测试目标,咱们尝试了组件和模块提早加载。它们都不能齐全工作。即便在增加了 provideDefaultConfig(b2cLayoutConfig) 之后,只管增加了这个,UI 依然会在奇怪的中央中断。

答复:很难从这个形容中猜想潜在的问题。一般来说,如果提早加载不起作用,最好的方法是一步一步地做,从很少的组件开始,并辨认潜在的问题。即便如此,依然会有局部代码须要立刻加载,例如应用程序初始化程序、http 拦截器等。

从 Spartacus 3.0 开始,咱们开始公布带有默认提早加载性能的整个库。所有新性能都是以这种形式创立的 + 咱们正在继续移动现有性能,同时改良机制和技术(但依然是雷同的机制)。

正文完
 0