首頁(yè)技術(shù)文章正文

Web開(kāi)發(fā)技術(shù)選型之Java與PHP

更新時(shí)間:2018-01-09 來(lái)源:黑馬程序員 瀏覽量:

PHP與J2EE的對(duì)比

網(wǎng)上有很多關(guān)于PHP與J2EE之間的對(duì)比,細(xì)觀無(wú)非以下幾點(diǎn):

1.語(yǔ)言特征

PHP為腳本語(yǔ)言,解釋型語(yǔ)言,弱類型,專為Web開(kāi)發(fā)打造。Java為C語(yǔ)言系編程語(yǔ)言,編譯型,強(qiáng)類型,有跨平臺(tái)的特征。從語(yǔ)法簡(jiǎn)潔性來(lái)說(shuō),PHP比Java簡(jiǎn)潔,畢竟PHP誕生比Java晚,同樣的邏輯在PHP中表達(dá)起來(lái)會(huì)簡(jiǎn)潔于Java,這一特性導(dǎo)致同樣熟練度的PHPer與Javaer相比PHPer編程速度要快于Javaer。在這里我要強(qiáng)調(diào)的是同一熟練度,這個(gè)概念很重要,在沒(méi)有前提假定的情況下比較兩種編程語(yǔ)言的熟練度是沒(méi)有意義的,比如一個(gè)新Phper在開(kāi)發(fā)時(shí)對(duì)PHP語(yǔ)言不熟練,開(kāi)發(fā)過(guò)程中需要頻繁的查閱相關(guān)文檔,那么這個(gè)新PHPer開(kāi)發(fā)速度肯定比不上老Javaer,因?yàn)樾翽HPer在查閱文檔的時(shí)間內(nèi),老Javaer可以完全依靠熟練度填平語(yǔ)法上的效率差異甚至超過(guò)新PHPer。

2.執(zhí)行速度

語(yǔ)言特征決定了執(zhí)行速度,在執(zhí)行速度上,網(wǎng)上也有很多對(duì)比,總結(jié)而言Java優(yōu)于PHP,但事實(shí)上比較兩者的執(zhí)行速度意義不大,因?yàn)閃eb應(yīng)用的效率瓶頸是在對(duì)數(shù)據(jù)庫(kù)的相關(guān)操作上,需要強(qiáng)調(diào)的是PHP與Java同樣是作為Web服務(wù)器開(kāi)發(fā)語(yǔ)言,功能都是操作數(shù)據(jù)庫(kù)服務(wù)器以及動(dòng)態(tài)網(wǎng)頁(yè)呈現(xiàn)而已,如果網(wǎng)站多數(shù)以靜態(tài)頁(yè)面的形式呈現(xiàn)給用戶,那兩者比較毫無(wú)意義。

3.部署方式

PHP典型的部署方式是LAMP,即Linux系統(tǒng)+Apache服務(wù)器 +MySQL數(shù)據(jù)庫(kù)+PHP語(yǔ)言,而JavaEE的部署方式有Linux系統(tǒng)+Tomcat服務(wù)器+Mysql數(shù)據(jù)庫(kù)+Java語(yǔ)言,不同之處只在于服務(wù)器與語(yǔ)言的選擇,Tomcat與Apache都是開(kāi)源免費(fèi)的服務(wù)器,從部署上來(lái)講兩種語(yǔ)言都有可行的解決方案。但在這里重點(diǎn)講的是虛擬機(jī)主機(jī),國(guó)內(nèi)的虛擬主機(jī)大多不支持Java,即便支持Java也貴于PHP,而且Java應(yīng)用大多使用Tomcat服務(wù)器,而java虛擬主機(jī)是共享Tomcat進(jìn)程,如果部署到該服務(wù)器的其它應(yīng)用影響到了Tomcat進(jìn)程會(huì)導(dǎo)致所有應(yīng)用都無(wú)法使用Tomcat進(jìn)程,因而主機(jī)服務(wù)商維護(hù)Java服務(wù)器成本高于PHP服務(wù)器,所以這也導(dǎo)致了PHP在Web端獨(dú)大的現(xiàn)狀。當(dāng)然不用虛擬主機(jī)則完全沒(méi)有這樣的顧慮,如使用云服務(wù)器,云服務(wù)器可以自行配置相關(guān)環(huán)境,而自由是把雙刃劍,安全但是價(jià)格高。在這里PHPer與Javaer的不同是在編程環(huán)境上,有人說(shuō)PHP可以熱部署,不用像Javaer編寫(xiě)Web應(yīng)用時(shí)每次改代碼都需要開(kāi)關(guān)服務(wù)器,部署應(yīng)用,再調(diào)試,事實(shí)上Javaer也可以熱部署,在Intellij中只需要一個(gè)按鈕。

5.團(tuán)隊(duì)配合

在提倡前后端分離的互聯(lián)網(wǎng)環(huán)境下,模板開(kāi)發(fā)方式導(dǎo)致的前后端高耦合越來(lái)越遭人摒棄,如今,Web應(yīng)用后端只需要提供相應(yīng)的數(shù)據(jù)接口供前端調(diào)用即可,典型思想如RestFul。所以在團(tuán)隊(duì)前后端配合角度,PHP與Java并無(wú)太大的區(qū)別。若Web應(yīng)用考慮SEO搜索引擎優(yōu)化仍采用模板開(kāi)發(fā)的模式,則PHP語(yǔ)言對(duì)前端的友好程度則高于Java。

5.系統(tǒng)架構(gòu)

在系統(tǒng)架構(gòu)這方面,Java毫無(wú)疑問(wèn)完勝,Java擁有多種架構(gòu)選擇,常見(jiàn)的SSH框架即Struts+Spring+Hibernate、SSM即Spring MVC+Spring+Mybatis、SM即Spring boot+Mybatis都可以作為web應(yīng)用的框架選型,這些框架能夠很好的將后端模塊進(jìn)行分離,根據(jù)具體需求的不同選取不同的MVC層、業(yè)務(wù)層、持久層框架進(jìn)行開(kāi)發(fā)。有人說(shuō)PHP也可以做到,說(shuō)PHP有很多的框架也可以做到分層架構(gòu),ThinkPHP不就是國(guó)人開(kāi)發(fā)的PHP MVC框架么?PHP有框架這點(diǎn)毋庸置疑,但是PHP從語(yǔ)言特性上來(lái)講并不適合做框架,框架和面向?qū)ο缶幊趟枷胗泻軓?qiáng)的聯(lián)系,而PHP語(yǔ)言特性上對(duì)面向?qū)ο蟛⒉挥押茫@也就導(dǎo)致了PHP在框架這條路上其天花板與Java相去甚遠(yuǎn)。在這里有些PHPer毫無(wú)疑問(wèn)會(huì)義憤填膺,但事實(shí)如此,PHP的語(yǔ)言特性偏向與面向過(guò)程,其旨在開(kāi)發(fā)特定的業(yè)務(wù)邏輯,這也是PHP適合Web開(kāi)發(fā)的原因。又有人會(huì)說(shuō),PHP5.0之后也支持面向?qū)ο?,但事?shí)上PHP也是不得已而為之。關(guān)于面向?qū)ο蠛兔嫦蜻^(guò)程的區(qū)別此處不表,但總而言之所以對(duì)于系統(tǒng)架構(gòu)而言,PHP和Java都有各自的應(yīng)用場(chǎng)景,在沒(méi)有前提假定的情況下去比較兩者,難分優(yōu)劣。

技術(shù)選型 到底用PHP還是J2EE?

涉及到這個(gè)問(wèn)題,作為應(yīng)用擁有者,考慮問(wèn)題無(wú)非從以下幾點(diǎn):

1.人力成本

與Java相比,PHP作為后起只秀,在人才庫(kù)上少于Java乃是不爭(zhēng)之實(shí),其實(shí)這也跟當(dāng)今教育有關(guān)。當(dāng)今教育系統(tǒng)多半以學(xué)院派編程語(yǔ)言作為入手語(yǔ)言即C語(yǔ)言系,如C/C++、C#、Java,所以學(xué)歷教育下的Web編程語(yǔ)言以Java居多。而PHP語(yǔ)言的學(xué)習(xí)大多在職業(yè)教育下,也不乏一些在社會(huì)教育中自行學(xué)習(xí)的。這一現(xiàn)狀也導(dǎo)致了PHP人才在社會(huì)中的稀缺。供求關(guān)系決定了人力資源價(jià)值,PHP人才價(jià)格高于Java人才由此也由此得到體現(xiàn)。

2.項(xiàng)目需求

在基于B/S架構(gòu)的Web應(yīng)用中,項(xiàng)目需求復(fù)雜程度跨度比較大,從企業(yè)展示網(wǎng)站、個(gè)人博客搭建,到電商平臺(tái)、CRM系統(tǒng),再到金融平臺(tái)、銀行系統(tǒng),項(xiàng)目需求復(fù)雜程度以指數(shù)級(jí)遞增。再加上Web應(yīng)用運(yùn)營(yíng)階段時(shí)版本更迭對(duì)項(xiàng)目需求的影響,Web應(yīng)用在開(kāi)發(fā)之初就需要建立起一個(gè)完整的系統(tǒng)設(shè)計(jì)。與國(guó)家5年計(jì)劃類似,系統(tǒng)設(shè)計(jì)在最初版本一定有著一定的空間與時(shí)間假定,例如一個(gè)最初設(shè)計(jì)為企業(yè)展示網(wǎng)站的Web應(yīng)用,在一定時(shí)間與一定發(fā)展程度的影響下也絕不會(huì)跳出企業(yè)展示需求而變成銀行系統(tǒng)。這樣一個(gè)系統(tǒng)設(shè)計(jì)的假定與技術(shù)選型息息相關(guān),而PHP和Java在Web領(lǐng)域的也有著不同應(yīng)用場(chǎng)景。簡(jiǎn)單的系統(tǒng)設(shè)計(jì)PHP完全可以勝任, 而復(fù)雜的系統(tǒng)設(shè)計(jì)意味著后端代碼需要模塊化,要低內(nèi)聚/高耦合以及代碼重用,無(wú)疑面向?qū)ο蟮腏ava語(yǔ)言更適合這種復(fù)雜的場(chǎng)景。(大家可以加入愛(ài)好集結(jié),一同交流:342836117) 歡迎交流: (858288017)

3.運(yùn)營(yíng)成本

一個(gè)Web應(yīng)用總歸是要部署在網(wǎng)絡(luò)中供其用戶瀏覽使用的,而PHP與Java對(duì)運(yùn)營(yíng)成本的影響也會(huì)影響到其技術(shù)選型。對(duì)于Web應(yīng)用的運(yùn)營(yíng)而言,無(wú)非部署與維護(hù)兩大塊。部署考慮的是服務(wù)器價(jià)格,維護(hù)考慮的是人員開(kāi)支。部署方面,PHP Web與Java Web在網(wǎng)絡(luò)中的部署方式通常有三種,一種是鏡像部署,一種是虛擬主機(jī),還有一種是云服務(wù)器。鏡像部署只需要一臺(tái)連接到網(wǎng)絡(luò)的電腦,虛擬主機(jī)需要向主機(jī)商租用,云服務(wù)器類似與虛擬主機(jī)也需要向主機(jī)服務(wù)商租用,三者對(duì)于不同的應(yīng)用場(chǎng)景各有優(yōu)劣,其區(qū)別就在于服務(wù)器負(fù)載、穩(wěn)定性與安全性等方面,詳細(xì)區(qū)別讀者可以自行百度,價(jià)格方面,無(wú)一例外,Web服務(wù)器對(duì)PHP這個(gè)腳本語(yǔ)言特別友好,所以PHP服務(wù)器統(tǒng)一的要比Java服務(wù)器便宜;維護(hù)方面,PHP Web與Java Web的維護(hù)有兩個(gè)方向,一個(gè)是應(yīng)用異常,還有一個(gè)是服務(wù)器異常,應(yīng)用異常讓開(kāi)發(fā)人員去調(diào)試,服務(wù)器異常如果是鏡像部署讓網(wǎng)絡(luò)管理員與開(kāi)發(fā)人員協(xié)同調(diào)試,而虛擬主機(jī)與云服務(wù)器則找相應(yīng)的服務(wù)器提供商即可。運(yùn)營(yíng)成本經(jīng)過(guò)部署與維護(hù)的綜合考量:維護(hù)成本在人力成本中可以歸算到人力成本這塊,而部署成本除鏡像部署不需要考慮PHP與Java的差別,虛擬主機(jī)與云服務(wù)器部署PHP則較低于Java。

綜上所述

對(duì)于一個(gè)普通的Web應(yīng)用而言,如企業(yè)展示網(wǎng)站、個(gè)人博客搭建、微商平臺(tái)、小型ERP、CRM系統(tǒng),技術(shù)角度PHP完全足夠,價(jià)格角度PHP也便宜于Java,開(kāi)發(fā)速度PHP略優(yōu)于Java。對(duì)于一個(gè)復(fù)雜的Web應(yīng)用而言,面向?qū)ο蟮腏ava將會(huì)是不二的選擇,雖說(shuō)費(fèi)用高,但貴只有貴的一個(gè)缺點(diǎn),便宜則只有便宜一個(gè)優(yōu)點(diǎn)。需要特別提出的是,內(nèi)網(wǎng)應(yīng)用,也就是基于B/S架構(gòu)但不掛入互聯(lián)網(wǎng)的Web應(yīng)用,我推薦Java。

總結(jié)

寫(xiě)到這里,有些讀者可能覺(jué)得作者通篇都在講PHP優(yōu)于Java,筆者作為一個(gè)Javaer,本意陳述這兩種語(yǔ)言的客觀事實(shí),不可否認(rèn)的是,PHP在Web領(lǐng)域獨(dú)領(lǐng)風(fēng)騷,而Java則是Web領(lǐng)域企業(yè)級(jí)應(yīng)用開(kāi)發(fā)的首選??v觀當(dāng)今Web應(yīng)用的社會(huì)需求,大項(xiàng)目需求少于小項(xiàng)目,小項(xiàng)目又要求要快速迭代,而Java服務(wù)器以及部署成本高,導(dǎo)致真正適合用Java開(kāi)發(fā)的Web應(yīng)用少之又少。但總而言之,PHP能做的Java都能做,Java能做的PHP未必能做的好,PHP與Java的技術(shù)選型,最后還是需要多個(gè)因素綜合考量。事實(shí)上Java作為最健壯的后端語(yǔ)言有著PHP無(wú)法比擬的優(yōu)勢(shì),面向?qū)ο缶褪荘HP這個(gè)腳本語(yǔ)言邁不過(guò)去的坎。筆者作為Android與J2EE兩個(gè)平臺(tái)的開(kāi)發(fā)人員,考慮到編程語(yǔ)言的一致性,做Web應(yīng)用,還是會(huì)用Java,買(mǎi)個(gè)云服務(wù)器,一來(lái)可以部署個(gè)項(xiàng)目管理SVN云服務(wù)器,二來(lái)部署個(gè)持續(xù)集成/自動(dòng)化構(gòu)建服務(wù)器jenkins或者TeamCity,既做開(kāi)發(fā)環(huán)境又做生產(chǎn)環(huán)境,雖然我不是商人,但不意味著我是傻逼,把云服務(wù)器上花的錢(qián)給想辦法利用起來(lái),何樂(lè)而不為?(文章來(lái)源于網(wǎng)絡(luò))

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!