aspnetcore 實現簡單的偽靜態化


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

notice details

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM