Node新手的几个问题
- 最近在看朴灵写的书,其中有一段不太理解。“C/C++扩展模块与JS模块的区别在于加载之后不需要编译”,按照我的理解C/C++扩展模块在require后是调用编译好的二进制文件,而JS是解释性语言他不需要编译,JS模块需要解释器逐行解释,自然要比二进制的机器语言慢,我这样理解对吗?
- 无论是核心模块还是扩展模块,自然是C/C++的执行效率比JS高很多,我能理解成JS只是一个壳子吗,在我们做一些简单事务不涉及大量CPU计算时用JS提高开发效率,而遇到CPU密集的事情是则需要编写C/C++模块来提高效率?
- Node我的理解有两个含义,狭义理解就是一个V8解释器的升级版,广义实际上是一套后端服务框架?
新手问题略显粗浅,还望各位大牛海涵
3 回复
1,不必过于纠结字眼,做node开发大多数是在js层面做业务逻辑开发。 2,node主要是适用与IO时间远大于计算时间的。比如一个远程数据库的访问。不需要执拗于执行效率。 3, 《深入浅出nodejs》中介绍了node的整体架构.js->v8+Addons->libuv。 你自己的理解也是对的。nodejs的核心是异步非阻塞,充分了解nodejs的适用场景。
- V8 会在加载一段 JavaScript 的时候将其编译成一种内部格式来加速之后的执行,所以需要一定时间,但这里「编译」和传统意义上的从源文件编译到本地代码的过程并不完全一样。
- 但通常 C++更快,但不见得所有情况下 C++ 都最快。C++ Addon 可以使用现有的 C/C++ 库和 Node 标准库中没有的 API,可以节省开发的时间(否则你要用 JavaScript 重写一遍),然后 C++ 可以使用独立于 V8 的内存,可以使用独立的线程。通常没有必要写 C++ Addon, 需要进行 CPU 密集操作时用 Node 的 cluster 开单独的进程即可。
3 Node.js 目前倾向于称为一个 runtime