一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

php語(yǔ)言

php 與 js 我們如何選擇呢

時(shí)間:2025-02-02 11:25:32 php語(yǔ)言 我要投稿
  • 相關(guān)推薦

php 與 js 我們如何選擇呢

  php通常被認為是后端處理的,JS通常被認為是處理前端的,但是Node.js 出來(lái)后,一切變得不一樣了,我們該如何作出選擇呢?下面小編帶大家學(xué)習一下。

  php 與 js 你會(huì )選誰(shuí)?這個(gè)問(wèn)題好像問(wèn)得比較奇怪,php通常被認為是后端處理的,本站(php是什么意思)做了比較好的介紹:php是一個(gè)基于服務(wù)端來(lái)創(chuàng )建動(dòng)態(tài)網(wǎng)站的腳本語(yǔ)言。而JS通常被認為是處理前端的,JS是JavaScript的簡(jiǎn)稱(chēng),是一種直譯式腳本語(yǔ)言,是一種動(dòng)態(tài)類(lèi)型、弱類(lèi)型、基于原型的語(yǔ)言。

  但是Node.js 出來(lái)后,一切變得不一樣了。

  Node 公開(kāi)宣稱(chēng)的目標是 “旨在提供一種簡(jiǎn)單的構建可伸縮網(wǎng)絡(luò )程序的方法”。

  當前的服務(wù)器程序有什么問(wèn)題?我們來(lái)做個(gè)數學(xué)題。在 Java? 和 PHP 這類(lèi)語(yǔ)言中,每個(gè)連接都會(huì )生成一個(gè)新線(xiàn)程,每個(gè)新線(xiàn)程可能需要 2 MB 的配套內存。在一個(gè)擁有 8 GB RAM 的系統上,理論上最大的并發(fā)連接數量是 4,000 個(gè)用戶(hù)。隨著(zhù)您的客戶(hù)群的增長(cháng),如果希望您的 Web 應用程序支持更多用戶(hù),那么,您必須添加更多服務(wù)器。當然,這會(huì )增加服務(wù)器成本、流量成本和人工成本等成本。除這些成本上升外,還有一個(gè)潛在技術(shù)問(wèn)題,即用戶(hù)可能針對每個(gè)請求使用不同的服務(wù)器,因此,任何共享資源都必須在所有服務(wù)器之間共享。鑒于上述所有原因,整個(gè) Web 應用程序架構(包括流量、處理器速度和內存速度)中的瓶頸是:服務(wù)器能夠處理的并發(fā)連接的最大數量。

  Node 解決這個(gè)問(wèn)題的方法是:更改連接到服務(wù)器的方式。每個(gè)連接發(fā)射一個(gè)在 Node 引擎的進(jìn)程中運行的事件,而不是為每個(gè)連接生成一個(gè)新的 OS 線(xiàn)程(并為其分配一些配套內存)。Node 聲稱(chēng)它絕不會(huì )死鎖,因為它根本不允許使用鎖,它不會(huì )直接阻塞 I/O 調用。Node 還宣稱(chēng),運行它的服務(wù)器能支持數萬(wàn)個(gè)并發(fā)連接。

  現在您有了一個(gè)能處理數萬(wàn)個(gè)并發(fā)連接的程序,那么您能通過(guò) Node 實(shí)際構建什么呢?如果您有一個(gè) Web 應用程序需要處理這么多連接,那將是一件很 “恐怖” 的事!那是一種 “如果您有這個(gè)問(wèn)題,那么它根本不是問(wèn)題” 的問(wèn)題。在回答上面的問(wèn)題之前,我們先看看 Node 的工作原理以及它的設計運行方式。

  SitePoint 的 PHP vs Node.js Smackdown 一文中,Craig Buckler 對兩種語(yǔ)言就如何應對一系列的10個(gè)挑戰進(jìn)行了比較來(lái)決定哪一個(gè)總體上更佳。

  Craig 在書(shū)中講到,這些比較總是有些矛盾。作為一個(gè)有意思的隨訪(fǎng),我們要求 Bruno ?kvorc (SitePoint 的 PHP 開(kāi)發(fā)者)和 James Hibbard (SitePoint 的一個(gè) JavaScript 開(kāi)發(fā)者)對每一輪提供評論。

  下面是他們詳細的看法...

  第一輪:開(kāi)始

  Round 1 挑戰是看你用每種語(yǔ)言多快可以構建一個(gè)“Hello World”的頁(yè)面。這個(gè)包括搭建服務(wù)器環(huán)境所花的時(shí)間。

  據 Craig 估計,PHP 贏(yíng)得這一輪,部分原因是因為這種語(yǔ)言“概念上更簡(jiǎn)單”,并且“對于新的開(kāi)發(fā)者來(lái)說(shuō)不那么嚇人”。

  Bruno:

  PHP 贏(yíng)得"開(kāi)始"這一輪純粹是因為更多的主機支持這種語(yǔ)言因此開(kāi)始非常簡(jiǎn)單。這是拿來(lái)就好用了而不需要做額外的事情。如果更多的主機忽略使用 Node 命令行而直接采用文件上傳的方式,并且在控制面板上用一個(gè)簡(jiǎn)單的 "reload app" 鍵,那么兩者將會(huì )一樣。然而就在屏幕上顯示東西的實(shí)際語(yǔ)法而言,PHP 是更簡(jiǎn)單些——特別是對那些沒(méi)有編程經(jīng)驗的人而言。

  James:

  當在本地機器上開(kāi)發(fā)的時(shí)候,我沒(méi)有在兩者之間看到很大的不同。在你的瀏覽器上運行 PHP 腳本,你需要安裝一些服務(wù)器軟件;要運行 Node 腳本,你需要安裝 Node, 并且最好安裝一個(gè) web 框架比如express. 然而,正如 Craig 說(shuō)的, PHP“概念上更簡(jiǎn)單”.Node 的進(jìn)入門(mén)檻更高。對此沒(méi)有爭議。

  第二輪: 幫助和支持

  第二輪會(huì )考量在兩種語(yǔ)言中,獲得幫助和支持的難易程度。PHP贏(yíng)得了這一輪,主要因為它出現的更久一些。

  Bruno:

  關(guān)于這個(gè)保持沉默。

  James:

  我同意這個(gè)說(shuō)法。Node是一門(mén)新技術(shù),所以目前,幫助會(huì )少一些?墒钱擭ode越來(lái)越成熟的時(shí)候,這方面就不是問(wèn)題了.

  第三輪: 語(yǔ)法

  第三輪比較了理解兩種語(yǔ)言語(yǔ)法的難易程度。Craig判定這一輪Node獲勝。

  Bruno:

  我非常不同意這個(gè)觀(guān)點(diǎn)。PHP的語(yǔ)法中的確有一些怪象,其中的很多已經(jīng)被修復了,在新的版本中,還有很多要被移除。另一方面,JS中也有“this”這個(gè)問(wèn)題~

  關(guān)于bullet 3 (開(kāi)發(fā)的時(shí)候,使用js你不需要在client端開(kāi)發(fā)和Server端開(kāi)發(fā)的時(shí)候做切換),我不同意這個(gè)觀(guān)念。服務(wù)器環(huán)境和客戶(hù)端的開(kāi)發(fā)環(huán)境已經(jīng)完全不通了,大腦中的切換還是需要的?偸怯行┬碌恼Z(yǔ)法你不能再瀏覽器中使用,反之亦然,所以這某種程度上也是語(yǔ)言的切換。

  Bullet 4 (理解 JS 會(huì )讓你更希望使用它)  這從某種程度上來(lái)說(shuō)我是贊同的。 我在工作中使用 JS 和 PHP多年,使用 JS 的時(shí)間更久,但我對它卻喜歡甚少——盡管那純粹是個(gè)人傾向。

  James:

  我愛(ài) JavaScript。我知道它有它的怪癖,并且我知道一些原因,ECMAScript 2015 將會(huì )修改掉一些,并給語(yǔ)言帶來(lái)一部分令人激動(dòng)的新特性。JavaScript 是強有力和靈活的,并能適應很多不同風(fēng)格的編程。與 PHP 對照,我享受使用 JavaScript。Node(Node.js)就是其中之一。

  第四輪:開(kāi)發(fā)工具

  Round 4:考慮這兩種技術(shù)所使用的開(kāi)發(fā)工具,Node 因為有開(kāi)發(fā)工具 npm,所以略勝一籌。

  Bruno:

  雖然,開(kāi)發(fā)者最初受到 npm 的鼓舞,但是現在有 leaps 和 bounds 比 npm 用著(zhù)更舒服,而且如果你在電腦上安裝了同一個(gè)庫的兩個(gè)版本的話(huà),leaps 和 bounds 不會(huì )讓你的系統崩潰。而且相對于 npm 而言,leaps 和 bounds 允許設計者使用遞歸思想,而遞歸思想是如此的重要,以至于當開(kāi)發(fā)者準備著(zhù)手建立一個(gè)包管理器時(shí),首先考慮的就是這一點(diǎn)。

  npm 還有一個(gè)致命的缺點(diǎn),我把它稱(chēng)為“開(kāi)發(fā)者協(xié)作友好”,npm 不能很好地做到這點(diǎn),對于 npm 而言只有開(kāi)發(fā)者本身能夠理解自己寫(xiě)的東西。最后,npm 與 Vagrant 不能很好地兼容,這直接的妨礙了您開(kāi)始自己工作,就更別說(shuō) npm 不關(guān)注用戶(hù)們的需求了。npm 有一個(gè) bug 已經(jīng)存在了很多年,它導致該軟件在 windows 上基本不能使用,這可不算是小問(wèn)題了。當然 PHP 也有很多愚蠢的錯誤,但是這些錯誤并不會(huì )與你的系統之間發(fā)生問(wèn)題。

  的確,PHP并沒(méi)有自帶編譯器,但我不認為它應該這樣做。這樣的便利不應該由一個(gè)包管理器或者說(shuō)是一個(gè)獨立的應用來(lái)完成。如果將來(lái)有一天,有人為 Node 開(kāi)發(fā)了一個(gè)很好的包管理器,把它與現有的編譯器替換將會(huì )極其困難。讓它相對獨立,人們可以便于切換。此外,安裝它僅需要在終端上輸入一行代碼,或者下載一 個(gè)安裝程序。

  書(shū)中提到的編譯器影響很小的說(shuō)法,是顯而易見(jiàn)的錯誤。自從PHP開(kāi)發(fā)完成后,編譯器就影響了每一位新加入進(jìn)來(lái)的 PHP 開(kāi)發(fā)者,他們中的一些佼佼者不得不將它添加到現有的流程中。只基于編譯器存在之前就有很多 PHP 用戶(hù)的理由,并不能說(shuō)明它的作用較小。事實(shí)上,自從有了它,它就產(chǎn)生了巨大的影響。一些人所說(shuō)的“對社區造成的影響很少“的言論根本沒(méi)有事實(shí)依據。

  現在,我不能在大多數 PHP 開(kāi)發(fā)者都希望安裝 Node 這個(gè)問(wèn)題上爭論,這是真的事實(shí)?杀氖,很多好的工具都首先基于 Node 下開(kāi)發(fā),但我仍然希望就像 Node-free 開(kāi)發(fā)環(huán)境一樣,也可用于開(kāi)發(fā)BowerPHP。

  James:

  我很高興有人加入Node。

  我喜歡 npm。 它易于安裝,易于使用,并有數以千計的包可用于幾乎任何需要。我也喜歡這樣的事實(shí),npm 可以選擇全球的和本地的程序包(相比之下,一些語(yǔ)言如Ruby,它的標準需要將你的程序包安裝在你的 Ruby 版本的旁邊)。它的工具也很棒。一些工具,例如 Bower 和 Grunt,在我工作流中都有一個(gè)固定的位置,它們成倍地提升了我的工作效率。

  另外值得一提的是,npm 已經(jīng)開(kāi)發(fā)出了第3版的 β 版。它解決了 Bruno 提到很多問(wèn)題,例如嵌套node_modules 方法錯誤等。

  PHP開(kāi)發(fā)人員可能希望(或需要)在某些場(chǎng)合安裝Node.js。反過(guò)來(lái)不是真的。

  第五輪: 環(huán)境

  第5輪要說(shuō)的是技術(shù)的可用性和部署情況,以及被哪些平臺和生態(tài)系統支持。Craig 對于這一點(diǎn)也不十分明確,但是看起來(lái)似乎更偏向于 Node。

  Bruno:

  Craig 說(shuō)他曾比較 PHP 和 Node 在 web 方面的優(yōu)勢(常見(jiàn)的 web 開(kāi)發(fā)問(wèn)題),然后說(shuō)到處都用到了 JS。首先,我們來(lái)比較 Node.js,而不是 JS 本身,其次,我們比較了兩種語(yǔ)言在什么環(huán)境下可以運行。猴子比魚(yú)要厲害,因為魚(yú)太蠢了不能爬樹(shù),但是猴子和魚(yú)都會(huì )游泳。那么我們來(lái)比較它們做得怎么樣吧。

  在 web 開(kāi)發(fā)環(huán)境中,PHP 獲勝了。這里是一些基于 PHP 的桌面程序工具——是的,也許你不會(huì )使用它們,但你一定會(huì )用這些基于 PHP 的命令行程序。

  James:

  我和 Craig 又一次達成一致。一些特性讓 Node.js 變得如此流行(速度,可擴展性,與 JSON 密切相連,低資源占用)使它適合于許多其他類(lèi)型的應用程序,例如強有力的物聯(lián)網(wǎng)設備。我覺(jué)得,誰(shuí)會(huì )不喜歡機器人呢?

  Node 使得項目獲得了提升,諸如NW.js(一個(gè)基于 Chromium 和 Node.js 的應用),它允許你在 HTML 和 JavaScript 上編寫(xiě)本地 APP。這多令人興奮!

  第六輪: 整合

  第 6 輪我們來(lái)看一下數據庫和驅動(dòng)的整合方面,PHP 勝出主要是因為它的年齡比較大。

  Bruno:

  整合方面其實(shí)是平局的,PHP 有年齡的優(yōu)勢,可以有更多可選項,但是也意味著(zhù)要照顧很多過(guò)時(shí)技術(shù),如 mysql 擴展 —— 我們可以升級到 PHP7 來(lái)擺脫,但多年來(lái)一直不可用。

  James:

  我當然同意這個(gè)觀(guān)點(diǎn),這雖然看起來(lái)模糊其詞,而且我很喜歡這個(gè)例子:“過(guò)時(shí)的,更受歡迎的技術(shù)”。這也很好突了 Node一個(gè)很大的優(yōu)點(diǎn) —— 它原生支持 JSON。JSON 或許是 web 中最重要的數據傳輸格式了,同時(shí)也是最新的 NoSQL 數據庫的通用結構。JavaScript 程序中使用 JSON 是非常容易的,意味著(zhù)當你使用 Node 工作時(shí),數據可以非常簡(jiǎn)潔地進(jìn)行傳輸,不用進(jìn)行格式轉換了。你可以只使用一種語(yǔ)法(JSON 格式)傳遞在瀏覽器、服務(wù)器和數據庫之間。

  第七輪:主機和部署

  第七輪會(huì )看看將新應用部署到 Web 服務(wù)器是否容易,在 Craig 看來(lái),PHP 在這方面明顯是贏(yíng)家

  Bruno:

  Bruno 再一次保持沉默。

  James:

  這是 Node 需要努力改善的區域。每個(gè)提供 Web 主機的公司,都提供了 PHP 和  MySQL。你想看到輸出,只需要建立一個(gè)以“.php”為擴展名的文件,在<?和?>間寫(xiě)一些有效的代碼,上傳,用瀏覽器訪(fǎng)問(wèn)。但同樣的方 法不適用于Node。當然,Node 主機有很多選項,但是它們需要更多的設置和命令行方式的訪(fǎng)問(wèn),這對于初學(xué)者來(lái)說(shuō)可不愉快。毫無(wú)疑問(wèn),PHP 在這一輪贏(yíng)了對手。

  第八輪: 性能

  第八輪 主要關(guān)注速度。雖然這項經(jīng)常依賴(lài)于經(jīng)驗以及開(kāi)發(fā)團隊到底多上心,Craig 注意到 Node 在一些方面的優(yōu)勢。

  Bruno:

  錯誤比比皆是。首先,這篇文章 有關(guān)于性能的詳細討論, 其中排除了開(kāi)發(fā)者經(jīng)驗以及應用類(lèi)型對性能的影響。如果那篇文章依然無(wú)法讓你明白拋開(kāi)上下文談性能有多愚昧,那來(lái)我來(lái)談?wù)勎业挠^(guān)點(diǎn):

  PHP 正在嵌入一個(gè)多線(xiàn)程服務(wù)器。這使得完全繞過(guò)外部服務(wù)器成為可能,但暫時(shí)還不推薦使用。另外也有一些超快速的的服務(wù)器(像 Nginx),他們使得整個(gè)啟動(dòng) PHP、派發(fā)請求的過(guò)程快到可以忽略。

  PHP 的原生異步 (無(wú)阻塞 I/O)支持將在 PHP7 中推出,而且多年前 ReactPHP 就實(shí)現了類(lèi)似的模式,因此這一點(diǎn)也毫無(wú)意義。

  PHP single-request 的生命周期模式是最大的負擔。確實(shí),如果你單純的追求速度,但是這條依然可以很容易繞開(kāi),不止可以通過(guò) Memcached 和 Craig 說(shuō)的類(lèi)似的方法, 而是通過(guò)類(lèi)似;Ajax 的方法。順便說(shuō)一下——服務(wù)端 JS 應用默認也是 single-request的。另外——這種 single-request 的生命周期也是一種優(yōu)勢,每次請求重新構建應用,避免了很多內存問(wèn)題,清空垃圾內存,保持苗條干凈。你上次使用一個(gè)穩定的長(cháng)時(shí)間運行的的無(wú)內存泄露的 Javascript 應用是什么時(shí)候,不論前端或后端?

  關(guān)于性能的討論現在是,而且以后也將是——平局(除非你用的是 Java,那 Java 一定輸)

  James:

  Node 以高性能低延遲的運行時(shí)環(huán)境而聞名,而且它也找到了屬于自己的方式來(lái)嵌入部分500強公司的代碼棧。由于它的無(wú)阻塞 I/O 機制以及 Google Chrome V8 引擎技術(shù),現在 Node 已經(jīng)成為了“快速”以及“可擴展的”的同義詞。 現在網(wǎng)上有很多故事,像Node 如何讓公司獲取更好的性能提升 以及給開(kāi)發(fā)者提供更高的生產(chǎn)力。我很高興,這回合 node 勝,但我也理解有人質(zhì)疑這點(diǎn)。

  第九輪: 程序員情結

  第九輪來(lái)看一看 Craig 覺(jué)得一般程序員們對于 PHP 和 Node 有多少感情,最后他認為,Node 獲勝了。

  Bruno:

  你肯定看錯地方了,Craig,PHP 社區令人難以自信地熱情和活躍,每年有超過(guò) 20 個(gè)大會(huì )和非常精彩的主題討論。正是這樣才完成了 HHVM 的 PHP7。

  另外,我想說(shuō)的是我很好奇 Node 的開(kāi)發(fā)者們在使用哪個(gè)版本來(lái)工作(v0.12.5 已經(jīng)開(kāi)始在寫(xiě)了),即使經(jīng)過(guò)了 6 年的必展。這是不成熟的和危險的(天啊,你使用一個(gè)不穩定的技術(shù),你在故意讓你的企業(yè)掛掉嗎),加上一點(diǎn),它忽略了一些操作系統中的舊 bug,將導致一些重要的開(kāi)發(fā)人員從這個(gè)語(yǔ)言的生態(tài)系統中離開(kāi)。

  一些負面的經(jīng)歷讓我不喜歡 Node,主要是因為 npm。未來(lái)或許會(huì )改變,但現在每次使用 Node 都覺(jué)得恐懼和失望。我們都有自己的喜好,但保持客觀(guān),選擇正確的工具來(lái)工作是很重要的。但同樣重要的是要允許別人試錯,因為人人都是馬后炮。所以不要聽(tīng) Craig 的,不要聽(tīng) Jim 的,也不要聽(tīng)我的。大膽去試,看看什么可以用,找些讓你感覺(jué)不錯的來(lái)使用,最終,那些讓你感覺(jué)富有成效的就是最好的,而不是哪些只能節省一些加載時(shí)間的。

  James:

  Node 很火,在 Node 的領(lǐng)域有很多創(chuàng )新,盡管激情是不客觀(guān)的,但很高興 Node 贏(yíng)得了這一局。

  第十輪:未來(lái)

  第十輪著(zhù)眼于兩種語(yǔ)言的前景,基于兩種語(yǔ)言在現階段看起來(lái)都有一個(gè)前程強勁的未來(lái),Craig 斷定這一輪的結果是平局。

  Bruno:

  Bruno 不得不趕快去寫(xiě)多寫(xiě)一些關(guān)于 PHP 的文章,還要維護那讓人驚嘆的 SitePoint PHP 頻道。

  James:

  James 也等不及要回到他摯愛(ài)的 JavaScript 頻道,但是他留下了這些觀(guān)點(diǎn):

  平局對于這一輪來(lái)說(shuō)是公平的。Node 是一顆崛起的明星,但是如果想撼動(dòng) PHP 的寶座,他還需要付出巨大的努力。

  總的來(lái)說(shuō),如果錘子是你唯一的工具,那么每個(gè)問(wèn)題看起來(lái)都像一顆釘子。Node 并不會(huì )完美適配于每一個(gè)方案,當然很多時(shí)候不使用 Node 也是非常合理的。然而,Node 能做到的,他可以做得非常好。這完全由你自己來(lái)做一個(gè)明智的決定,去選擇一個(gè)適合自己項目的最好的工具。

  既然 Bruno 和 James 都發(fā)表了自己的觀(guān)點(diǎn),那么你是怎么看這個(gè)問(wèn)題的呢?

  Bruno Skvorc

  克羅地亞的程序員Bruno擁有計算機科學(xué),英語(yǔ)和文學(xué)三個(gè)碩士學(xué)位。他是 SitePoint 網(wǎng)站 php 專(zhuān)欄作家,還是 Diffbot.com 的開(kāi)發(fā)布道者. 他避免像瘟疫一樣的遺留代碼,挑選項目是盡管使用最新技術(shù),他還是一個(gè) treadmill desk enthusiast 和活板玩家,他有一個(gè)博客:sometimes blogs.

  James Hibbard

  我是一個(gè)網(wǎng)站開(kāi)發(fā)者,目前居住在陽(yáng)光明媚的德國北部。我喜歡使用 JavaScript 和 Ruby 編程,你在SitePoint 的 javascript 論壇經(jīng)常能看到我。不寫(xiě)代碼時(shí)我喜歡跑步。

【php 與 js 我們如何選擇呢】相關(guān)文章:

php與js的區別07-19

php怎么引入js08-31

如何選擇PHP版本09-26

php與js有哪些區別09-03

PHP和Python如何選擇11-07

PHP+Ajax+lottery.js抽獎08-28

如何在php與js中分別獲取客戶(hù)度mac地址09-04

HTML中利用js調用php的內容09-18

php+js實(shí)現倒計時(shí)功能08-28

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看