Node深入浅出 章节总结(第一章 — Node简介) 持续更新...

看完第一章给我的感觉是,填了一些我之前感到困惑却没有深究的地方,就基于第一章来说,我个人已经建议可能完全不适合刚使用node的前端了,后端可随意看,因为身为一个前端,即使你看懂了,但你也不知道为什么这么说,为什么这么处理,我不保证后续我会不会有这种感觉,但是大家从博客的博文就可以看出,我从去年年初就已经开始关注并且断断续续的学习node了。我想这也是为什么本书网上各类书评都说不适合初学者的原因了,在我看来,如果你想看这本书那么你至少要满足以下几点:

  • 创建过较为完整的web应用,用 express 就行,没有必要完全用原生的node语法来写,会写死你的。。。学习链接推荐 Node博客系统教程 在其中,我某些总结是不完全正确的,但是我不打算去更改,因为从根本上来说可以说是正确的,只是某些说法不正确,也算是我过去学习的痕迹吧,大家可以直接忽略我的一些建议直接选择只看教程作者本人的文章。
  • 写过一些脚本及简单爬虫,我写过简单的一些项目初始化脚本、acfun电影列表简单的数据爬虫、某个教育网站子网站的文章图片熟悉一些包、文件合并等简单的东西用于练手与熟悉一些node的基础模块及语法,在这其中你会用到很多node基础模块来帮助你了解这门语言,如 fs、path、child_process、buffer等,至少我列举出来的这些你得知道吧,教程推荐的话就这个吧 阿里node教程—七天学会NodeJS (然而并不可能)
  • 不满足于停留在前端,这点很重要,不然没有必要看了。。。
  • 相信即使现阶段用不到,以后也一定有机会使用,从我学习的过程中,大家就可以看得出,我在工作中基本没用到过。。。甚至第一次写的用于上传构建的脚本都是用 python 写的。。。。。。我很后悔,但是我们绝对不能放弃,抓住每次有机会使用node的机会,如果你的公司用,那我觉得你运气真是太好了,羡慕。

以上的就是本书总结开篇了,以后不会再出现这些话了。

一、Node 为什么会选择 javascript
去除书上的这么多废话,我总结了作者的几个点。

  • C/C++ 用的人少、门槛高,深入实在是太难了,弃用;
  • Haskell node作者理解不够,算了吧;
  • Lua 本身就有很多阻塞的 I/O 库了,开发者们思想根深蒂固,历史包袱太重了,还是不写了吧,到时候没人用;
  • Ruby 虚拟机性能不好(这个我真不了解,我也解释不了为什么。。。),放弃;

而最终选择 js 的原因也很简单

  • 在后端基本没有人用它来作为服务端脚本语言,至少没有一个成熟的体系,基本没有历史包袱;
  • js门槛低,大家多少都会写点,到时候肯定很多人会用;
  • 作者喜欢 js 的事件驱动模式,函数作为第一等公民,函数式编程爽歪歪;
  • 最重要的一点,V8 引擎的性能优化实在太好了。

二、Node的一些特点(优点)

  • 基于事件的异步 I/O 处理,从 fs、http 模块的用法我们就可以看出了,作者为此在底层费尽心思构建了很多异步 I/O 的 API,据我大学写C与Java的渣渣经历来看,基本没有其他服务端语言这样做,当然你问我现在还会不会 C 或者 Java,那我可以很直接的告诉你,不会 哈哈;
  • 由于是基于事件的,所以和web前端的写法极为类似,上手难度对于前端来说,相比于其他语言,简直是降维打击;
  • 由于是异步并非阻塞的 I/O 处理,就可以做到及其高效的进行 I/O 密集型任务了,比如聊天应用中的消息队列;
  • 单线程,不会造成线程间的互相依赖处理,导致死锁的产生。

三、Node的一些缺点

  • 由于是单线程,那么最大的缺点当然是无法利用多核CPU,导致计算能力太弱,js 这门动态语言在计算能力上也有先天缺陷,因为无法像静态语言一样定义类型,导致计算小数点时,默认精度为 double 类型,从而出现小数计算默认出现了结果长度为 18 位的小数,这真的是硬伤;
  • 由于是单线程,一个错误会导致整个应用的退出,及其影响应用的健壮性(这里就突出进程守护的重要性了)
  • 大量计算占用CPU导致无法继续调用异步 I/O
    • 解决思路:引入与 web workers 同理的 child_process 模块来创建一个子进程处理某些cpu的密集型大数据计算处理,通过将计算分发到各个子进程来将大量计算过程分解掉,然后通过进程间的事件消息来传递结果,前端H5添加的web workers就是这样来处理 js 的大量计算导致 UI 渲染阻塞的弊病,无法利用多核的情况也得以有效缓解。

四、相比于其他服务端语言是否存在竞争关系

  • C/C++ 没啥竞争关系的,C与C++并不适合做 web 应用,太繁杂、太难了。。。
  • JAVA 竞争关系什么的不存在的,java对大数据计算的处理及大型应用的成熟社区解决方案可以说是目前 node 根本追不上的,而且中小型应用你用什么 java,不嫌开发速度慢啊,可以说 node 跟 java 的应用场景是不一样的。
  • python 大部分人并不会把 python 用来做 web 应用吧,一般还是用来写脚本、爬虫、自然语言处理等,很少会拿来作为 web 应用,python 用来做 web 真的没什么优势。。。和 node 的话,竞争关系真的不大。。。
  • PHP 关键的部分来了,个人认为 PHP 和 Node 真的是竞争关系。。。同样都是适合作为中间粘合层的存在,做大型应用大家都做不赢 java ,虽然我对 php 了解不多,但是起码根据社区的反馈大家客观还是看的出来的,部分人还将 php 归属于前端,但你还真可以说它做的事是属于前端~而作为中间层的存在,php确实是优秀。。。而 Node 也很优秀,这点真的就看公司的选择了,所以真正具有竞争关系的绝对是 PHP 和 Node。

希望我的总结能够做到让大家不看书也能大概知道书上每一章的重点及概括,这也是我看完每一章做总结的目的与意义所在,不止帮助自己再梳理一次,也帮助不了解的同学做一个大概的了解。

猜你喜欢

转载自blog.csdn.net/yolo0927/article/details/79057210