我的博客網站為什麼又回歸blazor了

我的博客網站為什麼又回歸blazor了

博客網站開發歷經艱辛,嘗試過mvc、vue、go等近10個版本,如今回歸blazor並採用靜態ssr,速度飛漲,已成功上線。

最后更新 2024/11/6 下午11:19
沙漠尽头的狼
预计阅读 8 分钟
分类
Blazor
标签
.NET C# Blazor Go Vue

引言

在博客网站的开发征程中,站长可谓是一路披荆斩棘。从最初的构思到实践,先后涉足了多种开发技术,包括 MVCRazor PagesVueGoBlazor 等。在这漫长的过程中,网站版本更迭近 10 次,每一个版本都凝聚着站长的心血与探索,这段充满挑战的历程详细记录于 分享我做 Dotnet9 博客网站时积累的一些资料 - 码坊

如今,經過深思熟慮與實踐檢驗,博客網站再次回歸 blazor,並採用了靜態 ssr 技術,同時融入了時尚且實用的 ant design 設計風格。這一系列的改進使得網站的訪問速度得到了質的飛躍,如同給網站注入了新的活力,目前網站已經成功上線。

  • 網址:https://dotnet9.com

開源的力量

在此,要感謝以下開源項目:

這是一個開源企業級開發框架,基於 blazor 技術精心打造。它以低代碼、跨平台、開箱即用的卓越特性,打破了傳統開發的局限,真正實現了一處代碼,多處運行的高效模式。其核心價值在於高效與靈活,為軟體開發模式帶來了全新的變革,就像一把神奇的鑰匙,幫助開發者輕鬆開啟數位化轉型的大門,從容應對各種挑戰,助力業務實現蓬勃發展,開啟嶄新篇章。

本站源碼也是開源:

  • 倉庫:https://github.com/dotnet9/CodeWF

碼坊是使用.net 9 blazor 開發的一個網站,這裡有技術文章,有開源項目居間,有在線工具使用: 碼坊-文章啟智,工具助力

網站技術

网站是基于 Known 的开源项目 KnownCMS 搭建:

knowncms 是基於 blazor 開發的一個內容管理系統,前台使用 blazor 靜態組件,後台使用 known 框架。

因为站长的网站只是一个博客文章展示、在线工具使用,平时文章编辑也是使用 Typora 及 VS Code 搭配使用,网站核心数据文件存储于 Assets.Dotnet9 仓库,所以站长去除了暂时不使用的后台管理相关功能,项目源码只有 3 个工程:

  • antblazor:站長基本沒有改過該工程,基本是由 known 提供的 ant design 風格 blazor 靜態組件封裝,比如表單、標籤、按鈕之類的基本組件等。
  • codewf:razor 類庫,主要實現網站文檔、博文頁面封裝,目前有工具還未上線,後面會按此庫架構另開一個庫寫在線工具;
  • website:網站的入口工程,整合 codewf 和 antblazor 工程,當然也包括部分頁面封裝(首頁、關於、時間線等)、web api 控制器等
AntBlazor CodeWF WebSite
AntBlazor CodeWF WebSite

小知識:什麼是靜態 ssr?

静态 SSR 与 Blazor Server 或 Blazor Client(WASM)有着显著的区别,微软文档 的说明:

靜態 ssr 是一種獨特的運行模式,在伺服器處理傳入 http 請求時,組件在伺服器端運行。在此過程中,blazor 會將組件巧妙地呈現為 html,並將其包含在響應內容之中。當響應發送完成後,伺服器端組件和相應的呈現器狀態會被自動丟棄,最終在瀏覽器端僅留存純淨的 html。

這種模式的優勢是多方面的。首先,它極大地降低了託管成本,為網站運營者減輕了經濟負擔。其次,它具有出色的可縮放性,無論是面對小規模的用戶訪問,還是大規模的流量衝擊,都能應對自如。這得益於它無需持續的伺服器資源來維持組件狀態,從而節省了大量伺服器資源。而且,它擺脫了瀏覽器和伺服器之間持續連接的束縛,同時也無需在瀏覽器中加載 webassembly,進一步優化了性能。

從更通俗易懂的角度來看,靜態 ssr 與 blazor server 同屬服務端渲染的範疇,但它在交互能力方面有所不同。在靜態 ssr 模式下,前端的 html 控制項不能像在 blazor server 中那樣使用 c# 事件方法映射,不過它仍然可以藉助 js 函數來實現交互,例如 button 的 click 事件可以映射 js 函數進行處理。值得慶幸的是,c# 實體綁定、服務注入等重要功能在靜態 ssr 中依然可以正常使用。這一特性使得靜態 ssr 成為需要 seo(搜尋引擎優化,即通過一系列技術手段提升網站在搜尋引擎中的排名,進而增加網站流量。其核心在於確保網站內容能夠被搜尋引擎有效抓取,從而獲得更多流量)的前台網站的理想選擇。以下是一個靜態 ssr 組件定義(文章詳情基本信息組件 upostcount.raozr):

@inject IOptions<SiteOption>
  SiteOption
  <div class="counts">
    @if (Post?.Lastmod != null) {
    <span>更新于@(Post?.Lastmod?.ToString("yyyy-MM-dd HH:mm:ss"))</span>
    } else {
    <span>创建于@(Post?.Date?.ToString("yyyy-MM-dd HH:mm:ss"))</span>
    }
    <span style="margin:0 5px;">|</span>
    <span class="author"
      >@(string.IsNullOrWhiteSpace(Post?.Author) ? SiteOption.Value.Owner :
      Post!.Author)</span
    >
    @if (ShowEdit) {
    <span style="margin:0 5px;">|</span>
    <a
      href="@ConstantUtil.GetPostGitHubPath(SiteOption.Value.RemoteAssetsRepository, Post)"
      target="_blank"
      >我要编辑、留言</a
    >
    }
  </div>

  @code { [Parameter] public BlogPost Post { get; set; } [Parameter] public bool
  ShowEdit { get; set; } = true; }</SiteOption
>

效果如下:

網站功能說明

首頁

  • 網址:https://dotnet9.com

和大多數網站一樣,先展示網站宣傳語 ”碼坊:使用.net 9 web api + blazor 開發。有技術文章、開源項目居間和在線工具,助力高效編程。“,然後展示特色文章塊,後面會加上特色工具塊(正在開發中),最後是友情連結、頁尾等:

文檔

這裡居間了站長部分開源項目:

  • 網址:https://dotnet9.com/project

下面是部分項目簡介

  1. CodeWF

这是本站的源码仓库,可点击链接查看。

  1. CodeWF.EventBus

它适用于进程内事件传递(无其他外部依赖),功能与 MediatR 类似,可点击链接查看。

  1. CodeWF.EventBus.Socket

CodeWF.EventBus.Socket 是一个轻量级、基于 Socket 的分布式事件总线系统,旨在简化分布式架构中的事件通信。它允许进程之间通过发布 / 订阅模式进行通信,无需依赖外部消息队列服务。可点击链接查看。

  1. CodeWF.NetWeaver

CodeWF.NetWeaver 是一个简洁而强大的 C#库,支持 AOT,用于处理 TCP 和 UDP 数据包的组包和解包操作。可点击链接查看。

  1. CodeWF.Toolbox

CodeWF Toolbox 使用 Avalonia 开发的跨平台工具箱,使用了 Prism 作为模块化开发框架,支持 AOT 发布,可作为 Avalonia 项目学习。可点击链接查看。

  1. CodeWF.Tools

这里收集、分享了常用工具类,可点击链接查看。

  1. Assets.Dotnet9

这是本站的核心数据仓库,可点击链接查看。

博客

  • 網址:https://dotnet9.com/post

博客頁面是標準的技術博客風格樣式,分為左、中、右三欄。左邊欄是文章分類列表,點擊可在中間分頁瀏覽文章列表,右側則是網站統計、站長推薦等內容:

点击列表中的文章可浏览文章详细内容,在此要感谢 VleaStwo (Lee) 大佬提供的 TOC 功能:这个功能使用户能够快速定位文章的重点内容,提高阅读效率。

所有文章您都可以修改

如果文章有錯別字、語病,或有誤導的地方,或您有什麼補充,可點擊頁頭右上角“我要編輯、留言”進行 pr,十分感謝!

最新一个对文章 . NET 跨平台客户端框架 - Avalonia UIPR#4

感谢网友 hjkl950217 (长空 X)

總結

在網站的開發歷程中,站長不斷探索嘗試,學習了大量的教程和開源項目,非常受用、非常感謝提供幫助的朋友和老師。

另外,VleaStwo大佬开了一个 Masa Blazor 分支,欢迎有兴趣的朋友前来 PR 或交流:

最後,貼上相關連結,大家可以了解、交流:

  • 本站源碼(ant design 風格):https://github.com/dotnet9/codewf
  • VleaStwo大佬分支(Masa Blazor 风格):https://github.com/VleaStwo/CodeWF
  • Known:https://known.org.cn
  • Ant Design Blazor:https://antblazor.com/
  • Masa Blazor:https://masastack.com/blazor
Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2024/2/29

winform中也可以這樣做數據展示

在做winform開發的過程中,經常需要做數據展示的功能,之前一直使用的是gridcontrol控制項,今天想通過一個示例,跟大家居間一下如何在winform blazor hybrid中使用ant design blazor中的table組件做數據展示。

继续阅读
同分类 / 同标签 2024/2/29

winform的界面也可以變好看?

前幾天跟大家居間了在winform中使用blazor hybrid,而且還說配上blazor的ui可以讓我們的winform程式設計的更加好看,接下來我想以一個在winform blazor hybrid中繪圖的例子來進行說明,希望對你有所幫助。

继续阅读