js 一把梭挺爽的,让我告诉你 php 换 nodejs 之后爽在哪里
1.异步 io 性能大幅度提升。很多人说你的项目压根用不到语言的瓶颈,但他们往往说的是计算瓶颈,而不是 io 瓶颈。很多 php 用户没搞清楚“异步里面不能套同步”就上 swoole ,就和很多 python 用户在 tornado/fastapi/asyncio 里用内置 file 等 io 阻塞型函数,java 用户在 netty 里用 jdbc 那样。我测试 8700K [单核心] 空跑 node 的 qps 有 4w ,内存占用 65MB ,这种性能优势随便招个人培训一下随便写都不会差到哪里去。
2.单步调试。说实话很多 php 用户连 xdebug 都没用过几次,echo/vardump 一把梭,更别说在 swoole 里用断点调试了。
3.有很多相似的库。像 Laravel 的框架有 AdonisJS,像 SpringBoot 的框架有 Nest.js,像 Yii2 的 ORM 有 TypeOrm,用 JavaScript 实现的 PHP 函数库有
https://github.com/locutusjs/locutus (注意不要用 io 相关和加密相关的,是阻塞实现)。
4.代码复用。很多逻辑判定的代码可以复用,不过要在编码过程中注意调用环境,函数最好是无运行环境依赖的。
5.服务端打包。node.js 打包是非常多的人忽略的,包括各路 serverless 厂商。大家认为有 docker 就不需要打包了,但是 nodejs 是可以直接打成二进制的。比如
https://github.com/vercel/pkg 这个库可以把 nodejs 项目打包成二进制,然后可以直接在服务器上运行(这一点和 go 、.net 的特性一致了,还用啥 go )。实测一个没有使用.node 扩展的 300MB+的项目打成二进制才 40MB 出头,tar.gz 后大概在 20MB 。做 docker alpine 镜像也就加多几 MB 。
很多人说运维的问题,但我觉得未来属于 serverless ,而且现在各家 serverless 都支持跑 docker 镜像了。前后端都用 js ,服务部署上云,真的是连运维都不用,服务器维护都免了。我上家一年在公有云消费几千万,资源利用率才 30%多,各种 java 应用在上面跑,都是 io 密集型应用,还有为了高可用应用实例最低都是 2 个节点的,要是能改 serverless 架构一年能省千万级的费用。如果你的应用冷启动都是毫秒级,实际上 0 应用实例就可以做到高可用了,无论是做 saas 还是丢给客户在公有云部署,都是极大的优势。