成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.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)前臺:

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

  主頁面的后臺請參看上篇,對主頁面采取了緩存策略,即在頁面中使用esi:include標識。

  被包含的頁面(test2.aspx)的前臺:

  1.   <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test2.aspx.cs" Inherits="WebApplication2.aspx.test2" %> 
  2.  <%@ Import Namespace="System.Globalization" %> 
  3.   <div> 

  局部緩存中的頁面:

 

  1.   <%=DateTime.Now.ToString("U", DateTimeFormatInfo.InvariantInfo)%> 
  2.   </div> 

 

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

  VARNISH配置文件如下:

  1.   backend default {  
  2.   .host = "192.168.0.77";  
  3.   .port = "80";  
  4.   }  
  5.   sub vcl_fetch {  
  6.   remove beresp.http.Set-Cookie;  
  7.   if(req.url ~ "test1.aspx") {  
  8.   esi;  
  9.   }  
  10.   if(req.url ~ "test2.aspx"){  
  11.   return (pass);  
  12.   }  
  13.   }  
  14.   sub vcl_recv {  
  15.   remove req.http.Cookie;  
  16.   #remove req.http.Accept-Encoding;  
  17.   #remove req.http.Vary;  
  18.   }  
  19.   sub vcl_hit {  
  20.   if(req.http.Cache-Control~"no-cache"||req.http.Cache-Control~"max-age=0"||req.http.Pragma~"no-cache"){  
  21.   set obj.ttl=0s;  
  22.   return (restart);  
  23.   }  
  24.   return (deliver);  
  25.   }  
  26.   sub vcl_deliver {  
  27.   if (obj.hits >0) {  
  28.   set resp.http.X-Cache = "HIT";  
  29.   } else {  
  30.   set resp.http.X-Cache = "MISS";  
  31.   }  
  32.   } 

  上文的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區域,會實時刷新。

  參考(***小節大部分來自參考文字):

原文:http://www.cnblogs.com/luminji/archive/2011/10/19/2181531.html

【編輯推薦】

  1. ASP.NET MVC會成為ASP.NET未來主流的UI平臺?
  2. ASP.NET性能優化之構建自定義文件緩存
  3. 想愛容易相處難:當ASP.NET MVC愛上IoC
  4. 導致ASP.NET站點重啟的十大原因
  5. 淺談ASP.NET核心對象
責任編輯:彭凡 來源: 博客園
相關推薦

2011-10-17 09:54:18

ASP.NET性能

2009-08-13 16:22:18

ASP.NET性能優化

2012-05-16 10:24:26

ASP.NET性能優化

2009-08-13 15:49:18

ASP.NET性能優化

2011-09-08 13:56:41

ASP.NET性能

2024-06-11 09:00:00

異步編程代碼

2009-08-03 18:47:12

ASP.NET數據緩存

2011-02-13 09:37:55

ASP.NET

2009-02-23 15:55:29

ASP.NET.NET性能提升

2011-02-22 09:16:24

高性能ASP.NET

2009-07-29 15:38:01

2009-07-31 10:23:44

緩存頁面ASP.NET緩存

2009-07-28 17:17:19

ASP.NET概述

2011-07-06 08:46:30

2021-05-19 08:04:11

ASP.Net服務性原則

2011-02-17 09:13:57

ASP.NET

2011-06-28 15:14:10

ASP.NET性能優化

2018-02-23 13:55:16

ASP.NET性能優化技巧

2024-12-05 08:14:41

2009-07-31 10:33:54

ASP.NET頁面輸出
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美色偷拍 | 日日夜夜操天天干 | 性视频网| 精品无码久久久久国产 | 97超碰在线播放 | 免费成人在线网站 | 亚洲精品视频观看 | 激情毛片 | 国产成人午夜电影网 | 成人国产精品入口免费视频 | 美女黄色在线观看 | 欧美日韩在线免费观看 | 亚洲精品久久久久久下一站 | 一区二区三区欧美 | 亚洲成人一二三 | 国产精品久久久久久久免费大片 | 亚洲精品一区在线观看 | 男女免费观看在线爽爽爽视频 | 日韩免费视频 | 国产a视频| 久久久久久久香蕉 | 亚洲美女一区二区三区 | 欧美日韩成人影院 | 亚洲成人精品一区 | 国产午夜精品久久久 | 日日爱av | 国产精品久久国产精品 | 97久久久 | 999久久久 | 欧美激情综合五月色丁香小说 | 欧美一级电影免费 | 久久久国产一区二区三区四区小说 | 久热精品在线播放 | 亚洲精品电影网在线观看 | 国产在线视频一区二区董小宛性色 | 成人免费在线视频 | 青青操91 | 91国产视频在线观看 | 欧美日韩国产一区二区 | 免费激情网站 | www.久久精品 |