吐槽一下我所了解的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 相关文章推荐
JavaScript库 开发规则
Jan 31 Javascript
jQuery语法总结和注意事项小结
Nov 11 Javascript
解析John Resig Simple JavaScript Inheritance代码
Dec 03 Javascript
JS文本框默认值处理详解
Jul 10 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
Sep 30 Javascript
基于JavaScript实现购物网站商品放大镜效果
Sep 06 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
Dec 22 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
Jan 11 Javascript
JavaScript实现学生在线做题计时器功能
Dec 05 Javascript
深入探讨JavaScript的最基本部分之执行上下文
Feb 12 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
May 02 Javascript
React forwardRef的使用方法及注意点
Jun 13 Javascript
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
Banner程序
2006/10/09 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
node.js读取文件到字符串的方法
2015/06/29 Javascript
js选择器全面解析
2016/06/27 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
python 制作网站小说下载器
2021/02/20 Python
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
大学生毕业的自我评价分享
2014/01/02 职场文书
建筑工地文明标语
2014/10/09 职场文书
天堂的孩子观后感
2015/06/11 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
Go语言空白表示符_的实例用法
2021/07/04 Golang
Python 数据可视化之Seaborn详解
2021/11/02 Python
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server