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