濮阳杆衣贸易有限公司

主頁 > 知識庫 > ASP.NET性能優(yōu)化之局部緩存分析

ASP.NET性能優(yōu)化之局部緩存分析

熱門標簽:云南外呼電銷機器人系統(tǒng) 浙江外呼系統(tǒng)怎么安裝 銅川小型外呼系統(tǒng)運營商 海外地圖標注門市標 廈門商鋪地圖標注 地圖標注多個行程 上海楊浦怎么申請申請400電話 陜西人工外呼系統(tǒng)哪家好 山西防封卡電銷卡套餐
在網站的開發(fā)過程中,經常碰到的一類需求場景是:

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

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

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

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

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

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

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

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

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

2、Server Side Includes(SSI):

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

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

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

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的方式來支持局部緩存。

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

二:ESI的ASP.NET實現(xiàn)

本文所要闡述的是ESI局部緩存的實現(xiàn)。主頁面(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函數(shù)中加了兩個判斷,指的是:如果碰到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后,我們發(fā)現(xiàn),對于test2.aspx,由于我們使用了esi對其進行了包含,而test2.aspx又未進行緩存,所以在test1.aspx的緩存有效期內,隨著每一次刷新,test1.aspx的內容沒有變動,但是所包含的test2.aspx區(qū)域,會實時刷新。
參考(第一小節(jié)大部分來自參考文字):
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

您可能感興趣的文章:
  • ASP.NET 性能優(yōu)化之反向代理緩存使用介紹
  • ASP.NET性能優(yōu)化之讓瀏覽器緩存動態(tài)網頁的方法
  • ASP.NET性能優(yōu)化之構建自定義文件緩存
  • ASP.NET性能優(yōu)化小結(ASP.NETC#)
  • asp.net 程序性能優(yōu)化的七個方面 (c#(或vb.net)程序改進)
  • ASP.NET比較常用的26個性能優(yōu)化技巧
  • asp.net小談網站性能優(yōu)化
  • ASP.NET性能優(yōu)化之減少請求
  • ASP.NET技巧:同時對多個文件進行大量寫操作對性能優(yōu)化
  • asp.net性能優(yōu)化之使用Redis緩存(入門)

標簽:信陽 西雙版納 萊蕪 常州 許昌 孝感 朔州 自貢

巨人網絡通訊聲明:本文標題《ASP.NET性能優(yōu)化之局部緩存分析》,本文關鍵詞  ASP.NET,性能,優(yōu)化,之,局部,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ASP.NET性能優(yōu)化之局部緩存分析》相關的同類信息!
  • 本頁收集關于ASP.NET性能優(yōu)化之局部緩存分析的相關信息資訊供網民參考!
  • 推薦文章
    平遥县| 邹城市| 盱眙县| 慈利县| 伊宁市| 新闻| 武胜县| 鹤峰县| 准格尔旗| 昌黎县| 贵阳市| 寿光市| 凉山| 都江堰市| 栖霞市| 广东省| 庆阳市| 夏津县| 当雄县| 长岛县| 宜黄县| 永寿县| 达尔| 巍山| 台州市| 闽清县| 阳朔县| 大方县| 新郑市| 乌兰浩特市| 丹阳市| 车致| 平安县| 长宁区| 会宁县| 兴义市| 定结县| 常山县| 习水县| 黄石市| 浠水县|