Node精华
字面量
字面量定义绝对是javascript的精华,
- 简单, 直白,
- 没有副作用和二义性.
- 并且避免了各种继承和复杂关系.
调度
简单就是好, node的任务调度堪称完美.
- 任务栈
- 单线程
- 异步
包(库)管理和框架
- 库是好的, 因为他并没有改变某个语言的语法结构, 在这点上, c++的设计理念很合理.
- 框架, 一般情况, 能不用就别用了, 一般都会很严重的改编一个语言. java除外, 因为java原生语法实在是太唠叨了, 因此, java框架大行其道.
-
js的包管理勉强还算不错. 勉强的意思是, 国内要用cnpm才行.
-
但是, 包的依赖管理和引入机制真的是精华.
- 直接引入为一个实例,
- 也就是说是库的引入的概念, 而不是框架的概念.
- 一般的包都完全不会改变现有任何代码的含义以及语法.
-
一般情况下很难造成冲突, 只有特殊写法才会造成包冲突, 请看示例:
//一般引入包, 都会直接引入为一个实例, 也就是说是库的引入的概念, 而不是框架的概念. 一般的包都完全不会改变现有任何代码的含义以及语法. var request = require('request') //引入了, http处理库request var fs = require('graceful-fs') //引入了file处理库 fs.appendFile("./log/tes" , function(err) {});//这样使用, 看到了吗? 库对所有其他的代码都没有任何影响. request.get(url, { "qs": "restring" }, httpr)//httpr是个回调函数. //那么也就是说, 大家各用各的包, 就算是我的项目和我引入的包, 都依赖于同一个包的不同版本, 那么也没有一毛钱关系.
-
如果要想造成冲突, 那么, 唯有一种写法, 就是用prototype来做事, 所以这里引入了一个原则:
- 尽量别用prototype.
-
乱定义全局变量也会造成冲突. prototype+全局变量这就是老式框架的问题(比如jquery)
javascript和perl走的是同样的路
代码怎么写都可以. 但是, 某些写法会有很多问题. 大家一试就知道了, 然后, 很快就能形成一套合理的范式.
- 尽量用字面量, 而不是new一个对象.
- 尽量用字面量, 而不是prototype.
- 成员(变量/函数)用点或者中括号(引用)都可以. 一般用中括号代表你要动态决定成员.
- js和perl一样, 如果用了特殊的技巧, 那么一定要写详细明确的注释, 否则, 过些日子, 自己都看不懂.