aspnet core 實作簡單的僞靜态化
aspnetcore 實作簡單的僞靜态化
Intro
在我的活動室預約項目中,有一個公告子產品,類似于新聞釋出,個人感覺像新聞這種網頁基本就是釋出的時候編輯一次之後就再也不會改了,最适合靜态化了, 靜态化之後使用者請求的就是靜态檔案基本不再需要伺服器端查詢資料庫甚至伺服器端渲染,可以一定程度上提升伺服器的處理能力以及優化使用者體驗,而且這種靜态化的url對 SEO 比較友好。
由于我的這個項目正在開發中,遷移起來不太友善,是以使用的是僞靜态化,看上去是通路的 *.html,實際上并不是 html,而是需要伺服器處理的。
GetStarted
配置路由資訊,注意順序,僞靜态的路由要在預設路由之前
app.UseMvc(routes =>
{
routes.MapRoute("Notice", "/Notice/{path}.html", new
{
controller = "Home",
action = "NoticeDetails"
});
routes.MapRoute(name: "areaRoute",
template: "{area:exists}/{controller=Home}/{action=Index}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}");
});
控制器代碼:
/// <summary>
/// 公告詳情
/// </summary>
/// <param name="path">通路路徑</param>
/// <returns></returns>
public async Task<ActionResult> NoticeDetails(string path)
{
if (string.IsNullOrWhiteSpace(path))
{
return RedirectToAction("Notice");
}
try
{
var noticeBll = HttpContext.RequestServices.GetService<IBLLNotice>();
var notice = await noticeBll.FetchAsync(n => n.NoticeCustomPath == path.Trim());
if (notice != null)
{
notice.NoticeVisitCount += 1;
await noticeBll.UpdateAsync(notice, x => x.NoticeVisitCount);
return View(notice);
}
else
{
return RedirectToAction("Notice");
}
}
catch (Exception ex)
{
Logger.Error(ex);
throw;
}
}
實際效果:
https://reservation.weihanli.xyz/Notice/test-notice.html

Q&A
Q:為什麼我們要做(僞)靜态化?
A:站點下的 *.html 檔案有利于網站的 SEO 優化,有利于百度和google爬蟲爬你的網站,SEO做的好有利于提高搜尋排名【SEO的水也很深、感興趣的可以自己找資料研究】。
Q:什麼是僞靜态化?什麼是完全靜态化?他們的差別是什麼?
A:僞靜态化是針對完全靜态化來說的,(完全)靜态化是會實際儲存内容到一個 *.html 檔案中,而僞靜态化則是通過伺服器端技術通過比對 url 符合一定的模式就重新交給指定的程式處理并傳回内容。
簡單來說,(完全)靜态化會有一個實際存在的靜态檔案,僞靜态化則不存在,需要較多伺服器端的處理。
Q:僞靜态化和完全靜态化哪個好?
A:這個問題更好的問法應該是這樣的:“什麼時候适合用僞靜态化?什麼時候适合用完全靜态化?”,一個事物既然存在就必然有它存在的道理,存在即合理,如果沒有存在的意義必将死去。
完全靜态化一般會根據一個模闆生成一個實際存在的 *.html 檔案,完全靜态化不需要太多的伺服器端處理,用戶端請求這個檔案時因為是一個靜态檔案伺服器會直接将檔案内容傳回給用戶端,不需要額外的伺服器處理。
完全靜态化會減少伺服器的壓力。
僞靜态化伺服器上并沒有靜态 *.html檔案,隻是在伺服器斷使用了Rewrite,将動态URL進行重寫,使動态URL表現為靜态URL,以滿足網頁URL靜态需求但網頁依然為動态調用的,,是需要很多伺服器端處理的,比如url的模式比對,從資料庫中查詢資料。
總結:雖然完全靜态化URL的網頁有打開速度快的優點,但是網站内容巨大的話,勢必會使網站的體積變大很多,會有很多的靜态化檔案,網站遷移的話很麻煩,另一方面如果網站内容很多的時候修改模闆的話,再次靜态化的時候會是一個比較大的工作量。實際使用的話還是需要根據自己實際需要來選取。
Reference
- https://github.com/WeihanLi/ActivityReservation/blob/dev/ActivityReservation
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。