AngularJS: ocLazyLoad与RequireJS的比较

22

我正在开发一个大型Angular项目,显然我们需要一种懒加载脚本的方式。

我之前使用过require.js,它很不错,但问题在于,当我们合并和压缩文件后,得到了一个1.5M的JS文件。

所以我刚刚遇到了OcLazyload,它看起来很有前途,但我在网上看到了很多同时使用require和ocLazyLoad的示例,我有点困惑为什么你要同时使用它们。它们不都是做同样的事情吗?


1
请注意,使用RequireJS可以按需加载某些文件,即仅在实际需要时(例如在指令或类似情况下)加载。因此,请确保您的“缩小”捆绑包只包含最初需要加载的内容。 - floribon
@floribon - 但是OcLazyLoading也可以做到同样的事情,甚至可以与ui-router集成,并按状态加载文件。 - Tomer
3
我在回答你对捆绑大小的关注。但我不知道ocLazyLoading,它听起来很棒,因为我一直想这么做。它们并不是互斥的,ocLazyLoading需要一个依赖管理引擎,默认为$script.js,但显然您可以使用RequireJS,所以我的建议是同时使用两者。 - floribon
2个回答

31

您可以使用RequireJS和ocLazyLoad,但我不建议这样做。之所以可行是因为一些人要求我这样做,并且它很容易集成。

您不需要使用RequireJS,因为ocLazyLoad包含了自己的js/css/templates文件加载器,并且它可以加载任何类型的文件,而不仅仅是Angular模块。

如果您想要延迟加载Angular模块,则需要使用一个库将它们与Angular注册(或等待Angular 1.5,该版本将允许您这样做)。

最重要的是:您可以使用RequireJS和ocLazyLoad,或者只使用ocLazyLoad(推荐),但不能只使用RequireJS。


很好的解释。但是在实现oclazyload时我有疑问。使用oclazyload,加载变得容易了。但是当涉及到加载依赖项时,在requirejs中,如果我在shim中提到了deps,它会自动加载依赖项。但是在oclazyload中,我必须为每个路由手动指定每个依赖项。是否有像requirejs一样用于加载依赖项的代码重用? - Jeeva J
我认为RequireJS可以维护依赖项。在代码中维护依赖项非常容易。使用RequireJS的OcLazyLoad将为代码管理和可重用性提供更好的解决方案。 - Jeeva J
2
谢谢@Oliver,解释得很好。我也写了一篇博客 https://goo.gl/aEUWVt。 - Dhiren
虽然RequireJS已经是一个遗留技术,但你仍需要它来指定异步加载依赖项的确切顺序。我相信ocLazyLoad不支持这一点。此外,你也无法像“modules/feature1/feature1Module.js”,“modules/feature1/feature1Controller.js”,“modules/feature1/feature1Service.js”这样组织文件结构。 - Anirudha

18
你需要同时使用ocLazyLoad和RequireJS,因为你现在处理的是两个不同的模块概念——JavaScript模块和Angular内部模块。
在初始启动后,AngularJS不再允许注册新模块和组件,如指令和控制器(至少不能使用标准方法)。
RequireJS只加载JavaScript文件,但它不会在新代码中注册新的Angular模块和组件。
ocLazyLoad所做的是允许您使用第三方模块加载器(如RequireJS)加载其他文件,并且更重要的是,在惰性加载的代码中在Angular中注册新的模块和组件。
总之,您可以仅使用RequireJS进行惰性加载代码,但是您无法仅使用RequireJS加载Angular模块和组件。需要进行额外的工作,例如ocLazyLoad所执行的工作。

2
oclazyload不会自动加载资源吗?如果可以只使用oclazyload,为什么要同时使用两者呢? - rebelliard
你不必这样做。但问题是选择哪一个。 - Adrian Mitev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接