您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)aspnetcore如何實現(xiàn)簡單的偽靜態(tài)化功能,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Intro
在我的活動室預約項目中,有一個公告模塊,類似于新聞發(fā)布,個人感覺像新聞這種網(wǎng)頁基本就是發(fā)布的時候編輯一次之后就再也不會改了,最適合靜態(tài)化了, 靜態(tài)化之后用戶請求的就是靜態(tài)文件基本不再需要服務器端查詢數(shù)據(jù)庫甚至服務器端渲染,可以一定程度上提升服務器的處理能力以及優(yōu)化用戶體驗,而且這種靜態(tài)化的url對 SEO 比較友好。
由于我的這個項目正在開發(fā)中,遷移起來不太方便,所以使用的是偽靜態(tài)化,看上去是訪問的 *.html,實際上并不是 html,而是需要服務器處理的。
GetStarted
配置路由信息,注意順序,偽靜態(tài)的路由要在默認路由之前
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; } }
Q&A
Q:為什么我們要做(偽)靜態(tài)化?
A:站點下的 *.html 文件有利于網(wǎng)站的 SEO 優(yōu)化,有利于百度和google爬蟲爬你的網(wǎng)站,SEO做的好有利于提高搜索排名【SEO的水也很深、感興趣的可以自己找資料研究】。
Q:什么是偽靜態(tài)化?什么是完全靜態(tài)化?他們的區(qū)別是什么?
A:偽靜態(tài)化是針對完全靜態(tài)化來說的,(完全)靜態(tài)化是會實際保存內(nèi)容到一個 *.html 文件中,而偽靜態(tài)化則是通過服務器端技術(shù)通過匹配 url 符合一定的模式就重新交給指定的程序處理并返回內(nèi)容。
簡單來說,(完全)靜態(tài)化會有一個實際存在的靜態(tài)文件,偽靜態(tài)化則不存在,需要較多服務器端的處理。
Q:偽靜態(tài)化和完全靜態(tài)化哪個好?
A:這個問題更好的問法應該是這樣的:“什么時候適合用偽靜態(tài)化?什么時候適合用完全靜態(tài)化?”,一個事物既然存在就必然有它存在的道理,存在即合理,如果沒有存在的意義必將死去。
完全靜態(tài)化一般會根據(jù)一個模板生成一個實際存在的 *.html 文件,完全靜態(tài)化不需要太多的服務器端處理,客戶端請求這個文件時因為是一個靜態(tài)文件服務器會直接將文件內(nèi)容返回給客戶端,不需要額外的服務器處理。
完全靜態(tài)化會減少服務器的壓力。
偽靜態(tài)化服務器上并沒有靜態(tài) *.html文件,只是在服務器斷使用了Rewrite,將動態(tài)URL進行重寫,使動態(tài)URL表現(xiàn)為靜態(tài)URL,以滿足網(wǎng)頁URL靜態(tài)需求但網(wǎng)頁依然為動態(tài)調(diào)用的,,是需要很多服務器端處理的,比如url的模式匹配,從數(shù)據(jù)庫中查詢數(shù)據(jù)。
總結(jié):雖然完全靜態(tài)化URL的網(wǎng)頁有打開速度快的優(yōu)點,但是網(wǎng)站內(nèi)容巨大的話,勢必會使網(wǎng)站的體積變大很多,會有很多的靜態(tài)化文件,網(wǎng)站遷移的話很麻煩,另一方面如果網(wǎng)站內(nèi)容很多的時候修改模板的話,再次靜態(tài)化的時候會是一個比較大的工作量。實際使用的話還是需要根據(jù)自己實際需要來選取。
Reference
? https://github.com/WeihanLi/ActivityReservation/blob/dev/ActivityReservation
關(guān)于“aspnetcore如何實現(xiàn)簡單的偽靜態(tài)化功能”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。