Monthly Archives: 九月 2015

加班的感触

早上看早一篇文章我是程序员,加班就是我活该吗?
我也是程序员,工作也有好几年了,算有了一些生活阅历,发表一下自己的想法。

说实话,对目前的行业状态来讲,没有那个公司不加班,公司要出业绩要有收益产出才能养活公司的员工,创业的朋友肯定知道市场上的竞争到底有多激烈,也可想而知每个公司都有自己的压力。

所以首先明白一点,当你想找工作的时候,请做好为公司贡献价值,这么说感觉自己十足是被公司给洗脑了,其实自己只是喜欢自己编程的职业,作为有职业道德人来讲,努力完成自己的工作是应该,考虑各个公司的不同,加班就产生了,你看BAT之流的那些大公司加班也不是没有,而且也不见得比普通公司强度小。

回头从自己的职业生涯看看,供职的每个公司都加班,连续加班一个月的时候也有,仔细想想加班的时候的确是累,但自己却从未抱怨过公司:
一是因为公司是自己选择的,当初找工作时就看上人家公司了,公司也认可了自己,所以选择自己喜欢的。
二是我一直认为,社会上360行,其实那个行业都一样,没有那个职位是活少钱多的,那么职业,如果现在的职业干着不舒服,那就换个职业,或者换个公司吧,人生不就是在不停的找寻的过程吗。年轻人不应该干点自己喜欢的事儿吗,让自己心委屈了,何必呢。

说了这么多也不是说自己就是贱,喜欢被压榨,是因为我清楚的知道,我还年轻,实力不够,能力还需要锻炼,阅历还不够丰富,人脉还不够广,积累是每个人都要做的一件事情,我想每个人心里都有个当老板的憧憬吧,所以低下头默默的努力就是。

所以个人对于加班不太感冒,只要公司在我有事儿的时候给假就好,世界那么大,公司那么多,想出去看看也好。

javascript-module

现下比较流行的模块化分为几大大阵营,一个是以RequireJS引领的AMD规范,还有就是以SeaJS为首的CMD规范,另外就是NodeJS引领的CommonJS规范。

当然YUI阵营为主的使用的是比较传统的对象字面量模块的方式,这种方案带来的命名空间的分层,痛苦在于太多的命名空间需要去管理。

CommonJS区别于AMD跟CMD的一点是,CommonJS 用在服务器端同步加载,AMD跟CMD用在浏览器端并且异步加载。

对于依赖的模块,AMD 是提前执行,CMD 是延迟执行.

AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹。

所有的模块化标准都基于一些默认规范:

  • 模块引用 – require
  • 模块定义 – define
  • 模块表示 – module

AMD (异步模块定义,Asynchronous Module Definition)

具有代表性Javascript库是RequireJSCurlJS

  • define

define使用

  • require
  • [module_id] 当前模块以来的模块数组
  • factory 当模块初始化要执行的函数或者对象, 如果是函数则被执行,如果是对象则输出对象。

require使用

AMD的优势

  • 模块定义都被封装了起来,帮我们避免了全局命名空间的污染。
  • 比其它替代方案(例如 CommonJS,我们马上会讨论到)效果更好。没有跨域、本地或调试带来的问题,也不依赖于服务器端工具。大多数 AMD 加载器都支持在浏览器中加载模块,而不须要一个构建的过程。
  • 提供了一个“传输”方法来用在单个文件中包含多个模块。其它例如 CommonJS 这样的方式都尚没有对传输格式达成共识。
  • 当需要时可以进行延迟加载。

CMD (通用模块定义, Common Module Definition)

SeaJS为代表,在推行SeaJS过程中定义的一种规范。
在 CMD 规范中,一个模块就是一个文件

  • define
  • factory 为函数时,表示是模块的构造方法。执行该构造方法,可以得到模块向外提供的接口。factory 方法在执行时,默认会传入三个参数:require、exports 和 module
  • require
  • exports

在factory内部,exports 是一个对象,用来向外提供模块接口。

参考资料