看到這個標題,不免會產生疑惑,PHP不是做後端的嗎?使用單一語言確實方便,這裡PHP適合做前端JAVA適合做後端是針對大網站或系統的。比如說,淘寶核心開發語言是使用JAVA,前端表現層卻使用PHP。又問:web開發語言很多,Python, Ruby, Perl,。 net,為什麼選用PHP呢?
這是因為:
PHP靈活,上手快,易修改,發布快捷,缺點是容易犯錯(常見如拼字錯誤、SQL注入、上傳執行等)、執行效率不高、缺乏全域快取。 Java的優點則是穩定可靠、運作效率高、不容易犯錯(強型別、預編譯、必須攔截異常等等),缺點是開發發佈的效率相對較低。這裡這是相對而言,並不是說PHP不能開發大型web,也不是說JAVA效率低,足夠經驗和能力的仍然很有效率。
接著從MVC的層次結構上說,在一般網站專案的開發週期中,需求變更最頻繁、調整最多的是View,其次是Controller,最後是Model。這非常好理解,沒事做誰天天改資料結構?每次版本升級控制結構都要改的啦,或多或少而已。而View,啥時候兩天不改BU啊PM啊UED啊?
兩者之間的通信,目前RPC技術已經足夠成熟,無論是Web Service/Hessian/RESTful API都能夠讓開發人員專注在功能開發上,而不需要過多的考慮異質平台的差異和通訊的細節。這也意味著在大公司同時應用兩種語言的方案並不會引入過多的複雜度和工作量。
總的來說,靠近使用者的前端,使用PHP能夠更快的完成前端頻繁而瑣碎的更新,自如的應對各種需求的變化。頁面的結構調整、使用者輸入內容的基本驗證、僅只和使用者互動有關的簡單邏輯等都很適合使用PHP來開發,甚至可以透過類似Smarty等模板技術將其頁面的變動遷移到前端團隊。而基本的業務邏輯和資料的更新採用Java開發,可以有效的提高復用度、提升效能和吞吐能力、規避安全性問題等。而開發效率稍有降低換來的是可維護性的提升,發布速度慢就更不是問題了,因為通常對於基礎業務邏輯的調整往往都是整體修改,並層層測試確認才能發布的。
所以,大型網站前端採用PHP後端採用Java,既好招人又好維護、系統穩定還效能高、連安全性都大幅增加。程式碼復用、文檔完備度居然也都改善了。讓你在以上這些好處觸手可及時,對架構師知識譜系在廣度上要求更高一些這事根本就不是個問題。
為什麼不用單一語言:
單一方案其實一樣可以做良好的隔離,PHP同樣可以提供Service,而效能問題其實很多時候是演算法和架構的問題而不是語言差異的問題。如Velocity或JSTL等也是很優秀的隔離方案。
但我們都知道,現實往往比理想骨感很多,這些方案在高壓力下會暴露出很多問題而體現雙語的優勢,這些在上面其實都提到,詳細說明一些很難得到改變的點:
1. PHP由於其動態腳本語言的特性,包括類別、函數、常數在內都需要在每次請求週期中重複執行後才能建立運行環境;為了保證解析速度而犧牲編譯品質;應用了FastCGI但僅僅只是複用進程處理請求減少fork成本而不是像其他語言,初始化完畢後通過FastCGI的接口獲得數據並以對應接口返回數據等幾個原因,基本上已經不可能在性能上追回當初更爛現在開著JIT牌跑車的Java了。
2. 在PHP裡是如此的容易犯錯而難以發現,即使你用實質上出自官方的Zend Studio,也無法改變一個事實:要保證你的程序高質量無大錯,得要有充足的經驗、足夠的嚴謹、以及-負責任的QA。淘寶的黃裳曾經拿IDE這事開過玩笑。而玩笑背後的那個原因「缺乏中間件」最近幾年有不少的改善,主要是不少中間件的支持變得更廣泛了從而讓PHP得益,但發展的根源其實還是在C和Java社區。性能和易犯錯則是語言特性造成的技術困難,也是用來換取靈活、快速的必要代價,很難去指望有根本的改善。
3. Java的世界裡也有JSTL、Velocity和Freemaker等,但和PHP靈活而強大的動態能力、豐富的函數和類別庫、輕鬆的學習成本、多到令人髮指的文檔相比,簡直就是渣,就是渣啊! JSTL改完了要重啟Context啊有木有? Velocity不關快取也要重啟啊有木有? Velocity開緩存性能低下啊有木有?即使這些都不管,調整下某個資料校驗規則要改Action也要重啟有木有?
現在大家應該對這個問題有清楚的答案了吧。
以上是php學習為什麼說PHP適合做前端JAVA適合做後端?的詳細內容。更多資訊請關注PHP中文網其他相關文章!