想了解java工程師和php工程師嗎?想了解php程序員來(lái)談?wù)刾hp和java?? 嗎?......本文帶你一探究竟。
1.php程序員來(lái)談?wù)刾hp和java
本人一直以來(lái)從事PHP互聯(lián)網(wǎng)開發(fā),之前用過Thinkphp,不過最近幾年一直用Yii2。最近由于公司要開發(fā)一套OA系統(tǒng),所以開始用JAVA在做(php開源的工作流引擎真的太爛,自己開發(fā)一套又沒時(shí)間),這里就說(shuō)說(shuō)最近幾天使用JAVA的一些感悟吧。首先討論一下理論上PHP和JAVA各自的優(yōu)勢(shì)。PHP:開發(fā)效率非常高JAVA:(1),純粹的面向?qū)ο?面向接口編程,各種設(shè)計(jì)模式讓你玩得不亦樂乎。(2),運(yùn)行效率吊打PHP(3),javaee開發(fā)的web項(xiàng)目,對(duì)象可以常駐內(nèi)存,有真正的mysql和redis連接池(4),強(qiáng)類型語(yǔ)言,保證代碼規(guī)范(5),有完善的開源社區(qū)支持,各種開源包讓你玩得不亦樂乎(6),做大數(shù)據(jù)開發(fā),還是得用java,java對(duì)hadoop的支持比php好太多。看到JAVA那么多好處,我也非常激動(dòng),懷著無(wú)限的憧憬,我用maven創(chuàng)建了我的*個(gè)項(xiàng)目,框架用的是 + hibernate??赡苡腥艘獑栁覟槭裁床挥胢ybatis,好像現(xiàn)在很多互聯(lián)網(wǎng)項(xiàng)目都是用mybatis來(lái)實(shí)現(xiàn)。這個(gè)我是因?yàn)槲抑爸豢催^一本javase基礎(chǔ)的書,沒有做過javaee開發(fā),所以我懂不起任何的java orm框架,后來(lái)一個(gè)qq群里面的哥們告訴我用hibernate,他告訴我OA系統(tǒng)并發(fā)不大,對(duì)效率要求不高的項(xiàng)目用hibernate很方便,所以我就去下載了一本hibernate的電子書來(lái)看。到后來(lái)我必須開始編碼了,因?yàn)闀r(shí)間不夠了,所以到現(xiàn)在為止我還用不來(lái)mybatis.回歸正題,吐槽一下我使用java崩潰的感覺:(1),純粹的面向?qū)ο蟾杏X很有問題,比如一些對(duì)字符串處理和驗(yàn)證的公共方法。我定義一堆函數(shù)就完了的,現(xiàn)在用java,新建一個(gè)包,然后建立一堆類,然后用靜態(tài)方法去實(shí)現(xiàn)(2),配置太復(fù)雜,雖然說(shuō),現(xiàn)在幫我們做了大量的默認(rèn)配置,但是,對(duì)于一個(gè)寫了7年php的程序員來(lái)說(shuō),這些配置還是讓我非常崩潰的(3),說(shuō)到j(luò)ava的運(yùn)行效率高于php,我承認(rèn)。不過在實(shí)際的項(xiàng)目中呢,php提供了大量的函數(shù),這些函數(shù)直接調(diào)用C語(yǔ)言編寫的擴(kuò)展,效率非常高。比如web開發(fā)中最常用的json操作,java還得去引入一個(gè)包,要不你自己寫代碼實(shí)現(xiàn)。java在這方面效率不如php(4),說(shuō)到對(duì)象可以常駐內(nèi)存,這個(gè)有好處也有壞處吧,好處上面都說(shuō)了,壞處就是代碼如果編寫不好,可能會(huì)造成內(nèi)存溢出。但是php每次請(qǐng)求上來(lái)創(chuàng)建對(duì)象,完成請(qǐng)求之后所有資源全部回收的方式,基本不會(huì)出現(xiàn)內(nèi)存溢出的問題(5),強(qiáng)類型的語(yǔ)言,可以讓我們代碼很規(guī)范,不過,我卻在無(wú)休止的類型轉(zhuǎn)換中感覺到崩潰,特別是數(shù)字和字符串的轉(zhuǎn)換。還有數(shù)字字符串沒辦法做四則運(yùn)算,太繁瑣了。(6),太過于繁瑣的開發(fā),比如數(shù)據(jù)封裝到j(luò)avabean。大量的javaBean的定義,感覺特別奔潰,php開發(fā)中壓根就不需要定義這樣的對(duì)象,因?yàn)槿躅愋驼Z(yǔ)言,就算對(duì)象沒有定義某個(gè)屬性,也可以動(dòng)態(tài)加上。(7),真正的連接池,這個(gè)是java的一大特色,在php中長(zhǎng)連接是有問題的,因?yàn)槊總€(gè)php-fpm會(huì)長(zhǎng)期持有一個(gè)連接,不管使用到?jīng)]有。但是php的短連接非常強(qiáng)悍,直接調(diào)用C語(yǔ)言擴(kuò)展,速度極快。我用php的短連接和jdbc的短連接對(duì)比,*次連數(shù)據(jù)庫(kù)php快30倍,之后也要快18到20倍左右。當(dāng)然,php的短連接和java的連接池比起來(lái)就遜色很多了。然后這里說(shuō)一下php也有連接池,php-cp擴(kuò)展就是很好的連接池,不過由于php-cp也需要單獨(dú)開啟一個(gè)進(jìn)程所以php-fpm進(jìn)程和連接池的通信走的是進(jìn)程信號(hào)的方式,這種方式效率依然比不上java的連接池,人家的對(duì)象就在內(nèi)存中,拿過來(lái)就用。不過php-cp已經(jīng)達(dá)到很好的效率了。我們要知道,和數(shù)據(jù)庫(kù)和redis等需要走網(wǎng)絡(luò),和網(wǎng)絡(luò)開銷對(duì)比,php-cp比java連接池慢的那一點(diǎn)點(diǎn)效率完全可以忽略不計(jì)??偨Y(jié)一下:java縱使有高大上的設(shè)計(jì)思路,縱使高效的運(yùn)行效率,縱使有那么多的優(yōu)點(diǎn)。不過在實(shí)際開發(fā)中,我還是建議如果不是非得要使用java,用php來(lái)快速實(shí)現(xiàn)是一種很好的方式。然后,我之前聽過有人告訴過我同樣的代碼運(yùn)行起來(lái)php的cpu消耗比java高很多。這里說(shuō)一下,opcache真的很重要,線上環(huán)境真的要努力的去配置好,勁量關(guān)閉opcache自動(dòng)刷新,項(xiàng)目發(fā)布之后去手動(dòng)刷新(不是真的手動(dòng),你可以寫個(gè)腳本)是不錯(cuò)的選擇。然后切記php在把源代碼編譯成opcode的時(shí)候,不會(huì)做代碼優(yōu)化,java是要做代碼優(yōu)化的(所以知道為什么php的編譯那么快,java很慢了吧,人家要做編譯優(yōu)化的)。所以大家寫代碼的時(shí)候一定要保持良好的習(xí)慣。我的疑問:話說(shuō)為什么php那么好,但是目前的工作崗位比起java少那么多呢?java那么難用,為什么大量的公司要用它做web開發(fā),或者api開發(fā)呢?我是真沒明白,因?yàn)檎娴挠X得一點(diǎn)都不好用啊。開個(gè)玩笑:我也面試過很多php的人,說(shuō)句實(shí)話,很多做php的人是學(xué)不懂java所以來(lái)做php的。因?yàn)閖ava學(xué)習(xí)的東西太多,太復(fù)雜。不過這樣的人就算是來(lái)學(xué)php,也不會(huì)學(xué)得有多好的,因?yàn)榈胶竺鎭?lái)深入了之后,其實(shí)語(yǔ)言都大同小異的。我學(xué)習(xí)javaee然后整合各個(gè)框架開發(fā)項(xiàng)目一共用了10天時(shí)間。其實(shí)真的不難,沉下心去學(xué)習(xí),所以技術(shù)都很簡(jiǎn)單。說(shuō)真的我很難接受因?yàn)榇罅康膒hp程序員水平不行(可能這也是很多公司不用php用java的原因吧),而讓這門世界上*秀的語(yǔ)言沒落。
上述文章了解到關(guān)于php程序員來(lái)談?wù)刾hp和java?? ,讓我們對(duì)java工程師和php工程師 有一個(gè)直觀的認(rèn)知。我們發(fā)現(xiàn),作為一個(gè)優(yōu)秀的Java程序員是多么的自豪。