首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS的IIFE陷阱

AngularJS的IIFE陷阱
EN

Stack Overflow用户
提问于 2014-07-07 16:31:30
回答 2查看 265关注 0票数 1

我有一个用angularJS做的应用程序,整个应用程序由IIFE(立即调用的函数表达式)组成。每个模块、指令、控制器本身就是一个生命,它们大约是100。

我想知道当一个应用程序有这么多IIFE时,性能陷阱是什么。

可以将IIFE与AngularJS一起使用吗?

在AngularJS中使用browserify和requirejs这样的库来管理依赖关系有多好?

你能帮我解释一下吗?

EN

回答 2

Stack Overflow用户

发布于 2014-07-08 17:41:28

你首先需要问的问题是,你在生活中是否有一些你不想暴露在全局范围内的内部部分。

以这种方式创建闭包的全部目的是模仿封装并避免污染全局范围。

性能陷阱不是那么容易衡量的;我认为在创建IIFE时,性能问题可以忽略不计(不要忘记您只是在创建一个函数)。我可能想到的一个性能问题是,当您从内部函数引用一个函数变量时,您需要遍历作用域链并从闭包对象中获取它。

我建议你看看像模块模式,显示模块模式等模式。我个人使用的是显示模块模式。

Browserify和requireJS是实现两种不同规范的两个库: commonJS和AMD。这两个规范试图适应ES3或ES5不支持的功能;这是一种定义模块,然后将其加载到指定位置的方法。

如果您想定义模块并以类似于软管nodeJS works的方式同步加载它们,您可以使用Browserify。此外,Browserify允许您在客户端和服务器端使用相同的模块(只要您使用的是nodeJS)。

另一方面,如果你想异步加载你的模块,你可以使用AMD和requireJS,但是你不能在后端重用它们。

最后,请记住,您提到的所有内容都与angularJS没有直接联系;这些都是一些很好的JavaScript实践,可以克服语言本身的一些问题。无论您是否使用angular,它都可以很好地使用。

我建议您使用browserify或requireJS;从长远来看,它将使您受益。想象一下有100个JS文件;您需要根据依赖图以正确的顺序手动将其输出到html中。您很容易遇到诸如竞争条件之类的问题,即一个文件应该在另一个文件之前插入。

至于IIFE的性能开销,您应该不会有任何严重的问题。

票数 0
EN

Stack Overflow用户

发布于 2014-07-08 20:24:57

正如另一个答案所说,IIFE是一种很好的通用实践,独立于AngularJS。

如果您担心IIFE的性能,请继续查看JSPerf上的这些性能测试(或者编写自己的测试):

  • http://jsperf.com/iife-antecedents-in-js
  • http://jsperf.com/immediate-anonymous-function-invocation

虽然生命创造的一些方式显然比其他方式慢得多,但我不会担心IIFE的性能,除非你在一个大循环中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24606181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档