<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_学而实习之的无限循环</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/23113/rss</id><updated>2011-05-19T09:47:26Z</updated><author><name>taewind</name><uri>http://www.cnblogs.com/taewind/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/taewind/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/23113/rss"/><entry><id>http://www.cnblogs.com/taewind/archive/2011/05/19/2051316.html</id><title type="text">通过SQL Server的位运算功能巧妙解决多选查询</title><summary type="text">通过SQL Server的位运算功能巧妙解决多选查询</summary><published>2011-05-19T09:47:00Z</published><updated>2011-05-19T09:47:00Z</updated><author><name>taewind</name><uri>http://www.cnblogs.com/taewind/</uri></author><link rel="alternate" href="http://www.cnblogs.com/taewind/archive/2011/05/19/2051316.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/taewind/archive/2011/05/19/2051316.html"/><content type="html">&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 宋体"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;项目中很多业务对象的数据表中都具有&lt;/span&gt;Status&lt;span style="font-family: 宋体"&gt;字段，有人使用&lt;/span&gt;int&lt;span style="font-family: 宋体"&gt;型保存Status，有人使用&lt;/span&gt;varchar&lt;span style="font-family: 宋体"&gt;型。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 宋体"&gt;无论使用&lt;/span&gt;int&lt;span style="font-family: 宋体"&gt;还是&lt;/span&gt;varchar&lt;span style="font-family: 宋体"&gt;，对于&lt;/span&gt;Status&lt;span style="font-family: 宋体"&gt;的多选查询都是不易应对的。举例，常规思维下对&lt;/span&gt;CustomerStatus&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;Enum&lt;span style="font-family: 宋体"&gt;设置如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 新宋体"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;nbsp;[&lt;span style="color: #2b91af"&gt;Serializable&lt;/span&gt;]&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CustomerStatus&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;{&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;New = 0,&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;Active = 1,&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;Overdue = 2,&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;Suspended = 3,&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;Closing = 4,&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;Closed = 5&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;}&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 宋体"&gt;在数据库中以&lt;/span&gt;int&lt;span style="font-family: 宋体"&gt;形式存储了&lt;/span&gt;Status&lt;span style="font-family: 宋体"&gt;值。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 宋体"&gt;如果我在&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;页面中想一次搜索状态为&lt;/span&gt;Active&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;Overdue&lt;span style="font-family: 宋体"&gt;和&lt;/span&gt;Suspended&lt;span style="font-family: 宋体"&gt;状态的&lt;/span&gt;Customer&lt;span style="font-family: 宋体"&gt;，该怎么办？程序是不是得把这三个状态值&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 宋体"&gt;拼成字符串传递给&lt;/span&gt;SQL&lt;span style="font-family: 宋体"&gt;去处理？虽然能实现，但是相当低效。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 宋体"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 宋体"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: 宋体"&gt;现在给出一个标准解决方案：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;(1). 所有&lt;span style="font-family: 宋体"&gt;&lt;font face="Verdana"&gt;可能被用作搜索条件&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;的枚举都应按如下位运算方式定义。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CustomerStatus&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;{&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;New = 1,&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;Active = 1&amp;lt;&amp;lt;1,&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;Overdue = 1&amp;lt;&amp;lt;2,&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;Suspended = 1&amp;lt;&amp;lt;3,&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;Closing = 1&amp;lt;&amp;lt;4,&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt 0.5in"&gt;Closed = 1&amp;lt;&amp;lt;5&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;}&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;(2). &lt;span style="font-family: 宋体"&gt;在数据库设计时，&lt;/span&gt;Status&lt;span style="font-family: 宋体"&gt;的字段必须为&lt;/span&gt;int&lt;span style="font-family: 宋体"&gt;型。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 宋体"&gt;这样当我们做多选查询时&lt;/span&gt;@Status&lt;span style="font-family: 宋体"&gt;的&lt;/span&gt;&lt;span style="color: black"&gt;Value= CustomerStatus.Active | CustomerStatus.&lt;/span&gt; Overdue|&lt;span style="color: black"&gt; CustomerStatus.&lt;/span&gt; Suspended&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;(3). &lt;span style="font-family: 宋体"&gt;查询语句如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 'Courier New'; color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt"&gt; &lt;span style="color: gray"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 'Courier New'; color: blue; font-size: 10pt"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;From&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt"&gt; Customer&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 'Courier New'; color: blue; font-size: 10pt"&gt;Where&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt"&gt; [Status] &lt;span style="color: gray"&gt;&amp;amp;&lt;/span&gt; @Status &lt;span style="color: gray"&gt;=&lt;/span&gt; [Status]&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;如果&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt"&gt;@Status&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;可为&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt"&gt;null&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;时，&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 'Courier New'; color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt"&gt; &lt;span style="color: gray"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 'Courier New'; color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt"&gt; Customer&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 'Courier New'; color: blue; font-size: 10pt"&gt;Where &lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt"&gt; @Status &lt;span style="color: gray"&gt;is&lt;/span&gt; &lt;span style="color: gray"&gt;null&lt;/span&gt; &lt;span style="color: gray"&gt;Or&lt;/span&gt; [Status] &lt;span style="color: gray"&gt;&amp;amp;&lt;/span&gt; @Status &lt;span style="color: gray"&gt;=&lt;/span&gt; [Status]&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24pt; margin: 0in 0in 0pt"&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt"&gt;&lt;span style="font-size: 12pt"&gt;用这样一条简单的语句，就可以获取到所有符合@Status要求的数据行。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in 0in 0pt"&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/taewind/aggbug/2051316.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/taewind/archive/2011/05/19/2051316.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/taewind/archive/2011/05/15/1663809.html</id><title type="text">IIS的内容缓存过期机制实践——有效提高站点性能</title><summary type="text">本文的目的就是阐释浏览器本地缓存与Web服务器缓存过期机制之间的交互关系，以及如何通过这种方式达到对性能的提升。根据《高性能网站建设指南》一书中的统计，从浏览器向一个网页发出请求算起，获得网页的HTML文档的时间只占整个页面应答完成时间的5%，而剩余的95%时间全部是在请求和下载页面中的各个组件。因此减少对页面中组件的请求和下载，有效地利用浏览器缓存机制是十分有意义的。</summary><published>2011-05-15T02:20:00Z</published><updated>2011-05-15T02:20:00Z</updated><author><name>taewind</name><uri>http://www.cnblogs.com/taewind/</uri></author><link rel="alternate" href="http://www.cnblogs.com/taewind/archive/2011/05/15/1663809.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/taewind/archive/2011/05/15/1663809.html"/><content type="html">&lt;p&gt;目前，随着网页内容越来越绚烂，访问速度却令人越来越不满。实践证明，正确设置Http Response Header中的Expires头将有助于提高网页访问速度。&lt;/p&gt;&#xD;
&lt;p&gt;我们的网站中往往包含大量的页面组件，比如图片、样式表文件、JS脚本文件和Flash动画。这些组件的变化频率非常低，尤其是那些构成网站基本框架的组件，&lt;/p&gt;&#xD;
&lt;p&gt;几乎不会发生变化。我们可以将这些变化率很低的组件看作静态内容，利用IIS的内容过期机制和浏览器的本地缓存机制将它们在访问者的电脑硬盘中保存一段时间。&lt;/p&gt;&#xD;
&lt;p&gt;当访问者访问你的网站时，如果这些存在本地的静态内容没有过期，浏览器会从本地硬盘中装载，而不去向服务器发出请求。&lt;/p&gt;&#xD;
&lt;p&gt;如果你使用Fiddler这样的工具跟踪网页访问，你会清楚地看到虽然只是访问一个页面，但是发出的Http请求和应答却不止一个。网页中的每张图片，每个&lt;/p&gt;&#xD;
&lt;p&gt;JS脚本文件，每个CSS文件，都会引发一次请求和应答。因此如果想让网页的访问速度快起来，减少Http的请求数量，降低从服务器下载内容的次数是有效途径。&lt;/p&gt;&#xD;
&lt;p&gt;而使用了内容过期机制后可以就实现这样的目的，这就是使用内容过期机制的意义。&lt;/p&gt;&#xD;
&lt;p&gt;大多数的Web开发者都玩过IIS 6或IIS 7，但是又有多少人仔细观察过HTTP Headers或HTTP Response Headers标签中的内容呢？此处我以IIS 6 为例，&lt;/p&gt;&#xD;
&lt;p&gt;默认情况下此标签中的界面如下图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/taewind/HttpHeaders.jpg" width="719" height="450" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;此时，如果向该网站的一个网页发出请求，该网页中包含了一张图片的链接，那么在获取到该网页的HTML文档之后，浏览器会继续对这张图片发出请求，该请求的响应在Http Response Header中如下表达：&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;HTTP/1.1 200 ok （表示服务器找到了此图片并正确响应）&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Date:Thu, 04 Feb 2010 08:25:38 GMT （响应的时间，格林尼治时间）&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Last-Modified:Wed, 03 Jan 2009 01:55:06 GMT（图片最后被修改的时间，格林尼治时间）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这张图片会被浏览器保存在本地硬盘的IE临时文件夹中。使用同一个浏览器窗口在同一个会话中再次访问到这个页面，&lt;/p&gt;&#xD;
&lt;p&gt;则页面中的组件都不再重新请求。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当在这台机器上打开另一个浏览器窗口（另一个会话）又一次访问此页面时，由于这张图已经在本地保存了，但是浏览器&lt;/p&gt;&#xD;
&lt;p&gt;刚才的响应中并没有规定内容的过期机制，因此浏览器仍会向服务器发出一次请求：&lt;/p&gt;&#xD;
&lt;p&gt;If-Modified-Since:&amp;nbsp; Wed, 03 Jan 2009 01:55:06 GMT （询问服务器，我本地这张图片的最后修改时间是这个，在此时间之后你那有没有更新的版本？）&lt;/p&gt;&#xD;
&lt;p&gt;If-None-Matched: "abdkfkdkdkdjkjkfkfd" （这是一段ETag编码，是服务器端给该组件的唯一标示）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;服务器收到请求后检查被请求的图片，发现它的最近修改时间还是Wed, 03 Jan 2009 01:55:06 GMT ，于是响应请求：&lt;/p&gt;&#xD;
&lt;p&gt;HTTP/1.1 304 Not Modified&amp;nbsp; （请求的图片找到了，并且没有被改变过）&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Date:Thu, 04 Feb 2010 08:25:38 GMT （响应的时间）&lt;/p&gt;&#xD;
&lt;p&gt;浏览器收到这个响应就知道它可以放心地使用本地存储的这张图片了，不必再从服务器重新下载该组件。&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;由此可见，IIS Http Headers标签的默认设置是不禁止浏览器缓存的，但是也没有告诉组件保存过期的时间，因此浏览器将组件保存在本地后，&lt;/p&gt;&#xD;
&lt;p&gt;每次访问都会询问服务器此组件是否过期，如果没过期则使用本地保存的内容，否则从服务器下载内容。 可以看出它只减少了从服务器下载内容的次数，&lt;/p&gt;&#xD;
&lt;p&gt;并没有减少向服务器发出请求的次数，请求和响应依然耗费了时间。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在IIS中定位到网站存放图片的文件夹，然后打开属性窗口，在HTTP Headers中做出如下选择，要求组件的过期时间为本次请求后1天，也就是在本地缓存86400秒。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/taewind/expire1day.jpg" width="472" height="440" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;打开浏览器，首次访问该网站的一个网页，该网页中包含一张图片的链接，于是该图片请求的响应在Http Response Header中如下表达：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;HTTP/1.1 200 OK&amp;nbsp; （表示服务器找到了此图片并正确响应）&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&lt;strong&gt;Cache-Control: max-age=86400&lt;/strong&gt;&amp;nbsp; （从本次请求时间算起，允许该图片在本地缓存86400秒）&lt;/p&gt;&#xD;
&lt;p&gt;Date: Sat, 14 May 2011 08:09:29 GMT （响应的时间，格林尼治时间）&lt;br /&gt;&amp;nbsp;于是，只要是在1天之内，使用本机的浏览器打开这个网页，都不会再对这张图片发出请求，而是直接使用本地缓存中的这张图片。可见，减少了不必要的HTTP请求，&lt;/p&gt;&#xD;
&lt;p&gt;提高了网页的响应速度。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;很多网站框架性的组件都是长期不变的，因此我们可以设置更长的过期时间，如下所示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/taewind/expires.jpg" width="472" height="440" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;打开浏览器，首次访问该网站的一个网页，该网页中包含一张图片的链接，于是该图片请求的响应在Http Response Header中如下表达： &lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Verdana"&gt;HTTP/1.1 200 OK&amp;nbsp; （表示服务器找到了此图片并正确响应）&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Date: Sat, 14 May 2011 08:50:12 GMT（响应的时间，格林尼治时间）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Expires: Mon, 23 May 2011 16:00:00 GMT&lt;/strong&gt; (该图片的本地缓存到2011年5月23日16点为止，格林尼治时间)&lt;/p&gt;&#xD;
&lt;p&gt;那么这意味着只要在5月23日16点之前，在本机上访问该网页，都不会再对此图片发出请求。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;有人担心如果这样设置过期机制，一旦对这些组件做了更新，访问者将不能收到变化，那岂不是也很遗憾。其实这有两方面的解决方式：&lt;/p&gt;&#xD;
&lt;p&gt;一方面是网站的开发方，应该对图片，样式表文件和JS文件的命名方式进行改进，比如在文件名上加入版本号，这样你一旦修改了组件内容，&lt;/p&gt;&#xD;
&lt;p&gt;就应该使组件拥有新的名称，于是浏览器会发现本地没有对这个组件缓存过，自然就会发起请求。&lt;/p&gt;&#xD;
&lt;p&gt;另一方面，访问者可以通过浏览器的刷新功能强制对网页中的组件重新发起请求。即使设置了过期机制，浏览器的刷新功能仍然会对所有页面组件&lt;/p&gt;&#xD;
&lt;p&gt;发出请求的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;总结，本文的目的就是阐释浏览器本地缓存与Web服务器缓存过期机制之间的交互关系，以及如何通过这种方式达到对性能的提升。&lt;/p&gt;&#xD;
&lt;p&gt;根据《高性能网站建设指南》一书中的统计，从浏览器向一个网页发出请求算起，获得网页的HTML文档的时间只占整个页面应答完成时间的&lt;/p&gt;&#xD;
&lt;p&gt;5%，而剩余的95%时间全部是在请求和下载页面中的各个组件。因此减少对页面中组件的请求和下载，有效地利用浏览器缓存机制是十分有意义的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/taewind/aggbug/1663809.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/taewind/archive/2011/05/15/1663809.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/taewind/archive/2007/03/24/686428.html</id><title type="text">.Net程序集的要点</title><summary type="text"/><published>2007-03-24T07:23:00Z</published><updated>2007-03-24T07:23:00Z</updated><author><name>taewind</name><uri>http://www.cnblogs.com/taewind/</uri></author><link rel="alternate" href="http://www.cnblogs.com/taewind/archive/2007/03/24/686428.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/taewind/archive/2007/03/24/686428.html"/></entry><entry><id>http://www.cnblogs.com/taewind/archive/2006/12/22/600687.html</id><title type="text">Asp.Net2.0中实现多任务异步页的一点提示</title><summary type="text"/><published>2006-12-22T10:08:00Z</published><updated>2006-12-22T10:08:00Z</updated><author><name>taewind</name><uri>http://www.cnblogs.com/taewind/</uri></author><link rel="alternate" href="http://www.cnblogs.com/taewind/archive/2006/12/22/600687.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/taewind/archive/2006/12/22/600687.html"/></entry><entry><id>http://www.cnblogs.com/taewind/archive/2006/12/12/589131.html</id><title type="text">使用Gridview和ObjectDataSource轻松实现自定义分页</title><summary type="text">这是一个使用GridView和ObjectDataSource实现自定义分页的完整解决方案。</summary><published>2006-12-12T09:19:00Z</published><updated>2006-12-12T09:19:00Z</updated><author><name>taewind</name><uri>http://www.cnblogs.com/taewind/</uri></author><link rel="alternate" href="http://www.cnblogs.com/taewind/archive/2006/12/12/589131.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/taewind/archive/2006/12/12/589131.html"/></entry><entry><id>http://www.cnblogs.com/taewind/archive/2006/11/27/574170.html</id><title type="text">解析Asp.net中资源本地化的实现</title><summary type="text">本文将从Asp.net实现资源全球化和本地化的基本概念入手，阐述在Asp.net1.1和Asp.net2.0中实现全球化和本地化的步骤、方法。&#xD;希望给予刚刚接触这方面的朋友一点经验和技巧。</summary><published>2006-11-27T09:55:00Z</published><updated>2006-11-27T09:55:00Z</updated><author><name>taewind</name><uri>http://www.cnblogs.com/taewind/</uri></author><link rel="alternate" href="http://www.cnblogs.com/taewind/archive/2006/11/27/574170.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/taewind/archive/2006/11/27/574170.html"/></entry></feed>
