一. node.js应用场景
一. Nodejs不适合的领域
每一种语言或平台都有不擅长领域,对于Nodejs来说最不擅长的领域在于CPU和内存的编程操作。
1. 计算密集型应用,让Javascript和C去拼计算性能,估计是不可能赢的。
2. 内存控制,让Javascript和Java比较复杂数据类型定义,也是很困难的。因为Javascript的面向对象是基于JSON的,而Java是直接使用内存结构。所以,通过JSON序列化和反序列的过程控制内存,Javascript就已经输了。
3. 大内存的应用,由于V8引擎有内存设计的限制,32位环境中最大堆是1G,64位环境中最大堆也不到2G,如果要一次读入10G数据,对于Nodejs来说也无法实现。
4. 静态服务器,虽然Nodejs的优势在IO密集集应用,但是和Nginx的处理静态资源还是有很大的差距。
5. 不需要异步的应用:比如系统管理,自行化脚本等,还是Python更顺手,Nodejs的异步调用可能会给编程带来一些麻烦。
二.node.js的异步机制是基于事件的,所有的I/O、网络通信、数据库查询都以非阻塞的方式执行,返回结果由事件循环来处理。node.js在同一时刻只会处理一个事件,完成后立即进入事件循环检查后面事件。这样CPU和内存在同一时间集中处理一件事,同时尽量让耗时的I/O等操作并行执行。
nodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景
以下内容是我整理的文档和教程,每个软件包对应一篇文章,大家可以根据自己的需要进行阅读,完整的文章列表,可以查看:从零开始nodejs系列文章。
Web开发:express,ejs,hexo,socket.io,restify,cleaver,stylus,browserify,cheerio
工具包:underscore,moment,connet,later,log4js,passport,passport(oAuth),domain,require,reap,
部署:forever,pm2
算法:ape-algorithm(快速排序),ape-algorithm(桶排序)
分类描述相关模块
网站类似于 cnodejs.org 这样传统的网站Express / Koa
Api同时提供给移动端,PC,H5 等前端使用的 HTTP Api接口Restify / HApi
Api代理为前端提供的,主要对后端Api接口进行再处理,以便更多的适应前端开发Express / Koa
IM即时聊天实时应用,很多是基于 WebSocket协议的Socket.io / sockjs
反向代理提供类似于 nginx 反向代理功能,但对前端更友好anyproxy / node-http-proxy / hiproxy
前端构建工具辅助前端开发,尤其是各种预编译,构建相关的工具,能够极大的提高前端开发效率Grunt / Gulp / Bower / Webpack / Fis3 / YKit
命令行工具使用命令行是非常酷的方式,前端开发自定义了很多相关工具,无论是shell命令,node脚本,还是各种脚手架等,几乎每个公司\小组都会自己的命令行工具集Cordova / Shell.js
操作系统有实现,但估计不太会有人用NodeOS
跨平台打包工具使用 Web 开发技术开发PC客户端是目前最流行的方式,会有更多前端开发工具是采用这种方式的PC端的electron、nw.js,比如钉钉PC客户端、微信小程序IDE、微信客户端,移动的Cordova,即老的Phonegap,还有更加有名的一站式开发框架Ionicframework
P2P区块链开发、BT客户端webtorrent / ipfs
编辑器Atom 和 VSCode 都是基于 electron 模块的electron
物联网与硬件ruff.io和很多硬件都支持node sdkruff