一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET性能優化之局部緩存分析

ASP.NET性能優化之局部緩存分析

2019-09-20 14:07asp.net教程網 ASP.NET教程

如果我們在開發網站過程中的緩存策略是不支持頁面局部緩存的,整個架構就是不合理的

在網站的開發過程中,經常碰到的一類需求場景是: 

1:頁面含熱點新聞,熱點新聞部分需要10分鐘更新一次,而整個頁面的其它部分1天內都不會變動; 

2:首頁的某個BANNER需要顯式:歡迎***; 

上面場景中的1,如果整個頁面的緩存失效都定為10分鐘,則勢必增加性能開銷,所以最好的策略是頁面的不同部分采用不同的緩存失效時長。對于場景2也一樣,我們不應該為了遷就某個BANNER不能應用緩存,就讓整個頁面都不支持緩存。 

可以說,如果我們在開發網站過程中的緩存策略是不支持頁面局部緩存的,整個架構就是不合理的。 

一:局部緩存常用解決方案 

針對上面的需求,有幾類解決方案: 

1、Client Side Includes(CSI):通過frame、iframe、 javascript、javacript+ajax等方式將另外一個頁面的內容動態包含進來。像現在流行的jquery等javascript庫對此有較好的支持。 

優點:能夠利用瀏覽器客戶端并行處理及裝載的機制;通過瀏覽器緩存機制可以降低網絡傳輸時間,提高性能;計算放在客戶端,能夠降低服務器端壓力 

缺點:搜索引擎優化問題;javascript兼容性問題;客戶端緩存可能導致服務器端內容更新后不能及時生效;XSS等安全隱患 

2、Server Side Includes(SSI): 

優點:SSI技術是通用技術,不受具體語言限制,只需要Web服務器或應用服務器支持即可,Ngnix、Apache、Tomcat、Jboss等對此都有較好的支持 

缺點:SSI在語法上不能夠直接包含其他服務器的url(當然也可以通過redirect等來變通實現),因此在需要充分利用緩存及負載均衡的環境下相對不是很靈活。 

當然如果不使用單獨的緩存服務器,而是使用Ngnix,利用Ngnix對SSI及Memcached支持,通過NginxHttpSsiModule、 NginxHttpMemcachedModule也可以實現頁面緩存,但與專業的緩存服務器(例如Varnish)相比較,Ngnix作為緩存服務器只適合于中小規模的場合。 

3、使用ASP.NET的片段緩存 

可以利用用戶控件將頁面分段,在ascx文件中寫入緩存的語句,而不在aspx文件中寫緩存語句,這樣ASP.NET就可以只緩存ascx片斷的輸出了。 

缺點:片段緩存不支持Location特性;緩存頁面片段惟一合法的地方是web服務器。這是因為片段緩存在ASP.NET中是新的功能,所以瀏覽器和代理服務器不支持。由于它不是W3C標準,像SQUID和VARNISH這樣的代理服務器也不支持它。 

4、Edge Side Includes (ESI): 

Edge Side Includes(ESI) 和Server Side Includes(SSI) 和功能類似。SSI需要特殊的文件后綴(shtml,inc)。ESI可以直接通過URI包含遠程服務器文件,ESI更適合用于緩存服務器上,緩存整個頁面或頁面片段,因此ESI特別適合用于緩存。本文要介紹的就是ESI的方式來支持局部緩存。 

優點:ESI是一個W3C標準,被當下流行的緩存服務器SQUID,Varnish支持。 

二:ESI的ASP.NET實現 

本文所要闡述的是ESI局部緩存的實現。主頁面(test1.aspx)前臺: 

復制代碼代碼如下:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test1.aspx.cs" Inherits="WebApplication2.aspx.test1" %> 
<%@ Import Namespace="System.Globalization" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<div>這里是局部緩存</div> 
<esi:include src="test2.aspx"/> 
<div>局部緩存結束</div> 
<%=DateTime.Now.ToString("U", DateTimeFormatInfo.InvariantInfo)%> 
</body> 
</html> 


主頁面的后臺請參看上篇,對主頁面采取了緩存策略,即在頁面中使用esi:include標識。 
被包含的頁面(test2.aspx)的前臺: 

復制代碼代碼如下:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test2.aspx.cs" Inherits="WebApplication2.aspx.test2" %> 
<%@ Import Namespace="System.Globalization" %> 
<div> 
局部緩存中的頁面: 
<%=DateTime.Now.ToString("U", DateTimeFormatInfo.InvariantInfo)%> 
</div> 


被包含的頁面的后臺什么也不需要處理,也就是不為它加入任何緩存策略,該頁面是實時的。 
VARNISH配置文件如下: 

復制代碼代碼如下:


backend default { 
.host = "192.168.0.77"; 
.port = "80"; 

sub vcl_fetch { 
remove beresp.http.Set-Cookie; 
if(req.url ~ "test1.aspx") { 
esi; 

if(req.url ~ "test2.aspx"){ 
return (pass); 


sub vcl_recv { 
remove req.http.Cookie; 
#remove req.http.Accept-Encoding; 
#remove req.http.Vary; 

sub vcl_hit { 
if(req.http.Cache-Control~"no-cache"||req.http.Cache-Control~"max-age=0"||req.http.Pragma~"no-cache"){ 
set obj.ttl=0s; 
return (restart); 

return (deliver); 

sub vcl_deliver { 
if (obj.hits > 0) { 
set resp.http.X-Cache = "HIT"; 
} else { 
set resp.http.X-Cache = "MISS"; 


上文的vcl_fetch函數中加了兩個判斷,指的是:如果碰到test1.aspx就處理esi標識,如果碰到test2.aspx,就直接忽略讓后臺IIS處理。 
值得注意的是,啟動命令中加入了-p選項(這是一個varnish的小問題,請查閱參考,此處不表): 
varnishd -a :8011 -T :8088 -f c:/varnish/etc/default.vcl -p esi_syntax=0x1 -s file,c:/varnish/var/cache,100M 
三:效果 
啟動varnish后,我們發現,對于test2.aspx,由于我們使用了esi對其進行了包含,而test2.aspx又未進行緩存,所以在test1.aspx的緩存有效期內,隨著每一次刷新,test1.aspx的內容沒有變動,但是所包含的test2.aspx區域,會實時刷新。 
參考(第一小節大部分來自參考文字): 
https://www.varnish-cache.org/trac/ticket/352

http://cd34.com/blog/infrastructure/no-esi-processing-first-char-not/

http://hi.baidu.com/chuanliang2007/blog/item/075f67963e20f315d31b7035.html

http://www.w3.org/TR/esi-lang

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 911精品国产亚洲日本美国韩国 | 91国内精品久久久久影院优播 | 国产探花视频在线观看 | 日本无吗免费一二区 | 欧美高清无砖专区欧美精品 | 啪啪免费入口网站 | 五月激情丁香婷婷综合第九 | 无套白浆 | 校花小雪灌满了男人们的浓浆 | 99久久精品免费观看区一 | 非洲黑人xxxxxbbbbb | 性绞姿始动作动态图 | 日韩一区视频在线 | 狠狠撸在线播放 | 免费真实播放国产乱子伦 | 亚洲国产区 | 成人观看免费大片在线观看 | 女老板用丝袜脚夹我好爽 | 四虎永久网址影院 | 欧美s级人做人爱c视频 | 国产一区二区三区丶四区 | 国产福利在线观看91精品 | 日韩欧美一区二区三区中文精品 | 胸大的姑娘中文字幕视频 | 久久艹影院 | 日韩在线观看一区二区不卡视频 | 韩日视频在线观看 | 黑人与老女人做受 | 91国内在线国内在线播放 | 亚洲国产天堂 | 天天综合天天综合色在线 | 免费看国产精品麻豆 | 亚洲第一天堂无码专区 | 成人a级特黄毛片 | 国产精品极品美女自在线 | 欧美精品亚洲精品日韩1818 | 免费在线公开视频 | 天天干夜夜玩 | 美女扒开腿让男生桶爽漫画 | 草莓视频在线观看免费 | 精品一久久香蕉国产二月 |