OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

JavaScript的模块加载可能有害


分享到
分类 心得体会   发布 ourjs  1392643239000
注意 转载须保留原文链接,译文链接,作者译者等信息。  
OurJS注:就像原文评论所指出,作者批评的是在前端领域过度使用异步模块加载方式。通常的Web应用会对JavaScript文件进行合并,压缩(Minify)以减小连接数,和文件体积,以更好的利用缓存,提升用户体验。原先的JS源文件最终会变化一个或两个上线。这跟后端(NodeJS)分散的代码组织方式会有所不同。

简介

我最近倾向一个观点:JavaScript的模块加载是非常不好的,我认为从总体上来说,这不是一个好主意。其实也有适合他们应用的场合,最后我会提到。

现在,估计我是这里的少数派。除了CommonJS和AMD模块加载方式, (参见:JavaScript模块化编程:AMD规范及require.js用法),其他加载系统像RequireJS或者(说实话我非常吃惊)Google Module Server,Node浓重的文化正在影响着Javascript世界,你很难去说JavaScript模块加载的不好。纯脚本太老了,太傻了,太不方便了。每个人都知道,所以他们不会指责自己喜欢的东西,对吗?

我准备走出这个群体,并说:“JavaScript模块加载可能有害”,下面希望我能说服你认同我。

危害#1:混乱的调试

模块加载机制在一些明显和微妙的地方调试困难。

压缩,转换还有其他的预处理都支持模块加载(有些其实并不是必须,仅是为了保持一致),从原文件加载模块通常都是由浏览器来完成的。所以当你调试代码时经浏览器加载的代码经常会与实际代码不匹配。Source Maps可以解决这个问题,但在高度其它浏览器时还是会有问题。(注*Source Maps为一种新的调度方法)

通常,在源代码没有改变或者source maps正常工作时,模块加载所产生的动态标签会产生一些问题。调试器可能无法区别在页面加载时装载的脚本,例如,如果不写成内联的script标签,你设置的断点可能消失。

其实很难评价模块加载所带来的便利和他们所引起的问题,总的来说他们应该帮助你组织结构和保持简单,而不是增加工作量。

危害#2:模块加载顺序

也许模块加载的最常见和折磨人的瓿就是脚本的加载顺序。跟在你的页面按顺序加载SCRIPT标签相比,理解模块何时被执行是非常折腾的人的。

通常最先加载的模块会被执行,但内部模块依赖决定了他需要等依辣的模块加载完了才执行。

这有一个明显的优点,可以帮助我们定义并理解依辣关系,这些引用可以通过require()调用清晰地表达出来,是非常令人钦佩的。

然后,实际情况里,我们的项目通常没有如此复杂的内部模块依赖。

危害#3:工作并发症

显而易见,使用模块加载系统代替简单的脚本工作起来非常困难。

因为整合这个众所周知的困难,很多第三方库并不使用相似的模块加载系统。多个系统会让他的工作更加复杂。这些库的作者不得不添加将模块添加额外的封装,以便不同的模块加载系统去调用,不管用户是不是采用。

当你带一位新的程序员到一个项目中,或者一个程序员找到一个有用库,但这个库使用模块加载(如RequireJS)组织,这就给他带来了一些障碍,其实他只想添加一个简单的script。这值得吗?我担心这样会导致我们的系统碎片化。

结论

最后还是要看这种加载方式所带来的便利性和成本的对比,如果加载方式带来的便利性大于支出,说它有害是没有道理的。比如你有一个非常庞大的代码库,如果一开始就加载所有内容会影响性能,用户体验时,你可以采用。
原文地址: 点此
社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. JavaScript专业八级测试,你能做对几道?
  2. 微软,请不要使用 Try/Catch
  3. Web服务性能测试:Node完胜Java
  4. 码农,骇客,程序员,开发者和计算机科学家的区别
  5. 为什么大神级程序员的C语言代码里到处都是goto?
  6. QQ邮箱是如何泄密的:JSON劫持漏洞攻防原理及演练
  7. Linux应该作为学校基础教育的一部分
  8. 下一阶段的NodeJS:TJ负责Node,NPM可能要收费
  9. 你不知道的JavaScript用法,Hacker是这样写JS的
  10. 告诉大家一个好消息,我被炒了!
  11. AirJD-简单好用的免费建站工具

 相关阅读 - 心得体会
  1. 为什么使用"use strict"可以节约你的时间
  2. LESS vs Sass?是时侯选择Sass了
  3. 别用CoffeeScript了,你总有一天得学JavaScript
  4. 为什么大神级程序员的C语言代码里到处都是goto?
  5. 微软,请不要使用 Try/Catch
  6. 人们为什么不使用Python3?
  7. 代码不等于计算机科学:为什么所有人都应该学习编程
  8. 一名靠谱的JavaScript程序员应备的素质
  9. 程序员最艰巨的十大任务
  10. 世界上最优秀的程序员同时也是活得最快乐的人

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号