- php與js有哪些區(qū)別 推薦度:
- 相關(guān)推薦
php與js的區(qū)別
php 與 js 你會(huì)選誰(shuí)?這個(gè)問(wèn)題好像問(wèn)得比較奇怪,php通常被認(rèn)為是后端處理的,本站(php是什么意思)做了比較好的介紹:php是一個(gè)基于服務(wù)端來(lái)創(chuàng)建動(dòng)態(tài)網(wǎng)站的腳本語(yǔ)言。而JS通常被認(rèn)為是處理前端的,JS是JavaScript的簡(jiǎn)稱,是一種直譯式腳本語(yǔ)言,是一種動(dòng)態(tài)類型、弱類型、基于原型的語(yǔ)言。
但是Node.js 出來(lái)后,一切變得不一樣了。
Node 公開(kāi)宣稱的目標(biāo)是 “旨在提供一種簡(jiǎn)單的構(gòu)建可伸縮網(wǎng)絡(luò)程序的方法”。
當(dāng)前的服務(wù)器程序有什么問(wèn)題?我們來(lái)做個(gè)數(shù)學(xué)題。在 Java? 和 PHP 這類語(yǔ)言中,每個(gè)連接都會(huì)生成一個(gè)新線程,每個(gè)新線程可能需要 2 MB 的配套內(nèi)存。在一個(gè)擁有 8 GB RAM 的系統(tǒng)上,理論上最大的并發(fā)連接數(shù)量是 4,000 個(gè)用戶。隨著您的客戶群的增長(zhǎng),如果希望您的 Web 應(yīng)用程序支持更多用戶,那么,您必須添加更多服務(wù)器。當(dāng)然,這會(huì)增加服務(wù)器成本、流量成本和人工成本等成本。除這些成本上升外,還有一個(gè)潛在技術(shù)問(wèn)題,即用戶可能針對(duì)每個(gè)請(qǐng)求使用不同的服務(wù)器,因此,任何共享資源都必須在所有服務(wù)器之間共享。鑒于上述所有原因,整個(gè) Web 應(yīng)用程序架構(gòu)(包括流量、處理器速度和內(nèi)存速度)中的瓶頸是:服務(wù)器能夠處理的并發(fā)連接的最大數(shù)量。
Node 解決這個(gè)問(wèn)題的方法是:更改連接到服務(wù)器的方式。每個(gè)連接發(fā)射一個(gè)在 Node 引擎的進(jìn)程中運(yùn)行的事件,而不是為每個(gè)連接生成一個(gè)新的 OS 線程(并為其分配一些配套內(nèi)存)。Node 聲稱它絕不會(huì)死鎖,因?yàn)樗静辉试S使用鎖,它不會(huì)直接阻塞 I/O 調(diào)用。Node 還宣稱,運(yùn)行它的服務(wù)器能支持?jǐn)?shù)萬(wàn)個(gè)并發(fā)連接。
現(xiàn)在您有了一個(gè)能處理數(shù)萬(wàn)個(gè)并發(fā)連接的程序,那么您能通過(guò) Node 實(shí)際構(gòu)建什么呢?如果您有一個(gè) Web 應(yīng)用程序需要處理這么多連接,那將是一件很 “恐怖” 的事!那是一種 “如果您有這個(gè)問(wèn)題,那么它根本不是問(wèn)題” 的問(wèn)題。在回答上面的問(wèn)題之前,我們先看看 Node 的工作原理以及它的設(shè)計(jì)運(yùn)行方式。
SitePoint 的 PHP vs Node.js Smackdown 一文中,Craig Buckler 對(duì)兩種語(yǔ)言就如何應(yīng)對(duì)一系列的10個(gè)挑戰(zhàn)進(jìn)行了比較來(lái)決定哪一個(gè)總體上更佳。
Craig 在書中講到,這些比較總是有些矛盾。作為一個(gè)有意思的隨訪,我們要求 Bruno ?kvorc (SitePoint 的 PHP 開(kāi)發(fā)者)和 James Hibbard (SitePoint 的一個(gè) JavaScript 開(kāi)發(fā)者)對(duì)每一輪提供評(píng)論。
下面是他們?cè)敿?xì)的看法...
第一輪:開(kāi)始
Round 1 挑戰(zhàn)是看你用每種語(yǔ)言多快可以構(gòu)建一個(gè)“Hello World”的頁(yè)面。這個(gè)包括搭建服務(wù)器環(huán)境所花的時(shí)間。
據(jù) Craig 估計(jì),PHP 贏得這一輪,部分原因是因?yàn)檫@種語(yǔ)言“概念上更簡(jiǎn)單”,并且“對(duì)于新的開(kāi)發(fā)者來(lái)說(shuō)不那么嚇人”。
Bruno:
PHP 贏得"開(kāi)始"這一輪純粹是因?yàn)楦嗟闹鳈C(jī)支持這種語(yǔ)言因此開(kāi)始非常簡(jiǎn)單。這是拿來(lái)就好用了而不需要做額外的事情。如果更多的主機(jī)忽略使用 Node 命令行而直接采用文件上傳的方式,并且在控制面板上用一個(gè)簡(jiǎn)單的 "reload app" 鍵,那么兩者將會(huì)一樣。然而就在屏幕上顯示東西的實(shí)際語(yǔ)法而言,PHP 是更簡(jiǎn)單些——特別是對(duì)那些沒(méi)有編程經(jīng)驗(yàn)的人而言。
James:
當(dāng)在本地機(jī)器上開(kāi)發(fā)的時(shí)候,我沒(méi)有在兩者之間看到很大的不同。在你的瀏覽器上運(yùn)行 PHP 腳本,你需要安裝一些服務(wù)器軟件;要運(yùn)行 Node 腳本,你需要安裝 Node, 并且最好安裝一個(gè) web 框架比如express. 然而,正如 Craig 說(shuō)的, PHP“概念上更簡(jiǎn)單”.Node 的進(jìn)入門檻更高。對(duì)此沒(méi)有爭(zhēng)議。
第二輪: 幫助和支持
第二輪會(huì)考量在兩種語(yǔ)言中,獲得幫助和支持的難易程度。PHP贏得了這一輪,主要因?yàn)樗霈F(xiàn)的更久一些。
Bruno:
關(guān)于這個(gè)保持沉默。
James:
我同意這個(gè)說(shuō)法。Node是一門新技術(shù),所以目前,幫助會(huì)少一些?墒钱(dāng)Node越來(lái)越成熟的時(shí)候,這方面就不是問(wèn)題了.
第三輪: 語(yǔ)法
第三輪比較了理解兩種語(yǔ)言語(yǔ)法的難易程度。Craig判定這一輪Node獲勝。
Bruno:
我非常不同意這個(gè)觀點(diǎn)。PHP的語(yǔ)法中的確有一些怪象,其中的很多已經(jīng)被修復(fù)了,在新的版本中,還有很多要被移除。另一方面,JS中也有“this”這個(gè)問(wèn)題~
關(guān)于bullet 3 (開(kāi)發(fā)的時(shí)候,使用js你不需要在client端開(kāi)發(fā)和Server端開(kāi)發(fā)的時(shí)候做切換),我不同意這個(gè)觀念。服務(wù)器環(huán)境和客戶端的開(kāi)發(fā)環(huán)境已經(jīng)完全不通了,大腦中的切換還是需要的?偸怯行┬碌恼Z(yǔ)法你不能再瀏覽器中使用,反之亦然,所以這某種程度上也是語(yǔ)言的切換。
Bullet 4 (理解 JS 會(huì)讓你更希望使用它) 這從某種程度上來(lái)說(shuō)我是贊同的。 我在工作中使用 JS 和 PHP多年,使用 JS 的時(shí)間更久,但我對(duì)它卻喜歡甚少——盡管那純粹是個(gè)人傾向。
James:
我愛(ài) JavaScript。我知道它有它的怪癖,并且我知道一些原因,ECMAScript 2015 將會(huì)修改掉一些,并給語(yǔ)言帶來(lái)一部分令人激動(dòng)的新特性。JavaScript 是強(qiáng)有力和靈活的,并能適應(yīng)很多不同風(fēng)格的編程。與 PHP 對(duì)照,我享受使用 JavaScript。Node(Node.js)就是其中之一。
第四輪:開(kāi)發(fā)工具
Round 4:考慮這兩種技術(shù)所使用的開(kāi)發(fā)工具,Node 因?yàn)橛虚_(kāi)發(fā)工具 npm,所以略勝一籌。
Bruno:
雖然,開(kāi)發(fā)者最初受到 npm 的鼓舞,但是現(xiàn)在有 leaps 和 bounds 比 npm 用著更舒服,而且如果你在電腦上安裝了同一個(gè)庫(kù)的兩個(gè)版本的話,leaps 和 bounds 不會(huì)讓你的系統(tǒng)崩潰。而且相對(duì)于 npm 而言,leaps 和 bounds 允許設(shè)計(jì)者使用遞歸思想,而遞歸思想是如此的重要,以至于當(dāng)開(kāi)發(fā)者準(zhǔn)備著手建立一個(gè)包管理器時(shí),首先考慮的就是這一點(diǎn)。
npm 還有一個(gè)致命的缺點(diǎn),我把它稱為“開(kāi)發(fā)者協(xié)作友好”,npm 不能很好地做到這點(diǎn),對(duì)于 npm 而言只有開(kāi)發(fā)者本身能夠理解自己寫的東西。最后,npm 與 Vagrant 不能很好地兼容,這直接的妨礙了您開(kāi)始自己工作,就更別說(shuō) npm 不關(guān)注用戶們的需求了。npm 有一個(gè) bug 已經(jīng)存在了很多年,它導(dǎo)致該軟件在 windows 上基本不能使用,這可不算是小問(wèn)題了。當(dāng)然 PHP 也有很多愚蠢的錯(cuò)誤,但是這些錯(cuò)誤并不會(huì)與你的系統(tǒng)之間發(fā)生問(wèn)題。
的確,PHP并沒(méi)有自帶編譯器,但我不認(rèn)為它應(yīng)該這樣做。這樣的便利不應(yīng)該由一個(gè)包管理器或者說(shuō)是一個(gè)獨(dú)立的應(yīng)用來(lái)完成。如果將來(lái)有一天,有人為 Node 開(kāi)發(fā)了一個(gè)很好的包管理器,把它與現(xiàn)有的編譯器替換將會(huì)極其困難。讓它相對(duì)獨(dú)立,人們可以便于切換。此外,安裝它僅需要在終端上輸入一行代碼,或者下載一 個(gè)安裝程序。
書中提到的編譯器影響很小的說(shuō)法,是顯而易見(jiàn)的錯(cuò)誤。自從PHP開(kāi)發(fā)完成后,編譯器就影響了每一位新加入進(jìn)來(lái)的 PHP 開(kāi)發(fā)者,他們中的一些佼佼者不得不將它添加到現(xiàn)有的流程中。只基于編譯器存在之前就有很多 PHP 用戶的理由,并不能說(shuō)明它的作用較小。事實(shí)上,自從有了它,它就產(chǎn)生了巨大的影響。一些人所說(shuō)的“對(duì)社區(qū)造成的影響很少“的言論根本沒(méi)有事實(shí)依據(jù)。
現(xiàn)在,我不能在大多數(shù) PHP 開(kāi)發(fā)者都希望安裝 Node 這個(gè)問(wèn)題上爭(zhēng)論,這是真的事實(shí)。可悲的是,很多好的工具都首先基于 Node 下開(kāi)發(fā),但我仍然希望就像 Node-free 開(kāi)發(fā)環(huán)境一樣,也可用于開(kāi)發(fā)BowerPHP。
James:
我很高興有人加入Node。
我喜歡 npm。 它易于安裝,易于使用,并有數(shù)以千計(jì)的包可用于幾乎任何需要。我也喜歡這樣的事實(shí),npm 可以選擇全球的和本地的程序包(相比之下,一些語(yǔ)言如Ruby,它的標(biāo)準(zhǔn)需要將你的程序包安裝在你的 Ruby 版本的旁邊)。它的工具也很棒。一些工具,例如 Bower 和 Grunt,在我工作流中都有一個(gè)固定的位置,它們成倍地提升了我的工作效率。
另外值得一提的是,npm 已經(jīng)開(kāi)發(fā)出了第3版的 β 版。它解決了 Bruno 提到很多問(wèn)題,例如嵌套node_modules 方法錯(cuò)誤等。
下文引用自entire smackdown:
PHP開(kāi)發(fā)人員可能希望(或需要)在某些場(chǎng)合安裝Node.js。反過(guò)來(lái)不是真的。
第五輪: 環(huán)境
第5輪要說(shuō)的是技術(shù)的可用性和部署情況,以及被哪些平臺(tái)和生態(tài)系統(tǒng)支持。Craig 對(duì)于這一點(diǎn)也不十分明確,但是看起來(lái)似乎更偏向于 Node。
Bruno:
Craig 說(shuō)他曾比較 PHP 和 Node 在 web 方面的優(yōu)勢(shì)(常見(jiàn)的 web 開(kāi)發(fā)問(wèn)題),然后說(shuō)到處都用到了 JS。首先,我們來(lái)比較 Node.js,而不是 JS 本身,其次,我們比較了兩種語(yǔ)言在什么環(huán)境下可以運(yùn)行。猴子比魚要厲害,因?yàn)轸~太蠢了不能爬樹(shù),但是猴子和魚都會(huì)游泳。那么我們來(lái)比較它們做得怎么樣吧。
在 web 開(kāi)發(fā)環(huán)境中,PHP 獲勝了。這里是一些基于 PHP 的桌面程序工具——是的,也許你不會(huì)使用它們,但你一定會(huì)用這些基于 PHP 的命令行程序。
James:
我和 Craig 又一次達(dá)成一致。一些特性讓 Node.js 變得如此流行(速度,可擴(kuò)展性,與 JSON 密切相連,低資源占用)使它適合于許多其他類型的應(yīng)用程序,例如強(qiáng)有力的物聯(lián)網(wǎng)設(shè)備。我覺(jué)得,誰(shuí)會(huì)不喜歡機(jī)器人呢?
Node 使得項(xiàng)目獲得了提升,諸如NW.js(一個(gè)基于 Chromium 和 Node.js 的應(yīng)用),它允許你在 HTML 和 JavaScript 上編寫本地 APP。這多令人興奮!
【php與js的區(qū)別】相關(guān)文章:
php與js有哪些區(qū)別12-27
php怎么引入js03-29
java和js的區(qū)別08-05
PHP+Ajax+lottery.js抽獎(jiǎng)02-25
HTML中利用js調(diào)用php的內(nèi)容01-17
java與php的區(qū)別06-05
asp與php的區(qū)別01-26
PHP與.NET的區(qū)別05-16