node.js初步认识 | 天一阁

node.js初步认识

Node.js是干啥的

之前一直以为Node就是一个可以在shell里面执行js的工具,现在看好像也不止于此。我现在的理解就是这个Node是一种新的网络Server开发方式,尤其是为了Web开发而设立的。其特点就是事件驱动,单进程非阻塞IO方式。这样据说可以在IO密集的场景,大幅提高应用的性能。

特点

Node是利用google的V8 Javascript引擎,可以高性能的解析Javascript,Node在V8基础上封装了很多后端应用才会用到的Module。这样就发生了一个很神奇的现象,就是一种浏览器脚本,常见于前端页面开发的语言,竟然可以开发后台Server开发。而且Node的设计理念是单线程,全异步,在某些场合会比较高效,单机的QPS、吞吐量也会相对高一些。

而且因为是使用JS语言,这样可以使得前后端使用同一种语言,语言切换成本变低了很多。加上JS这么语言有很多灵活的语法,可以让开发更加快速。

同时Node里面还有一种包管理机制,我的理解就是各种类库。这些类库可以很方便的通过工具npm,从网络上下载对应版本。这些类库有几万个,涵盖了各种功能,很像乐高积木一样,堆堆搭搭就形成了一个后台服务,提供您Restful API或者 返回普通HTML页面。

基于Node也有比较成熟的Web开发框架——Express.js , 虽然我还没深入研究,估计这个就是类似Lavaral, Flask, Django,这类的MVC框架,只要写好URL路由,做下ORM,然后在各个Controller里面写业务逻辑,就能返回View了。

JS的特性

看了一些代码,很多看不懂,让我自己写,也是让我头疼的不行。主要原因是对Node不熟悉,更重要的是对JS的语法和开发形式不熟悉。我估计以后得有人写“Javascript编程思想”这类的书了。js里面有些新特性,我后面还得慢慢体会和测试,比如匿名函数、闭包、函数式编程、链式调用、回调函数。回头把这几个概念搞清楚。

对比感想

有时真的很感慨。就在10年前,这些搞PHP的都被看做是做前台的。本来就是么,PHP最终的输出就是一个个也HTML页面,尽管页面上有很多数据,但之前他们是不能直接连接DB的,他们获取数据的方式必须通过后台Server啊。

而十年过去了,弹指一挥间。这些前端开发语言,脚本语言成了主流,他们具有了和C++一样的,甚至更好的特性,开发工具也越来越好,人也越来越聪明,知识也学的越来越快。反倒是像我这样的,经验反而成了负累。

虽然思路是一样的,多进程/多线程,异步IO,cache,DB,面向对象,封装,继承,多态,然而现在没有什么多态,只有callback Function。以前做后台开发还要自己设计消息结构,消息头,消息体,现在好了,底下HTTP,上面用JSON基本是万能的了。各种精巧的接口和注意事项,已经全然无用了。不过这样顺应了时势发展,本来以前的所谓C++Server其实很多一旦把一些类似Redis,RabbitMQ,进程间通信,这些通用逻辑一旦剥离出去,其实就剩下基本的业务逻辑判断了,无非就是if, else, for , write , update这类的简单操作了。

后续的学习想法

本来是要记录技术的,结果又发了一大堆牢骚。以后不发牢骚了,忘记过去吧,大部分经验都是枷锁,丢下枷锁,才能真的获得自由。

我看现在IT信息技术,有这么几类

应用开发

后端

现在看其实在应用开发中,主要就是后台数据服务,其实就是业务逻辑,业务逻辑可能复杂,不过主要也就是是对各种数据增,查,改,删,CRUD,一般是PHP, Python, JS也有少部分。数据量大了,访问量大了,业务环节多了,可能总体的解决方案就会用上各种知识和智慧了。

前端

Web前端主要是HTML ,CSS,JS和各种类库,框架,还是为了开发的快捷性。iOS前端和android前端,稍微会复杂一点,因为除了要处理界面展示问题,还要处理一些其他的逻辑,他们更是完整的MVC模式。web前端更多是V,而web后端是M和C的逻辑多一些。

应用类开发更加侧重工程性,工程就是当访问量很大时,用哪些现有技术可以更加高效、快捷、高性价比的满足业务场景的需要。所以工程性好,就是代码本身设计结构合理,系统间各层级,各模块功能划分合理,耦合度低;而且充分利用好各种行业通用的工具,无论是开发工具,还是代码类库。同时要有好的开发方式,让很多人同时顺畅的合作。这才是应用开发中更多需要考虑的内容,至于用了哪些创新算法,其实根本不care,一般来说行业内一定有比较优秀的解决方案,最多是做剪裁和优化。当然能够把所有现有的技术全部掌握精通,那也是非常了不起的,毕竟范围太广,而且不停的在更新。

算法

这里可能涉及一些分类,预测,推荐等各种算法,但如果是为产品服务的话,其实更多也是利用现有的模型,然后在基于自己场景做调参。

系统软件/框架

这类给应用程序员开发的软件,其实也未必是有多么技术含量,只不过就是人家已经形成规模了,而且很多是免费,都是可能一个大型系统中的某个组件,顺便就开源了,然后有更多人参与进来,然后就成了行业规范或惯例。比如OS,DB,Cache,编译器、解释器,一些开发框架、类库都可能是这样的。这些东西学习一下挺好的,就是涨涨见识,未必能够真的能超越。

底层硬件

从CPU,磁盘,网络,到树莓派,ardinuo等等,这些硬件知识应该去了解,但是很难学得深,一个是有点跨专业,一个是缺少实践的机会。

这么多内容一个大问题就是学完就忘,我想全学也没啥意义,应该是从业务角度出发。去解决问题,而不是一味的在这里遍历技术。在解决问题的过程中,再去思考技术上的创新。