原文鏈接:https://medium.com/zerotomastery/want-to-be-a-web-developer-learn-node-js-not-php-dc298154fafd
原作者:Andrei Neagoie
我的學(xué)生叫乌,經(jīng)常問我這么一個問題叉抡,“你怎么在課程中教授Node.js而不是PHP?”告訴人們“相信我,我在這行工作”僅僅是不夠的遵班。所以,這是我在課程中包含Node.js的原因以及為什么如果你想作為開發(fā)人員投資你的未來潮改,你應(yīng)該放棄PHP狭郑。雖然我以這兩個為例,但在本文中汇在,我將向您展示一個框架翰萨,用于決定在開發(fā)人員職業(yè)生涯中應(yīng)該學(xué)習(xí)哪些工具,編程語言糕殉,框架和庫亩鬼。
由于您作為開發(fā)人員的時間和資源有限殖告,您必須決定投入時間以獲得最大的投資回報。
現(xiàn)在雳锋,您應(yīng)該問自己的問題:在知識黄绩,薪水和滿意度方面,我作為開發(fā)人員在未來的職業(yè)生涯中玷过,我可以投入時間和精力來學(xué)習(xí)哪些具有最大凈值爽丹?
這并不意味著選擇最簡單的路徑。這意味著選擇能夠讓您在未來許多年保持相關(guān)性和競爭力的工具冶匹,同時培養(yǎng)您成為高級開發(fā)人員的技能习劫。
在本文的結(jié)論中,如果您想成為使用下面相同分析的Web開發(fā)人員嚼隘,您將在2018年找到我推薦的所有技術(shù)。所以你知道袒餐,如果你不耐煩飞蛹,你可以跳到最后。
我們將在這篇文章中使用兩種類型的分析:工作前景分析和技術(shù)分析灸眼。開始了:
Node.js與PHP - 工作前景分析
我們將使用Stackoverflow開發(fā)人員調(diào)查和LinkedIn進行此分析卧檐。我們也只關(guān)注與Web開發(fā)相關(guān)的技術(shù)。
人氣:
JavaScript連續(xù)第五年成為最常用的編程語言焰宣。Python的使用在五年內(nèi)第一次超越了PHP霉囚。Node.js在哪里?Node.js是一個javascript運行時匕积。在非技術(shù)性說法:Node.js是一種使用Javascript的方式盈罐,就像你可以在服務(wù)器端使用PHP一樣。現(xiàn)在闪唆,將Node.js視為Javascript盅粪。
正如您所看到的,Node.js和Javascript排名靠前悄蕾,而PHP則不那么受歡迎票顾。
在Stackoverflow在開發(fā)者調(diào)查中收集數(shù)據(jù)的五年中,他們已經(jīng)看到Javascript和Node.js等語言越來越流行帆调,而PHP等語言的使用一直在縮械旖尽:
React是開發(fā)人員中最受歡迎的,然而番刊,Node.js是最想學(xué)和第二受歡迎的:
薪金和機會:
使用下面圖表中藍線下方列出的語言的開發(fā)人員含鳞,例如Go,Rust和Clojure撵枢,由于他們擁有多少經(jīng)驗民晒,他們的報酬更高精居。然而,使用像PHP這樣的藍線以下語言的開發(fā)人員潜必,即使有多年的經(jīng)驗靴姿,也會得到較少的報酬。此圖表中圓圈的大小表示與其他開發(fā)人員相比磁滚,使用該語言的開發(fā)人員數(shù)量佛吓。PHP顯著地似乎通過他們擁有的多年經(jīng)驗來越來越少地獎勵開發(fā)人員。
在LinkedIn Jobs上垂攘,您可以看到全球范圍內(nèi)Node.js開發(fā)人員的職位發(fā)布遠遠超過PHP開發(fā)人員近10,000维雇。盡管事實上Node.js是一種比PHP 更年輕的技術(shù),并且事實上PHP與Wordpress一起大量使用晒他,它支持互聯(lián)網(wǎng)上所有網(wǎng)站的30%吱型。
最后,你可以看到各地區(qū)技術(shù)的平均工資(我沒有包括下面的全球標(biāo)簽陨仅,因為PHP甚至沒有在那里制作):
同樣津滞,我們不是在這里抨擊PHP。我們只是查看數(shù)字來決定選擇學(xué)習(xí)什么灼伤。顯然触徐,它的排名始終低于其他技術(shù),如Javascript和Node.js.
所以:
PHP的受歡迎程度正在下降狐赡,而就業(yè)市場和Node.js的普及正在增長撞鹉。總體而言颖侄,PHP開發(fā)人員的報酬顯著低于其他開發(fā)人員鸟雏,而且趨勢似乎在不斷擴大。
Node.js與PHP - 技術(shù)分析
讓我們來看看每種技術(shù)的優(yōu)缺點发皿。
Node.js優(yōu)點:
- 特別適用于需要客戶端和服務(wù)器之間實時通信的應(yīng)用程序崔慧。像socket.io這樣的工具可以很容易地構(gòu)建聊天應(yīng)用程序之類的東西 這些相同的功能使Node.js適用于處理來自IoT設(shè)備(物聯(lián)網(wǎng))和單頁應(yīng)用程序(SPA)的數(shù)據(jù)的應(yīng)用程序,這些數(shù)據(jù)現(xiàn)在非常普遍穴墅。
- 使用JSON進行本機序列化和反序列化惶室,可以很好地處理Web上的AJAX請求。
- 非常適用于具有非阻塞輸入/輸出的事件驅(qū)動應(yīng)用程序(I / O是信息處理系統(tǒng)(如計算機)與外部世界之間的通信玄货,可能是人或其他信息處理系統(tǒng)(如數(shù)據(jù)庫)
- 你學(xué)習(xí)Javascript皇钞,你學(xué)習(xí)Node.js. 您不需要學(xué)習(xí)PHP等其他語言。這意味著你可以花費你所有的努力來學(xué)習(xí)Javascript并掌握它松捉。您只需一種語言就可以編寫前端和后端代碼夹界。
- 許多流行的客戶端框架,如React隘世,Vue和Angular都是用JavaScript編寫的可柿,JavaScript是現(xiàn)代瀏覽器的主要語言鸠踪。在使用Node.js服務(wù)器端時,您可以在應(yīng)用程序開發(fā)堆棧中獲得一種腳本語言的所有好處复斥。在前端和后端使用相同的語言非常適合可維護性:它使所有團隊成員之間的工作更容易為您的應(yīng)用程序营密,因為前端和后端開發(fā)人員使用相同的JavaScript數(shù)據(jù)結(jié)構(gòu),函數(shù)和語言約定目锭。
- 從客戶端一次處理大量請求時评汰,單線程事件驅(qū)動系統(tǒng)非常快痢虹。
- 通過NPM可以為客戶端和服務(wù)器端訪問不斷增長的第三方庫和軟件包被去,以及用于Web開發(fā)的命令行工具。此外奖唯,其中大多數(shù)都托管在GitHub上惨缆,您可以在其中報告問題,或者您可以自己分叉代碼來自定義它丰捷。
- 它已成為運行Javascript相關(guān)工具和其他Web開發(fā)人員相關(guān)工具的標(biāo)準(zhǔn)環(huán)境踪央,包括任務(wù)運行器,minifiers瓢阴,linters,格式化程序健无,預(yù)處理器荣恐,捆綁器和分析處理器。
- 許多新的API和服務(wù)(如AWS Lambda)本機支持累贤。
- 我們獲得了V8的所有性能提升叠穆,這是建立在Node.js之上的Google JavaScript解釋器。由于Google的工程設(shè)計不斷提高V8的性能臼膏,Node.js可以免費獲得此開發(fā)的好處硼被。
Node.js缺點:
- 上面提到的NPM包可能會膨脹您的代碼,可能不安全渗磅,并且很難找到哪些包是好的嚷硫,因為有很多選項(查看下載和GitHub統(tǒng)計是解決此問題的一種方法)。
- 使用Node.js和npm包構(gòu)建服務(wù)器的方法很多始鱼。這使新開發(fā)人員難以接受仔掸。
- 對于依賴于大??量CPU消耗代碼的服務(wù)器(即圖像處理或排序等繁重算法)而言,這并不理想医清。通常起暮,任何非I / O都可以被認(rèn)為是CPU消耗代碼。在這種情況下会烙,通常多線程服務(wù)器環(huán)境比Node.js更好(解決方案:如果需要负懦,可以將代碼的CPU密集部分交給用C編寫的程序)筒捺。
- 節(jié)點不使用底層系統(tǒng)或機器的所有核心。您必須自己編寫邏輯才能使用多核處理器纸厉。這可以通過多種方式實現(xiàn)系吭,但需要一些額外的工作(當(dāng)您能夠最大化系統(tǒng)的CPU使用率時,這將成為專業(yè)人員)残腌。
Node.js小結(jié):
Node.js非常適合具有大量并發(fā)連接的應(yīng)用程序村斟,每個請求只需要很少的CPU周期。這使得它非常適用于當(dāng)前在互聯(lián)網(wǎng)上的許多應(yīng)用抛猫,如SPA和實時應(yīng)用蟆盹。
使用JavaScript的內(nèi)置異步處理,可以創(chuàng)建高度可擴展的服務(wù)器端代碼闺金,最大限度地利用單個CPU和內(nèi)存逾滥,同時能夠處理比傳統(tǒng)多線程服務(wù)器更多的并發(fā)請求。
Node.js帶有很少的依賴關(guān)系败匹,規(guī)則和指南寨昙,允許開發(fā)人員以他們想要的方式自由和創(chuàng)造性地開發(fā)他們的應(yīng)用程序。開發(fā)人員可以為他們的項目選擇最佳架構(gòu)掀亩,設(shè)計模式舔哪,模塊和功能,同時通過NPM從社區(qū)獲得所有好處槽棍。
PHP優(yōu)點:
- 由于年齡的原因捉蚤,強大而龐大的社區(qū)。
- PHP有一個強大的代碼庫炼七,包括用于構(gòu)建網(wǎng)站的流行平臺(即WordPress缆巧,Joomla,Drupal)豌拙。CMS(內(nèi)容管理系統(tǒng))陕悬,如WordPress,可以在幾分鐘內(nèi)輕松部署博客或電子商務(wù)網(wǎng)站按傅,并允許非開發(fā)人員輕松定制它們捉超。
- 使用非開發(fā)人員工具更容易設(shè)置非驮,更適合不需要了解SSH和Linux服務(wù)器的個人或小公司伺通。許多PHP應(yīng)用程序(即cPanel)由基本托管平臺提供,可以一鍵安裝治专。
- 與其他通用編程語言不同推捐,PHP是專門為Web設(shè)計的裂问。PHP提供了一個出色的服務(wù)器端解決方案,因為所有頁面都可以在服務(wù)器上輕松生成和呈現(xiàn),因此無需在瀏覽器中使用JavaScript堪簿。如果您想避免在客戶端運送太多代碼痊乾,這非常有用。Node.js也能夠做到這一點椭更,但解決方案并不那么簡單哪审。
- PHP7和HHVM(由facebook支持)開發(fā)在PHP性能方面有所改進......但最近HHVM出現(xiàn)了一些壞消息。
PHP缺點:
- PHP僅用于后端虑瀑。這意味著如果您想在客戶端工作或被視為完整堆棧開發(fā)人員湿滓,您仍然需要學(xué)習(xí)Javascript。
- 使用PHP舌狗,繁重的服務(wù)器端呈現(xiàn)以及對服務(wù)器生成和呈現(xiàn)頁面的大量請求對單頁應(yīng)用程序來說不是一個好選擇叽奥。
- 每個活動客戶端都會占用一個服務(wù)器進程。不適合擁有許多客戶端連接的應(yīng)用痛侍。
- 與Node.js相比朝氓,對AWS Lambda等新API和服務(wù)的PHP本機支持是有限的。
- 它遵循傳統(tǒng)的客戶端 - 服務(wù)器模型主届,其中每個頁面請求都啟動應(yīng)用程序赵哲,數(shù)據(jù)庫連接和HTML呈現(xiàn)。與使用永久運行并且只需要初始化一次的Node.js應(yīng)用程序相比君丁,這使得PHP在瀏覽網(wǎng)站時變慢枫夺。因此,Node.js更適合網(wǎng)絡(luò)與HTML5绘闷,AJAX和WebSockets一起發(fā)展的新方向筷屡。
PHP小結(jié):
圍繞它的大型社區(qū),PHP更容易學(xué)習(xí)簸喂。對于博客或新聞網(wǎng)站等標(biāo)準(zhǔn)化解決方案而言,它是一個不錯的選擇燎潮。它具有Wordpress的強大功能喻鳄,這是最受歡迎的CMS(內(nèi)容管理系統(tǒng)),它允許您創(chuàng)建可自定義的博客而無需太多編碼确封。但是除呵,在這種情況下更簡單并不是一個好的質(zhì)量。學(xué)習(xí)技術(shù)越容易爪喘,有人進入現(xiàn)場并增加供應(yīng)池就越容易颜曾,而且你需要為服務(wù)收取的費用越低。
結(jié)論
隨著Wordpress的普及秉剑,PHP是Web 1.0時代的頂級語言之一泛豪。Node.js于2009年推出,技術(shù)上不是語言,而是Javascript的運行時環(huán)境诡曙。它是更年輕的Web開發(fā)的冠軍臀叙,更適合構(gòu)建基于事件的,數(shù)據(jù)驅(qū)動的价卤,I / O繁重的應(yīng)用程序劝萤,您在Web 2.0時代會遇到更多。
特別是慎璧,Node.js的異步和基于事件的體系結(jié)構(gòu)使其非常適合實時應(yīng)用程序床嫌,例如消息傳遞和協(xié)作應(yīng)用程序,其中許多請求同時發(fā)生胸私,并且客戶端和服務(wù)器之間有很多來回厌处。沒有Wordpress不能活下去?好吧盖文,Node.js有自己的CMS嘱蛋,叫做Keystone.js很棒。
總會有權(quán)衡五续。永遠不會有一種技術(shù)可以幫助您解決所有問題并使您免于工作過時洒敏。我們所能做的最好的事情就是分析我們的選擇,并選擇一個能獲得最佳投資回報的選項疙驾⌒谆铮看看上面的工作前景分析和技術(shù)分析,我們可以看到一個明顯的贏家它碎。
我選擇了Node.js.
雖然如果按照自己特定的方式使用所有技術(shù)都很棒函荣,但我們生活在一個信息如此豐??富的世界,我們必須限制我們可以關(guān)注和深入學(xué)習(xí)的主題數(shù)量扳肛。
在我的課程中傻挂,我教授今天在該領(lǐng)域的職業(yè)生涯中相關(guān)的方法,以及Facebook挖息,Netflix金拒,谷歌和亞馬遜等一些大公司使用的工具。如果您想在2018年成為一個完整的堆棧Web開發(fā)人員套腹,我建議您學(xué)習(xí):
**HTML5
CSS3
Javascript
React.js
Node.js + Express.js
PostgreSQL **
和其他一些......