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那樣成熟,但是,業務中用到的需求都能找到

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83761.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83761.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83761.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode - 387. 字符串中的第一個唯一字符

題目 387. 字符串中的第一個唯一字符 - 力扣&#xff08;LeetCode&#xff09; 思路 用哈希表統計每個字符出現的次數 創建一個 unordered_map<char, int>&#xff0c;遍歷字符串&#xff0c;把每個字符出現的次數存進去。 再遍歷字符串&#xff0c;找到第一個只出現…

python從環境變量和配置文件中獲取配置參數

前言 從環境變量和配置文件中獲取配置參數&#xff0c;相關庫&#xff1a; python-dotenv&#xff1a;第三方庫&#xff0c;需要使用pip安裝configparser&#xff1a;標準庫 代碼 test.ini [mysql] host "192.168.0.10" port 3306 user "root" pas…

HarmonyOS5 運動健康app(一):健康飲食(附代碼)

一、核心數據模型設計 代碼通過兩個接口構建了飲食管理的基礎數據結構&#xff1a; interface footItem {name: string; // 營養名稱&#xff08;蛋白質/碳水/脂肪&#xff09;weight: number; // 重量&#xff08;克&#xff09; }interface DietItem {name: string; // 食物…

MQ選型及RocketMQ架構總覽

一、什么是MQ MQ&#xff08;MessageQueue&#xff09; Message(消息)&#xff1a;消息是在不同進程之間傳遞的數據&#xff0c;這些進程可以在同一臺機器上&#xff0c;也可以在不同的機器上。 Queue&#xff08;隊列&#xff09;&#xff1a;隊列原意是指一種具有FIFO&#…

python與java的區別

java老程序員來學習python了&#xff0c;記錄一下兩種類型語言的區別&#xff1a; Python與Java變量類型對比 python里面定義變量不需要指定變量的數據類型&#xff0c;并且是可以修改成其他類型java里面定義變量要指定變量的數據類型&#xff0c;指定以后不可以修改成其他數據…

固件簽名技術深度解析:HSM模塊如何守護設備安全,CAS系統如何賦能產業升級

引言&#xff1a;數字時代的固件安全危機 在萬物互聯的今天&#xff0c;全球設備固件安全事件頻發&#xff1a;某汽車品牌因固件漏洞導致百萬車輛被遠程控制&#xff0c;某醫療設備廠商因固件篡改引發數據泄露&#xff0c;某工業控制系統因非法固件升級造成生產線癱瘓……這些…

修改Typora快捷鍵

代碼 的默認快捷鍵為&#xff1a; 這對我來說不太友好&#xff0c;太難按了&#xff0c;而且我電腦右邊的Ctrl鍵壞了&#xff0c;這意味著我只能一個左手去按這3個鍵的組合&#xff0c;這更是難上加難了&#xff0c;于是想到改一下快捷鍵&#xff0c;代碼塊 是Ctrl Shift K&…

Bellman-Ford算法(詳解版)

Bellman-Ford算法 Bellman-Ford算法是用來解決,對于有負權的圖的**單源最短路徑**.因為DJ算法不可以解決對于負權的圖,所以使用這個算法來求解.但是依舊不可以有負回路.因為負回路就沒有存在單源最短路徑這一說. BF的另一個重要的用途就是用來檢測**是不是存在負回路** 思路…

《HarmonyOSNext的ForEach數組渲染の核心玩法與避坑指南》

《HarmonyOSNext教學寶典&#xff1a;ForEach數組渲染全攻略與性能優化》 #HarmonyOS開發 #ArkTS實戰 #組件解析 &#x1f3af; ForEach組件完全指南&#xff1a;數組循環渲染核心機制 舉個栗子&#x1f330;&#xff1a; ForEach相當于智能印刷機&#xff0c;將數組元素自動轉…

單片機 - STM32F407 ADC 模式詳解:單次轉換、連續轉換、掃描模式、非掃描模式

STM32F407 ADC 模式詳解&#xff1a;單次轉換、連續轉換、掃描模式、非掃描模式 前言 在 STM32F407 中&#xff0c;ADC&#xff08;模數轉換器&#xff09;模塊常用于采集模擬信號&#xff0c;比如讀取光敏電阻、電壓、電流、溫度傳感器等。STM32 的 ADC 模式較多&#xff0c…

開源模型應用落地-工具使用篇-從零開始搭建Qdrant Web UI-可視化管理工具-Windows(十)

一、前言 Qdrant 是一個高性能的向量搜索引擎&#xff0c;廣泛應用于相似性搜索、推薦系統和大規模數據檢索等場景。雖然其原生 API 提供了強大的功能&#xff0c;但對于開發者和運維人員來說&#xff0c;缺乏直觀的可視化界面常常增加了使用門檻。為了解決這一問題&#xff0c…

高頻交易技術:訂單簿分析與低延遲架構——從Level 2數據挖掘到FPGA硬件加速的全鏈路解決方案

高頻交易技術&#xff1a;訂單簿分析與低延遲架構——從Level 2數據挖掘到FPGA硬件加速的全鏈路解決方案 一、引言&#xff1a;高頻交易的技術本質 1.1 速度即利潤的微觀戰場 數據揭示&#xff1a;據NYSE實測&#xff0c;每降低1微秒延遲可獲得年化$700-1500萬套利窗口&#…

基于生成對抗網絡(GAN)的圖像生成與編輯:原理、應用與實踐

前言 生成對抗網絡&#xff08;GAN&#xff09;是近年來深度學習領域中最具影響力的技術之一。自2014年由Ian Goodfellow等人首次提出以來&#xff0c;GAN已經在圖像生成、圖像編輯、風格轉換等多個領域取得了令人矚目的成果。GAN的核心思想是通過生成器&#xff08;Generator&…

pytorch基本運算-梯度運算:requires_grad_(True)和backward()

引言 前序學習進程中&#xff0c;已經對pytorch基本運算中的求導進行了基礎討論&#xff0c;相關文章鏈接為&#xff1a; 導數運算pytorch基本運算-導數和f-string-CSDN博客 實際上&#xff0c;求導是微分的進一步計算&#xff0c;要想求導的前一步其實是計算微分&#xff1…

idea64.exe.vmoptions配置

這個idea64.exe.vmoptions文件是用于配置 IntelliJ IDEA&#xff08;64位版本&#xff09;運行時的 Java 虛擬機&#xff08;JVM&#xff09;參數。這些參數直接影響到 IDEA 的性能、內存使用、調試能力和行為。 下面是對文件中每一行配置的詳細解讀&#xff1a; -Xms2048m 作…

齊次變換矩陣相乘的復合變換:左乘與右乘的深度解析

在三維幾何變換中,齊次變換矩陣相乘是實現復雜變換的核心方法。本文將通過一個包含四個變換步驟的完整示例,深入探討齊次變換矩陣左乘和右乘的區別,并結合 Python sympy 庫的代碼實現,詳細闡述變換過程和結果差異。 二維齊次坐標的旋轉變換 在二維齊次坐標系中,一個點可以…

5g LDPC編譯碼-LDPC編碼

目錄 1、LDPC編碼基礎知識 2、5g的LDPC編碼 2.1 LDPC分塊: 2.2 LDCP編碼 2.3 校驗位的產生 1、LDPC編碼基礎知識 LDPC屬于線性分組碼,線性分組碼的基本知識如下: 編碼后的碼字是由初始二進制序列與生成矩陣在二進制域相乘后得到,生成矩陣與校驗矩陣,校驗矩陣與編碼后…

OpenVINO使用教程--resnet分類模型部署

OpenVINO使用教程--resnet分類模型部署 本節內容模型準備推理測試分析&總結本節內容 OpenVINO 根據AI技術類型將部署任務分成傳統模型模型部署和生成式AI模型部署,傳統模型指的是各種CNN小模型,這部分部署只需要OpenVINO包,具體安裝教程可以參考之前的章節:OpenVINO環境…

無字母數字webshell的命令執行

在Web安全領域&#xff0c;WebShell是一種常見的攻擊手段&#xff0c;通過它攻擊者可以遠程執行服務器上的命令&#xff0c;獲取敏感信息或控制系統。而無字母數字WebShell則是其中一種特殊形式&#xff0c;通過避免使用字母和數字字符&#xff0c;來繞過某些安全機制的檢測。 …

C++斯特林數在C++中的數學理論與計算實現1

一、 斯特林數概述 1.1 組合數學中的核心地位 斯特林數&#xff08;Stirling Numbers&#xff09;是組合數學中連接排列、組合與分劃問題的核心工具&#xff0c;分為兩類&#xff1a; 第一類斯特林數&#xff08;Stirling Numbers of the First Kind&#xff09;&#xff1a…