WP-EasyArchives 文章存檔插件用于顯示文章存檔列表, 文章以月份分為多個列表。該插件還提供按月份和文章作者進行過濾的功能。 這款插件一直很穩定, 已經兩年沒更新了。
隨著 WordPress 上博客文章漸增,發現存檔頁面加載速度越來越慢。主要原因是文章存檔列表需要遍歷所有文章,并按照月份劃分區塊,后臺處理比較耗時,導致頁面性能不佳。我一拍大腿,優化了插件,并且將JavaScript 全部重寫了。
從界面上, 我們很難看出有什么變化但事實上內在有很多改動, 要不我怎么會直接將版本從 2.0 升至 3.0 呢? 下面我逐一列出。
增加Cache,大幅提升頁面加載速度
在我發布這款插件的之前使用的是 Clean Archives Reloaded, 其實當時所有的文章存檔插件都存在性能問題。 這些插件都使用 2 層循環處理,循環每一個月份,在月份處理內部再循環每一個文章。 這種處理性能明顯是低下的, 千篇文章的博客存檔頁面加載速度可能需要上 10 秒。
WP-EasyArchives插件制作的時候我就考慮到循環文章的性能問題, 當時我換了一種思路, 將 2 層循環改寫成 1 層的循環處理, 已經大幅提升性能。 但這還是不夠, 我現在 500 篇文章, 50 個月份, 后臺處理時間比別的頁面多500到1000 毫秒, 在這么一個連評論的沒有的頁面顯得很不正常。于是我考慮用緩存來處理。
最初的方案是緩存成文件, 為每個作者的所有文章緩存成一個文件。 但因為考慮到緩存成文件可能需要修改服務器的目錄權限, 會增加用戶使用的門檻, 后來決定改成將緩存保存在數據庫, 并且只保存頁面初始化時使用的狀態 (也就是全部月份全部作者的緩存)。 我相信用戶可以接受使用過濾器時因為異步請求產生的等待時間, 畢竟不影響頁面加載, 一兩秒的 loading 時間可以接受的。
當用戶發布,修改和刪除文章時,會自動刷新這個緩存。而打開存檔頁面時不需要去組裝, 直接將內容讀出來, 比顯示文章頁面還要快。上圖是 webpagetest.org 抓到的性能瀑布圖,靠上的圖片是修改前的后臺處理時間, 需要 1 秒多, 而修改后 (靠下的圖片) 處理速度快了起碼700 毫秒,隨著文章數量的增加,這個差距會更加顯著。
切換月份時不發出異步請求
我先要承認以前自己偷懶,以月份和博客作者兩個參數發出異步請求, 頁面上將返回內容顯示出來即可。 事實上, 我們可以減少很多不必要的請求,當博客作者不改變的時候, 月份怎么變也不會影響選中作者的文章列表內容, 這個時候使用 JavaScript 簡單地展示和隱藏文章列表內容就可以做到月份的切換。
因為JavaScript 處理和調用上還有某些不太完善的處理, 所以我干脆將包括原生版本和 jQuery 版本的 JavaScript 全部重寫了。 也將切換月份發出異步請求的問題改掉了。 所以如果使用新版的 WP-EasyArchives 插件, 你會發現切換文章作者會有 loading 狀態,而切換月份則不會。
刪除文章評論數量
以前在文章后方會有個小括號, 小括號里面是一個數字, 用于顯示該文章有多少評論數。 這次改版因為要處理緩存, 不能做成每次評論都刷新緩存。 而且從我自身來說, 這個功能作用不大, 還會影響處理性能和 SEO. 所以我干脆先去掉, 后面的版本再看是否需要這個功能。
不用吐槽了,WP-EasyArchives 3.1 已經加上該功能。
刪除 last 模式
WP-EasyArchives 插件本來包含展示所有 (Expand All), 折疊所有 (Collapse All) 和只展示第一個月份 (Expand Last Month) 三個模式, 其實 last 模式當初設計是我的一廂情愿, 在切換月份的時候會有大量不符合交互邏輯的效果, 所以將其刪除, 我也不用了。
所有本來 “只展示第一個月份” 的設定會自動轉為 “展示所有”。
后話
最近早起晚睡的,很累。但是昨天我一氣呵成將插件改完, 一直弄到晚上 11 點多, 還順便將 WP-RecentComments 插件一個小問題改了一下。 如果對一個事情發自內心地提起了興致, 真的很難以累為借口推脫。
下載地址:WP-EasyArchives插件
文章來源: