当前位置: 首页 > 编程笔记 >

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

濮宇定
2023-03-14
本文向大家介绍吐槽一下我所了解的Node.js,包括了吐槽一下我所了解的Node.js的使用技巧和注意事项,需要的朋友参考一下

首先是性能,用起来感觉 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 开发者了。

 类似资料:
  • 我宣布,本次面试是秋招三个月以来最迷惑的面试,没有之一 众所周知,腾讯今年不怎么招人,我投了天美,然后国庆前被腾讯云捞了,也算是意料之中吧 本来我以为腾讯云的面试会很难,结果确实很难,是让我怀疑自己的难 我举几个例子吧 1. 谈一谈对C++面向对象的理解 我的回答就是,封装、继承、多态,巴拉巴拉一堆,然后重点来了 我当时回答的是(我个人理解,可能不够全面):继承能够减少代码复用,因为子类型对象中包

  • hr跟面试官一起面试 先做了自我介绍,然后介绍了下实习经历 我面试的岗位是java开发,面试官是做c++的,介绍完项目啥问题都没问,只问了会不会c或者c++,然后结束了 反问公司主要业务,盈利手段,hr也没说明白然后让我自己去搜一下... 全程不到十分钟反问还占很大部分... 这样面试真的能筛人吗...

  • 一面 全长20min左右 1、一分钟自我介绍; 2、你对携程公司的了解; 3、针对自己的实习经历进行提问; 4、如何和开发沟通 5、如何获得需求 6、产品经理需要具备的能力  反问 1、本场面试还有什么地方可以改进(面试官当时笑嘻嘻的和我说你之前的回答都很好,很符合他的心理预期,很满意,然后反手给我挂了) 2、携程在疫情下有没有做些改进(我当时就是嘴贱,HR好像也不是很懂,HR就说你可以问问产品相

  • 我正在测试简单拓扑以检查Kafka喷口的性能。它包含kafka spout和Bolt来确认每个元组。Bolt执行方法: 拓扑结构如下所示: 其他拓扑设置: 我在10分钟内得到了1.5kk元组。螺栓的性能约为0,5。所以我的逻辑很简单:如果我双倍喷注和螺栓并行提示-我将得到双倍的性能。下一个测试是1个工人2个Kafka喷口,2个简单的夹子螺栓和Topology.Acker.Executors=2。以

  • 岗位要求如下, 面试上来口述做了个题.... 岛屿数量 然后说我们是搞算法的.... 巴拉巴拉 然后介绍我导师的一个深度学习项目... 然后说巴拉巴拉,你有了解网络,算法原理,或者有没有算法经验巴拉巴拉... 我说我主要工作是深度学习下游任务,找工作也都是开发岗 然后就 你可能和我们岗位不太匹配.. 巴拉巴拉,还找了个理由,说我抽象问题的能力不行,介绍项目说的都是自己在做什么.... 还给我建议说

  • 摆烂了,投了400家,面了30多家,连个毛都没有 从焦虑到摆烂了 今后下午3点,专门吐槽:吐槽互联网大厂的奇葩面试题 看面经看吐了,吐吐槽至少少点郁闷 大家可留言遇到的奇葩和不理解的问题,我来发吐槽 面经题:从产品的角度,怎么说服用户去使用我们的产品 来源:阿里云数据产品实习岗 吐槽: 面试官,你能不能请你的火箭狗过来一下?从我的疯狂角度来看,我会派遣一只来自外太空的火箭狗,它会飞到用户家里,吐出