wordPress/ target=_blank class=infotextkey>WordPress 除了做博客之外,其實還可以做成純后端服務和管理界面(Admin UI),前端的模板可以不需要使用 WordPress 模板。
舉個例子:我的博客「WordPress果醬」是不是非常快,其實這個博客不是通過 WordPress 模板引擎渲染的博客了。
現在看到的頁面實際上是通過讀取 WordPress 提供的接口,然后使用 php 模板渲染出來的。為了加速,PHP 每次讀取接口的內容之后,把內容存儲到 Memcached 中,第二次直接從內存中獲取,所以速度非常的快。
WordPress 作為純后端的詳細步驟
1. 把「WordPress果醬」博客的后端放到另外一個域名下面或者目錄下面,比如:http://wpjam.純后端的域名.com/,然后通過訪問 /wp-admin/ 目錄登錄后臺進行更新的。
2. 更新好內容之后,我們就可以提供 Rest API,WordPress 原生已經支持了 Rest API,大家可以直接使用,我是使用自己寫的一套,因為很早就寫好了。比如比如文章列表的 API 接口:http://wpjam.純后端的域名.com/api/post/list.json。
3. 「WordPress果醬」的前端是使用 PHP+Memcached 寫的一個內容緩存程序,該程序抓取 WordPress 的 Rest API 接口里面的內容,并使用 Memcached 緩存到內存,然后寫個 PHP 模板渲染出來,簡單可以說用 PHP 寫個客戶端的意思。
WordPress 做純后端的好處
這樣做,初步看起來,有點很繁瑣,但是好處非常大:
1. 速度快:因為是純 PHP 寫的,而且使用了 Memcached 進行緩存,所以「WordPress果醬」速度特別快,可以看到頁面生成的時間都是 0.001 秒多一點,就是千分之一秒多一點。
2. 能夠扛大流量:因為「WordPress果醬」和它的管理后臺在兩個服務器上面,不會因為前臺訪問太猛,而造成后臺也掛了!并且前臺的內容只是一個 Memcached 緩存,結合阿里云 OSS做了靜態資源的 CDN,可以扛非常大非常大的流量。
3. 管理方便:「WordPress果醬」管理后臺是搭建在另外一臺服務器的 WordPress 多站點上,這樣我所有的站點都可以在一個 WordPress 多站點上進行管理和內容更新,管理的工作就降低了非常多。
4. 適配所有客戶端:因為使用 Rest API 接口實現了前后端徹底分離,所以如果以后要做 iphone 和Android/ target=_blank class=infotextkey>安卓客戶端,或者小程序,都會非常方便,一套接口可以適配所有客戶端。「WordPress果醬」的小程序很快會上線。
5. 無需 WordPress 模板:我們只需要解析 REST API,然后用 PHP 去寫模板,不用再記各種 WordPress 模板函數了,如果不考慮 seo,甚至可以不用 PHP,直接讓前端用 VUE 或者 React 做 Web App。
完全的前后端分離
這樣做的好處就是完全的前后端分離,頁面的渲染都可以交給前端或者中臺去處理,后端只需要去處理業務邏輯就好了,當然博客比較簡單沒有什么復雜的業務邏輯。但是比如花生小店這樣電商平臺使用這樣的方案的時候,開發就方便了很多,花生小店以后可能還會進化到微服務方案。
目前還有一些細節需要特別優化以及需要探討的地方:
1. 更新通知:就是在后臺更新了內容,怎么通知前端更新內容。目前我在前端 PHP 模板留了更新接口,在后臺寫了一個更新通知插件,如果其他客戶端,就無法通知,可能就是需要前端就是實時抓取后端接口,不能緩存。
2. 評論處理:評論我暫時還沒處理,因為我的博客沒有開啟評論,但是我覺得實現評論問題不大,在前端,可以簡單理解為一個 PHP 客戶端,那么重點問題就是怎么在客戶端更新緩存,只要后端提供評論接口,前端收到評論成功的信息之后,刷新一下詳情頁即可。
3. 整站配置接口:一些基于評論和瀏覽排序的文章列表,更新不是特別的實時,目前這一塊我的想法是通過做一個整站的配置信息接口來處理,把一些側邊欄的內容和底部內容這些都放到這個整站的配置接口里面,并且整站的通用接口緩存的時間可以短一些,這樣通過折中的方式來處理。