wordpress 代碼質量怎麼樣?

wordpress就用了很久的,但底層代碼接觸不多。不知道各位高手怎麼評價與joomla和drupal比,單從質量上,wordpress處在什麼水平?


我是WordPress多年的老用戶了,從WordPress 1.5開始使用,到WordPress 2.3開始出現重大改革,後來逐步的WordPress 3.x,4.x,我依然堅持著使用WordPress,而且,也因為從2.0時代開始,深度研究WordPress的代碼,我成為了一名PHP程序員。

現如今,我已經是一個工作5年的PHP程序員了,我覺得問到這種問題,我理應出來回答一下。

代碼質量,這四個字,我們先討論下它們的內涵和外延吧,如果概念不清的話,我想大家也是無法評價的。不如看到這裡的同學來告訴我,談到代碼質量,你們想到的都是些什麼?

  • 高內聚
  • 低耦合
  • 可讀性
  • 可維護性
  • 可測試性
  • 分層
  • 抽象
  • DRY
  • 面向對象
  • 設計模式

不知道我說全了沒有?反正無法說全的吧,還有很多很多咯……如果這麼去評價這個項目的話,我只能說,WordPress的代碼還是挺爛的啦~

但是,如果我們來看看WordPress的故事,相信你有不同的看法。首先,我們來看看WordPress出現的年代,WordPress眾所周知的作者Matt,是1984年生人,他在2003年1月的時候,開始寫WordPress,那時候,因為他使用一個叫 b2/cafelog 的程序,覺得不爽,希望讓它能夠支持現代的Web標準,才發起這個項目,是在cafelog的代碼基礎上開始改寫的。所以,WordPress不是從0開始構建的,本身是站在巨人肩膀上的,但是這個巨人,基本上垂垂老矣了(連Web標準的概念都沒有)。

再來看看那個年代吧,首先那時候的Matt,是休斯頓大學政治科學系大一學生,然後他是薩克斯樂手,喜歡音樂、攝影和旅遊,所以,他在編程方面是個菜鳥……他當時只有19歲。所以說,他就算搞不定這事情也毫不奇怪,而結果WordPress成了世界上最著名的博客程序,可見,他還是非常天才的,他搞定了,而且,看看他搞這個的目的,他需要一個滿足自己要求和符合Web標準的博客程序,僅此而已,而他做到了!

當時的外部環境呢?說到WordPress,就無法不提到PHP,PHP那時候,正式取得巨大成功的時候,但是不好意思的告訴你們,PHP取得巨大成功,是從PHP4.x開始的,而PHP作為一個飽受詬病的語言,從開始就根本沒有面向對象的概念,只是為了解決Web開發而設計的一個語言而已,那時候估計還沒想過用PHP做多偉大的軟體,只是想做個Home Page而已。支持面向對象的PHP 5.x,是2004年7月才首次Release的,而且那時候,PHP 4.x已經是非常巨大的成功,而且已經成功了好多年,以至於很多軟體都來不及遷移到5.x。

所以,大家想想吧,用最爛的PHP語言(不支持面向對象),用面向過程的編程範式,寫了一個能run的blog,而且功能完善齊備,部署簡單,安裝順利,bug很少,你們說說代碼質量怎麼樣啊?別問我啊,我不知道啊。

我直到2.x之後,能力才逐漸能夠潛心下來看代碼,WordPress裡面的很多思想還是非常牛逼閃閃的。比如,它的Action和Hook機制。這個玩意兒,說有多神秘,一點也不啊。這不就是一個Observer設計模式嘛,就那麼自然而然地在裡面,用來解決問題了啊,而且是用面向過程實現的Observer哦!插件機制,不就是依賴注入嘛。還有優先順序隊列啊!處理Category那裡,遞歸,樹的構造,演算法也杠杠的啊。再看到了2.3的時候,引入的tag,信息檢索的思維也是杠杠的啊,tag的思想比起樹狀的分類目錄,已經直達現代了啊。

WordPress另一個厲害的地方是演化,從PHP 4.x走來,進化到PHP 5.x,然後它長時間都是同時支持PHP 4.x和PHP 5.x的語法的,我想說的是,PHP 4發展到晚期,出現了面向對象了,但是很簡陋,連訪問控制都沒有啊,可是WordPress一直在同時支持兩代語言的語法啊!一直考慮了很多個人博主使用虛擬主機,不易隨便升級系統的困擾,儘可能讓他們用上更好的版本啊。

等到歷史的車輪駛入PHP 5.x後,裡面一個又一個的模塊,在一個個迭代裡面,逐步的面向對象化。Widget的Class版出現,首先結束了寫個Widget用一坨面向過程方法。後面,漸漸的越來越多內部模塊都逐漸面向對象化了。在實施這個過程的時候,所有用老的版本開發的插件,都持續地能用,WordPress的向下兼容,不但跨越各種Minor版本號,也跨越Major版本號好不好。我在2.x寫的某些插件,現在還能繼續使用呢!

抒發感慨都抒發得我累了。

WordPress從代碼審美來看,依然不是什麼漂亮的作品。裡面代碼臟、亂,各種trick,表現和邏輯混雜,耦合等等問題,不勝枚舉。

但是從用戶至上的角度來看代碼質量的話,WordPress毫無疑問可以排進世界上最好的軟體名錄裡面。

  1. 部署簡便,依賴少,基本不依賴各種擴展;
  2. 向下兼容,兼容機器(*nix、win),兼容解釋器(PHP 4.x、5.x),兼容資料庫(MySQL,PostgreSQL),兼容社區(插件、皮膚的老版本)
  3. 界面時尚,設計潮流,緊跟時代腳步
  4. 功能簡單易用,bug很少
  5. 安全性基本符合中小網站要求
  6. 性能基本符合中小網站要求

所以,WordPress是一個質量很好的項目,而且一直秉承著用戶至上的精神,它的用戶不光是寫博客的博主,更是成千上萬依賴WordPress賺取收入的自由職業程序員,WordPress沒有粗暴的要求他們不斷升級插件、皮膚的版本去追隨版本(比如萬惡的蘋果),也沒有粗暴的禁止老版本的使用,而是極盡所能的兼容一切。

所以,直到今日,WordPress依然是非常流行的博客系統,而且已經逐步升級為一個小型的CMS系統,而且其開放的架構,Hook思想,可以讓人把它改成各種東西,有人做了網店,也有人做了社區,無所不能啊。

如果沉下心來,仔細研究代碼,不光是審美,還要考慮歷史因素,現實因素,不光研究一個版本,還要研究新版,研究代碼演化,相信還是能學到很多很多東西的,或許學這個,無法成為偉大的程序員,但是,你可能會成為一個優秀的產品經理,學會怎麼去尊重用戶,怎麼去一切以用戶價值為依歸,也可以成為一個優秀的工程師,學會怎麼讓一坨看起來醜陋不堪的代碼,不斷往更好的方向發展,跟上時代潮流和腳本,而不是放任它腐爛發臭。


如果你沒見過core/plugin架構的系統,你會說wordpress丑;如果你看過一些core/plugin架構的系統,emacs, vim,drupal,joomla各種CMS,你會發現WP是這些當中最簡單「優雅」的;讀了書不反芻拿著「耦合高」來事的,應該先想一想core/plugin的架構和這種架構下要低耦合所需要的代價;況且,反過來想core+plugin本身不就是最大的低耦合嗎?


WordPress沒有使用框架,還把性能做得這麼差,確實不應該.不過還好,有PHP7給WordPress擦屁股,畢竟WordPress是互聯網上部署數量最多的PHP明星應用.

先不談WordPress的代碼質量,很多人都是通過WordPress了解到PHP,WordPress對PHP的推廣貢獻很大.


牛逼


# 載入所有的函數類和插件亂七八糟的

require_once( dirname(__FILE__) . "/wp-load.php" );

# 從資料庫取數據

wp();

# 把數據放到模版裡面echo成string

require_once( ABSPATH . WPINC . "/template-loader.php" );

wordpress幾乎等於就是這三行組成的

2004年7月,PHP5正式版本的發布

2003年5月27日 , wordpress首次發布正式版

wordpress就是個面向過程的項目


鉤子
鉤子
鉤子~


其實有一種不看代碼的簡單評判代碼質量的方法:
1. 如果是被廣泛使用的底層基礎代碼並且時間悠久, 那麼該代碼質量性能與穩定性有保證;
2. 如果是被廣泛使用的應用代碼並且時間悠久, 那麼該代碼架構必然落後並且耦合嚴重;


丑 cry


有人說,WordPress的代碼像詩一樣。
我覺得,他一定是某個字發音錯了…


比較雜亂,到處都是強耦合,煙囪林立。


看了看wordpress代碼,說實話,為了擴展,各種回調,各種拼接sql語句,性能我感覺相當糟糕,還好我的站基本是靜態頁面為主,緩存了起來,影響不是太大。後台管理各種慢的,暫時沒管它,精力有限。wordpress 網站提速優化


我覺得吧,wordpress、 joomla和drupal 是三個層次的程序,學習難度人靈活度成正比,wordpress入門容易, joomla居中,drupal學習曲線陡峭。

所以,個人用戶wordpress比較適合,規模較大的網站joomla適合,drupal適合團隊。


代碼質量很一般,耦合太強,訪問量大的時候效率有點捉急,聽說下個大版本要做較大重構。

但是,人家出道早,擴展性好,主題多,插件多,簡單好用,對普通用戶來說是非常合適的。


像Linux內核一樣,必然很多歷史包袱
用就好了,真要研究,還不如自己寫一個博客


和以上觀點不同,作為啥都不懂的菜鳥,想擁有一個自己的網站,用wordpress真的很好,功能強大,穩定且免費。http://www.iaxun.com


wp主要是方便簡單,做小而美的網站足矣

PS:分享一個最近一直在看的用wp做的小說網站 http://www.runbige.com 樣子還不錯


十年了,wordpress一直是我的最愛,不知你們是怎麼樣,新建了一個http://yiqizhuan1.com 精簡!


按照Morden PHP來看,只能說是垃圾代碼……


機動靈活,性能較差,適合小網站。
網站流量大一些就需要深度優化,分表啥的挺煩人


wordpress,
一半人認為 高內聚低耦合,像詩一樣
另一半認為 低內聚高耦合,像屎一樣

總之我只為了改一個 keyvalue == 27,為了避免打拚音打錯按ESC導致整個管理員評論框把全部內容刪除的問題,差不多找了1個小時才找到代碼在哪,而我到現在都不知道到底是誰引用的這段代碼。(F12會告訴你是load-scrpit)


推薦閱讀:

新手適合學什麼計算機語言?
大型的 PHP應用 ,通常使用什麼應用做 消息隊列 的?
PHP 與 NodeJS 如何共用 Session?
是不是收到了1G的http post數據,這個進程佔用的內存就會有1G?
你怎麼用最通俗的話解釋AJAX是什麼東西?

TAG:PHP | WordPress | 代碼質量 |