PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在flash舒适圈里一样不愿意转html5。 觉得php好,是因为laravel框架写的好,加上好用的模板引擎,确实舒适了很久。 但是,现在前后端分离了,laravel模板引擎直接用不上了,优势直接砍掉80%。 然后配合swoole webman(workerman)等多年前的新兴技术,看起来是不错,但是他们还是要以扩展形式安装,本地开发好了后,还得线上配置一套,需要线上线下2次配置环境。 workerman 文档里话里话外都在暗示并建议你安装额外的libevent,虽说不装也行,但是就会受限于php自身的能力。我相信webman那么漂亮的压测数据应该不是纯webman自身的功劳吧,应该是借用了libevent。 swoole至今也没进php默认安装扩展吧,可以理解成,swoole是买了php皮肤的c语言。但是既然选择了swoole为什么不直接选golang呢? 我现在追求的是线上零环境配置,不装依赖,不装运行环境,所以,我不再使用php了。 虽然网友提供了打包php免环境安装的方案,但是,毕竟php是上一个时代的产物,过去的事就让他过去吧,不要在留恋过去了。拥抱一下新时代的好东西。 dart:用dart是因为flutter用dart,所以顺便看了看服务器开发的生态,生态不是没有,只是流行度不太高,所以并不建议用dart写服务器,不过如果是flutter程序员想玩全栈,可以考虑dart写后端。上手速度很快。 node:语法与js 完全一致,我写了6年react了,按理说,我应该首选node,但是,现实中,后端开发,比前端要多不少多线程的场景,也就是worker,也就是cpu密集型的任务,如音乐加密,图片压缩,需要单独把子任务放到一个独立的js文件里,通过postMessage进行通讯,这一点,开发时效率非常低。 而且node本身无法实现协程,worker只不过是处理单独任务时使用,并不能实现真正的协程并发,它的事件循环也不过是单线程的,需要多进程模式,多进程与多线程对多核cpu的利用率完全不一样,而且进程数量一多,就会出现额外管理进程的麻烦,不论你是用pm2还是pm3还是pm100,都是额外的麻烦,这与网友们说的因为与js语法相同而大大提高工作效率的说法背道而驰。 所以,node并不适合当今后端开发,因为现在是多核时代了。放弃node。 cpp:写了2个月单片机esp32,算是自从大学毕业近20年以来又一次把cpp捡起来了,你要说cpp没有服务器开发框架吧,它确实有,但是,不流行啊,不出名,用的人很少。总的来说,cpp写服务器增删改查,还是太粗糙了,过于底层,过于原始。开发效率直接降低到最低。用cpp写curd简直是自找苦吃。 java:可以说,如果没有spring boot,java写服务器业务几乎等于废物,虽然也有其他出名的框架,但是不得不说spring已经是行业标准,写接口就要上spring,但凡你改了一个框架,市场上90%的java开发直接废掉。 但是,spring boot出了名的占内存,我2G内存,给mysql 500M 还有多少能留给spring的呢? 而且,服务器依然要安装java环境,跟php一样麻烦,等服务器过期了换个新服务器,配置环境又是大量时间的消耗。 放弃java golang:这些年他与java的pk不断,想代替java却一直不成功。虽然他能实现免环境安装,但是开发效率真的是太低了,只有for range 与 for,没有语法糖,是大道至简还是大道智减?所以为啥都说go只适合写云原生,写中间件,不适合写业务,原因可能就是因为开发效率不行吧。我用go写了个小项目,确实是太慢了,开发速度都赶不上node。 golang入门确实容易,如果真的学不会更好的rust的话,就用golang吧。 最后说说rust,确实3次入门才成功,但是,现在回过头看,前两次所谓入门不过是看几天文档,写个demo,并没有具体去完成一个小项目,第三次入门是做项目,写了4个月,代码行数达到2万行,此时,惊人的发现,开发效率太高了。 语法与js 80%相似,语法糖更是比js还多,js里map只有遍历的功能,而rust里map还可以实现把一个类型的Option转化成另一个类型的Option。 加上最牛逼的结尾问号,实现全局不写一处match异常捕获也可以轻松定位异常的堆栈信息与异常内容。实在是太省心了。此时不得不看一眼golang。 rust生态确实不像java那样成熟,但是,业务中用到的需求都能找到