部落格系統知多少:揭祕那些不為人知的學問(一)

微軟技術棧發表於2021-10-08

在我們生活的年代,部落格並不稀奇,甚至可以說是隨處可見。從最早的搜狐、新浪部落格,再到每個人都曾記錄青春的 QQ 空間,再到現在的 Vlog 與 Plog,似乎擁有一個自己的部落格並不是什麼難事。然而想要自己從零開始搭建一個出色的部落格系統,則並非那麼簡單。可能有些懂技術的小夥伴會說,看上去只是簡單的對文章 CRUD 就行了,也沒有那麼複雜啊。然而,真的是這樣嗎,這背後可能隱藏著更多玄機等待著我們去挖掘。掐指一算,我建設自己的部落格已有11年,也見過許多程式設計師自己編寫部落格系統,但真正按規範和標準設計的功能完備的部落格少之又少。本文我將分享自己在部落格系統設計中積累的經驗,介紹一些鮮為人知的部落格技術,幫助想要搭建部落格的小夥伴們進一步瞭解如何設計一個優秀的部落格系統。

由於文章篇幅較長,本文將分為4篇推送,目錄如下:

  1. “部落格”的前世今生
  2. 我的部落格故事
  3. 誰是部落格的受眾?
  4. 部落格基本功能設計要點
    4.1 文章(Post)
    4.2 評論(Comment)
    4.3 分類(Category)
    4.4 標籤(Tag)
    4.5 歸檔(Archive)
    4.6 頁面(Page)
    4.7 訂閱
    4.8 版本控制
    4.9 主題及個性化
    4.10 使用者及許可權
    4.11 外掛
    4.12 圖片及附件的處理
    4.13 髒詞過濾及評論審查
    4.14 靜態化
    4.15 通知系統
  5. 部落格協議或標準
    5.1 RSS
    5.2 ATOM
    5.3 OPML
    5.4 APML
    5.5 FOAF
    5.6 BlogML
    5.7 Open Search
    5.8 Pingback
    5.9 Trackback
    5.10 MetaWeblog
    5.11 RSD
    5.12 閱讀器檢視
  6. 設計部落格系統有哪些知識點
    6.1 時區真的全用UTC?
    6.2 HTML還是Markdown
    6.3 MVC還是SPA
    6.4 安全
  7. 結束語

“部落格”的前世今生

部落格一開始不叫 Blog,而叫 Weblog,可能讓很多人詫異的是,它並不誕生於Web 2.0時代,而是早在1997年已經問世。部落格從最早的單使用者(單獨作者),逐漸發展為多使用者(一個團隊),即部落格平臺。而 Web 2.0 時代賦予了部落格社交屬性,可以讓讀者進行評論、訂閱(RSS/ATOM),部落格作者之間可以互相抱團(FOAF)、引用文章(Pingback),才讓部落格逐漸熱門了起來。

部落格系統也是各有千秋,PHP 有 WordPress,.NET 有BlogEngine。而最終,WordPress 幾乎成為了事實上的部落格系統的標準,它同時具備一些 CMS 的功能,微軟官方 .NET 團隊的部落格也是採用 WordPress 搭建。


圖 | 網路

閱讀部落格的使用者除了使用瀏覽器,還會使用 RSS/Atom 閱讀器。在 iPad 剛出來的年代,閱讀器應用曾經風靡一時。訂閱的部落格一旦有新文章,閱讀器就會自動收入,讀者無需每天人肉檢查是否有新文章釋出。Microsoft 365 的 Outlook 至今保留著 RSS 閱讀器的功能。

部落格至今依然是表達自我、傳播資訊並與社群互動的最佳途徑之一,就算微博(microblogging)出現,也沒能使部落格變得不再流行。所以說,部落格之於網際網路,就如同電子郵件一樣,“薑還是老的辣”,部落格作為一種文化載體,歷久彌新,持久散發著光芒。

我的部落格故事

我的部落格專案最早可追溯到2003年,那時候我正在上初中,課餘時間自學了 ASP 及 Access,構建了我的第一個個人網站,主題居然是黑客技術(年少無知,以為非常酷炫)。除了原創及轉載技術文章,也提供常用軟體工具下載等服務,有時候還假裝大學生幫人完成ASP的畢業設計(畢竟說自己是初中生沒人會相信)以換取Q幣、QQ秀等(太有年代感…)。這個系統一直維護到2007年我上高二,它長這樣:
image.png

(圖:2003-2007年的個人網站)

高考之後,我終於有大量的時間學習自己想了解的技術,且不用擔心被家長埋怨不好好學習。那會我自學了ASP.NET(VB),構建了我的第二代個人網站,主題不再是黑客技術,而是常規的計算機技術分享,主打原創技術文章(日誌),同時也開發了相簿、播客等 SNS 功能,並於2009年上線,它長這樣,一直維護到2011年。
image.png

(圖:2009-2011年的個人網站)

2012年畢業以後,我當了一名工程師(程式猿),沒有精力維護軟體下載、相簿和播客等欄目,於是決定只做技術文章,大刀闊斧地改版了我的網站,部落格的雛形就出來了。為了構建部落格,我參考了同樣是 .NET 的 BlogEngine 專案。其實國內某著名的 .NET 部落格平臺,最早就使用了 BlogEngine 專案,甚至它當年還有個中文版,叫博易。不過與其直接魔改他人的專案,我選擇看懂程式碼以後,自己用不同的方式去實現。本文之後要介紹的許多內容也來源於這段時間的學習。
image.png

畢業7年後,發現各項技術發展迅猛,.NET 技術與其他主流技術的競爭非常激烈,而長期在外企的我主要運用的還是 .NET 的技術。此時我下定決心,在業餘時間裡,用 .NET Core 重寫我的部落格系統,命名為 Moonglade,並開源到GitHub(https://github.com/EdiWang/Mo...)目前部落格地址是 https://edi.wang。內容面向國外社群,部署在微軟Azure的海外伺服器上(國內訪問可能較慢)。


刨除初中時代牛刀小試的 ASP 不說,從2009年到2020年這11年間,我的部落格程式碼橫跨十幾年 .NET 發展歷程,從ASP.NET WebForm 2.0 VB.NET + Access 到現在的ASP.NET MVC Core, C# 8 及 Azure SQL Database,也整合了 Azure App Service、Azure DNS、Azure DevOps、Azure Active Directory、Azure Blob、Azure AD、Azure CDN 和 Application Insights 等技術。
image.png

(圖:Moonglade部落格系統使用的Azure服務)

誰是部落格的受眾?

在談設計部落格之前,我們首先要明確,你的讀者從何而來?搞清楚這一點後,才能夠聯想出使用者將如何使用你的產品。這也正是本文所要介紹的部落格的設計方法和要點。

開發和運營部落格11年的經驗積累和資料統計告訴我,對於一個常規技術部落格,95%以上的流量來自於搜尋引擎,並且多數情況下讀者只檢視這一篇他們所需要的文章,固定讀者或訂閱使用者佔總流量的比例相當少。這是由於技術部落格分享的內容多數為解決一個具體的技術問題。而技術人員遇到技術問題的第一反應就是去搜尋引擎查詢有沒有人曾經遇到過並已經解決,有可能複製貼上文章裡的程式碼去解決自己專案裡的問題後,就忘記了博主的存在。只有真正覺得博主的文章有一定水平,才會開始瀏覽部落格裡的其他內容。

不難發現,我們的使用者入口幾乎就是搜尋引擎,所以一個優秀的部落格系統,並不是只做好文字功夫,需要大量考慮SEO及其他針對機器和系統之間互動的部落格協議,時刻考慮SEO也是貫穿本文的重點
本文並不教大家程式碼的設計、技術實現,而是教大家部落格系統的設計思路和要點。至於技術方面,大名鼎鼎的WordPress、前輩們的 BlogEngine.NET,以及我的Moonglade,目前都已開源的,可供大家隨時研究。

明天我將介紹【部落格基本功能設計要點】敬請關注!


掃碼關注微軟MSDN,獲取更多微軟一手技術資訊和官方學習資料!
image.png

相關文章