aspnetcore 實現簡單的僞靜態化

aspnetcore 實現簡單的僞靜態化

Intro

在個人活動室預定項目中,有一個公告模塊,相似於新聞發佈,我的感受像新聞這種網頁基本就是發佈的時候編輯一次以後就不再會改了,最適合靜態化了, 靜態化以後用戶請求的就是靜態文件基本再也不須要服務器端查詢數據庫甚至服務器端渲染,能夠必定程度上提高服務器的處理能力以及優化用戶體驗,並且這種靜態化的url對 SEO 比較友好。html

因爲個人這個項目正在開發中,遷移起來不太方便,因此使用的是僞靜態化,看上去是訪問的 *.html,實際上並非 html,而是須要服務器處理的。git

GetStarted

配置路由信息,注意順序,僞靜態的路由要在默認路由以前github

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.htmlapp

notice details

Q&A

Q:爲何咱們要作(僞)靜態化?async

A:站點下的 *.html 文件有利於網站的 SEO 優化,有利於百度和google爬蟲爬你的網站,SEO作的好有利於提升搜索排名【SEO的水也很深、感興趣的能夠本身找資料研究】。優化

Q:什麼是僞靜態化?什麼是徹底靜態化?他們的區別是什麼?網站

A:僞靜態化是針對徹底靜態化來講的,(徹底)靜態化是會實際保存內容到一個 *.html 文件中,而僞靜態化則是經過服務器端技術經過匹配 url 符合必定的模式就從新交給指定的程序處理並返回內容。google

簡單來講,(徹底)靜態化會有一個實際存在的靜態文件,僞靜態化則不存在,須要較多服務器端的處理。

Q:僞靜態化和徹底靜態化哪一個好?

A:這個問題更好的問法應該是這樣的:「何時適合用僞靜態化?何時適合用徹底靜態化?」,一個事物既然存在就必然有它存在的道理,存在即合理,若是沒有存在的意義必將死去。

徹底靜態化通常會根據一個模板生成一個實際存在的 *.html 文件,徹底靜態化不須要太多的服務器端處理,客戶端請求這個文件時由於是一個靜態文件服務器會直接將文件內容返回給客戶端,不須要額外的服務器處理。
徹底靜態化會減小服務器的壓力。

僞靜態化服務器上並無靜態 *.html文件,只是在服務器斷使用了Rewrite,將動態URL進行重寫,使動態URL表現爲靜態URL,以知足網頁URL靜態需求但網頁依然爲動態調用的,,是須要不少服務器端處理的,好比url的模式匹配,從數據庫中查詢數據。

總結:雖然徹底靜態化URL的網頁有打開速度快的優勢,可是網站內容巨大的話,勢必會使網站的體積變大不少,會有不少的靜態化文件,網站遷移的話很麻煩,另外一方面若是網站內容不少的時候修改模板的話,再次靜態化的時候會是一個比較大的工做量。實際使用的話仍是須要根據本身實際須要來選取。

Reference

相關文章
相關標籤/搜索