吐槽一下我所了解的Node.js


Posted in Javascript onOctober 08, 2014

首先是性能,用起来感觉 Node.js 的性能并没有想象中那么好。内存占用差不多和 Ruby 一个等级,比 Python, PHP 要多。计算性能(即 CPU 使用)上,纯计算并没有太大优势,但因为可以很好地控制异步流程,所以总体表现上来看性能要比 PHP 好很多。个人觉得 Node.js 在性能方面是有很大的潜力的,因为有很多大的项目在致力于提高 JavaScript 虚拟机的性能——比如各大浏览器;同时 JavaScript 是一个语法简单的语言,也是一个开放标准,不像 Python 和 PHP 一样因为顾及兼容性,很难进行大的重构来改善性能。

然后是包管理器和库,Node.js 内置了 npm, 因为 npm 是个非常好用的包管理器,因为 JavaScript 的编写门槛低,因为 JavaScript 本来就有很多优秀的前端库被移植到了后端,所以 NPM 上的包现在已经多于 PyPI 和 RubyGems 了,然后远超 PEAR 和 Composer. Node.js 的开发中不同于 PHP 的一点就是大家都不怕加依赖,每个小需求都去 NPM 上找已有的库来实现——而且往往都能找到。所以 Node.js 的开发基本上就是在组合依赖,然后倾向于把一个即使很小的独立需求写成一个库,这倒是和 UNIX 的思路比较像。再另一方面,Node.js 社区对开源十分友好,这里的友好是指大多数的库都是在 Github 上开放开发的,而且使用的是非常宽松的协议,例如 MIT, 不像 GPL 那么具有「攻击性」。

社区,Node.js 的应用大部分还是 Web 后端,而 Web 后端相关的库基本都是那么几个大牛搞起来的,例如 express, jshttp, jade, mocha 和 koa 就是以 TJ 大神为首的四五个人开发起来的,这倒是个有趣的现象。——虽然 TJ 大神最后决定淡出 Node.js 社区。

工具链,Node.js 比较年轻,很多好用的工具都是近两年刚刚出现的,例如预编译方言, 单元测试和模拟测试,构建工具等;不敢说有多好,但是要比 PHP 好非常多。至于原因,首先很大程度是因为这些库都是既可用于前端又可用于后端的,因为 Web 前端的硬需求,让 Node.js 顺便得益;然后就是因为 JavaScript 灵活而简单的语法,让这些工具可以以一些非常巧妙而优雅的方式来实现。至于 IDE, 依然得益于 Web 前端,还是有一些 IDE 可用的——虽然 JavaScript 语言本身不是很利于静态分析。

语法,我还要再强调一下 JavaScript 的语法简单而灵活,其中重要的一点是 JSON, JSON 几乎是目前 Web 领域最通用的数据格式,而在 JavaScript 对 JSON 具有原生的支持!JavaScript 中所有的数据结构都是围绕着 JSON 的一个超集——Object 展开的,包括数组,函数,对象和类。当然这样也带来一个麻烦,就是因为写起来限制少,导致不知道该怎么写,刚开始学习的时候总免不了反复重构,才能摸清各种设计模式在不同情况下的优劣,找到适合自己和适合具体项目的写法,所以可以说 Node.js 入门简单,但要构建大型项目,还是比较考验开发者的功力的。因为历史遗留问题,JavaScript 的语法算不上优美,不过还好我们有各种预编译方言,比如 Coffee Script, TypeScript, Dart, LiveScript 以及 ClojureScript, 总有一款适合你。

使用场景,JavaScript 是一个通用的编程语言,Web 前后端自然不必说,来看看其他方面。个人以为 Node.js 还是很适合用来编写服务器工具的,或称运维工具,因为运维中很多情况是可以异步工作的,JavaScript 又有比较不错的正则支持,替代 bash 和 Python 也问题不大;Node.js 只需装好解释器,就可以随便用,不用畏手畏脚地避免引入依赖。而桌面和移动设备编程,Node.js 有 node-webkit 以及其他各种外壳,虽然目前使用体验不是很好,但是可以非常显著地降低开发成本,轻松跨平台,想必前途也是光明的。

最后说学习 Node.js, 在我看来,学习 Node.js 分两点,一是要理清 Node.js 的「基于事件回调的异步 IO」,这是 Node.js 与其他主流编程语言最不同的一点。然后第二步就是把 NPM 上 Top 100 的库都看一下,不用细看,只要混个脸熟,知道每个库是干嘛的就行了。完成这两步,那么恭喜你,已经是一个 Node.js 开发者了。

Javascript 相关文章推荐
setTimeout 不断吐食CPU的问题分析
Apr 01 Javascript
JavaScript null和undefined区别分析
Oct 14 Javascript
JQuery 操作select标签实现代码
May 14 Javascript
jQuery操作input值的各种方法总结
Nov 21 Javascript
js调试系列 源码定位与调试[基础篇]
Jun 18 Javascript
node.js中的fs.fsyncSync方法使用说明
Dec 15 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
Jun 23 Javascript
浅析前端路由简介以及vue-router实现原理
Jun 01 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
Nov 13 Javascript
微信小程序使用for循环动态渲染页面操作示例
Dec 25 Javascript
vuex实现像调用模板方法一样调用Mutations方法
Nov 06 Javascript
vue $router和$route的区别详解
Dec 02 Vue.js
Node.js 的异步 IO 性能探讨
Oct 08 #Javascript
JS中的form.submit()不能提交表单的错误原因
Oct 08 #Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
Oct 07 #Javascript
js交换排序 冒泡排序算法(Javascript版)
Oct 04 #Javascript
Javascript获取当前时间函数和时间操作小结
Oct 01 #Javascript
js事件绑定快捷键以ctrl+k为例
Sep 30 #Javascript
显示今天的日期js代码(阳历和农历)
Sep 30 #Javascript
You might like
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
python实现web方式logview的方法
2015/08/10 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
keras slice layer 层实现方式
2020/06/11 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
教师校本培训方案
2014/02/26 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技