`
xjk2131650
  • 浏览: 57432 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

如何把Web缓存都充分利用上来?

阅读更多

使用URLs时要确保一致性。浏览器基于URL来缓存资源。当URL改变后,浏览器从源服务器获该资源的新的版本。查询字符串参数的改变也被视为URL的改变。例如,"/default.aspx" 被缓存到浏览器,如果你请求了"/default.aspx?123",浏览器将从服务器获取新的版本。对于这个新URL的响应,如果你返回的是正确的缓存报头,它仍然会被缓存。这样的话,再把查询字符串改成类似于"/default.aspx?456”,那么服务器将又返回一个新的版本。因此,当你想响应得到缓存时,就要确保你在各处使用了一致性的URL。在主页里,如果你请求了一个URL为"/welcome.gif"的文件,那么确保在其他页面里在请求该文件时也使用相同的URL。常见的一个错误是,有时会从URL中省略"www"子域。www.nowamagic.net/default.aspx与nowamagic.net/default.aspx是不同的,两者会被分别的缓存。

静态内容会被缓存得更久。静态内容可以被缓存得更久,例如一个月。  如果你正考虑应该只缓存几天,以便当你修改文件后,用户可以很快获取到新的版本,那么你错了。如果一个文件是通过设置过期报头(expires header)来缓存的,当你更新它时,新的用户可以立即获取到最新的版本,而老的用户只能看到旧的内容直到它在浏览器端过期。因此,只要你正在使用过期报头来缓存静态文件,把值设的越大越好。 例如,你已经通过设置过期报头值为3天来缓存一个文件,一个用户将在今天获取到该文件,并且保存在缓存区里直到三天过后;另一个用户将在明天获取到该文件,并缓存起来直到明天之后的三天。如果你后天改变该文件,第一个用户将在第四天看到它,第二个用户将在第五天看到它。因此,不同的用户将看到该文件的不同版本。结果是,设置一个低值对于保证所有用户在最短时间内得到最新的版本是没有帮助的。你将不得不通过修改文件的URL来确保所有人立即获得完全相同的一个文件。 你可以使用IIS管理器来为静态文件设置过期报头,后面的内容将会介绍如何设置。

使用缓存友好的文件夹结构。把要缓存的内容存储在一个共同的文件夹内。例如,把你网站的所有图片存储在"/static"文件夹内,而不是把图片分别地存储在不同的子文件夹下。这将有助于你在整个网站范围内使用一致性的URL,因为从任何地方你都可以使用"/static/images/ somefile.gif"。稍后,我们将学到,当把静态缓存文件放在一个共同的根文件夹内后,转移到一个内容传送网络将很容易。

重用相同的图形文件。有时我们把相同的图形文件存储于几个不同的虚拟目录下,以便可以书写很短的路径。例如,你有一个indicator.gif文件在根目录,一些子目录和CSS目录里。这样做是因为你不必担心从不同地方访问的路径问题,你只需要使用文件名作为相对URL。这却对缓存没有帮助。文件的每个拷贝都分别地缓存在浏览器端。因此,你应该把工程中所有的图像文件汇集到根目录下的"static"文件夹下,除去重复的,在所有页面和CSS文件里使用相同的URL。

改变文件名来使缓存过期。当你更改一个静态文件的时候,不要仅仅只是更新文件本身,因为它已经在客户端的浏览器缓存了。你需要更改文件名,并且更新所有各处的引用,这样浏览器才会获取到新的版本。你也可以把文件名存储在数据库或者配置文件中,通过数据绑定来动态的生成URL。以这种方式,你可以在一处来改变URL,而使整个站点立即得到更新。

使用版本号来访问静态文件。如果你不想因为要保存同样的文件的不同拷贝而使静态文件夹变得混乱,你可以使用查询字符串来区分同一文件的各个版本。例如,一个GIF文件可以和一个虚拟的查询字符串组合来访问,如"/static/images/indicator.gif?v=1"。当你更改了indicator.gif,你可以覆盖掉原来的文件,然后把所有到这个文件的引用更新为"/static/images/indicator.gif?v=2"。这样你可以重复修改同一文件,然后用新的版本号来更新所有到这个文件的引用。

把可缓存的文件存储在不同的域中。把静态内容存储在不同的域中,总是不失为一个好的办法。首先浏览器可以打开另外的并发连接来下载静态文件。另一个好处是你不需要发送cookies到静态文件。如果你把静态文件和你的web应用放在同一域中,浏览器会发送你的web应用产生的所有ASP.NET cookies和所有的其他cookies。这使得请求报头不必要的变大,浪费带宽。访问静态文件时你并不需要发送这些cookies。因此,如果你把静态文件放在不同的域中,那些cookies将不会被发送。例如,把静态文件放在www.staticcontent.com域,而在www.dropthings.com域运行你的网站。不同的域并意味着必须是完全不同的网站。它可能仅仅是个别名,而物理上和web应用共享同一路径。

安全套接字(SSL)不会缓存,尽量少用。任何经过SSL处理的内容都不会被缓存。因此,你需要把静态内容置于SSL之外。此外,你应该尽量将SSL应用于一些安全页面,如登录页面或者支付页面。其余的应该使用常规的HTTP而不是SSL。SSL加密请求和响应,因而增加了服务器的额外负担。加密后的内容也比原始内容要大,因而占据更多带宽。

HTTP POST请求从不被缓存。缓存只相对于HTTP GET请求。HTTP POST请求从来不被缓存。因此,任何形式的AJAX调用,如果想被缓存,需要以HTTP GET的形式调用。

生成内容长度响应报头(content-length reponse header)。当你通过web services调用或者HTTP handlers动态地提供内容时,请确保生成了Content-Length报头。浏览器通过查看响应的Content-Lenght报头会知道有多少内容要被下载,这样它会有多种优化方案来提高下载速度。如果有这个报头信息,浏览器会更有效的利用持续连接。这将避免浏览器为每个请求新开一个连接。在没有Content-Lenght报头信息的状况下,浏览器不知道要从服务器接收多少内容,因而只要它从服务器端获取到字节流,就会保持连接为打开状态直到连接关闭。因此,你失去了持续连接带来的好处,它可以极大的缩短一些小文件的下载时间,如css、javascripts、以及图片文件。

如何在IIS中配置静态内容的缓存。在IIS管理器中,网站属性对话框有个“HTTP Headers“页,在那里你可以对所有IIS处理的请求定义过期报头。在那你可以定义内容立即过期,或是几天后过期,或者在某个特定日期过期。第二个选项(Expires after)使用的是相对过期,不是绝对过期。这个非常有用,因为它对每个请求都起作用。无论谁请求了一个静态文件,IIS会基于Expire after选项天/月的数字来计算过期日期。 对于由ASP.NET来处理的动态页面,一个handler可以修改过期报头的值来覆盖IIS的默认设置。

分享到:
评论

相关推荐

    webapi接口缓存组件

    WebAPI接口缓存组件是一种优化WebAPI服务性能的技术,它通过存储先前请求的响应结果,减少不必要的数据库查询或计算,从而提高系统响应速度。本文将详细介绍这个自定义的WebAPI接口缓存组件的设计原理、实现方式及其...

    web 缓存

    在IT行业中,Web缓存是一种优化网页加载速度和减少服务器压力的重要技术。它涉及到浏览器缓存、CDN缓存、代理服务器缓存等多个层面。本文将深入探讨Web缓存的基本概念、工作原理以及如何防止静态资源非正常缓存的...

    Web搜索与Web缓存的若干关键问题研究.rar

    例如,搜索引擎可以利用Web缓存提高爬虫的效率,同时缓存策略也可以根据搜索行为进行调整。Web搜索结果的缓存可以减少重复查询的压力,但需处理好隐私和数据新鲜度的问题。此外,通过对用户搜索历史的分析,可以预测...

    基于Spring的Web缓存

    本文将深入探讨如何在基于Spring的Web应用中实现缓存功能,以提升系统的性能和响应速度。 首先,让我们了解什么是缓存。缓存是一种存储技术,用于临时保存常用数据,以便快速访问。在Web应用中,缓存可以减少数据库...

    Squid web缓存技术

    【Squid web缓存技术】是网络优化和性能提升的一种关键工具,主要负责存储、重用和分发网络上的内容,以减少网络带宽的消耗和提高访问速度。Squid是一个开源的代理服务器和缓存系统,广泛应用于企业和大型网络环境中...

    Web缓存技术概述.pdf

    Web缓存技术是互联网应用中的关键组成部分,它用于减少网络延迟和带宽消耗,提升用户体验。在进行Web缓存技术概述时,通常会涉及缓存的原理、架构、协议以及其在现代互联网中的应用等方面。 一、Web缓存的基本概念 ...

    web项目页面缓存清除,不用每次刷新浏览器

    本资源包提供了关于"web项目页面缓存清除"的操作手册和相关资源,帮助开发者解决因缓存导致的问题,确保用户每次都能看到最新的网页内容,而无需手动刷新浏览器。以下是一些关键知识点: 1. **HTTP缓存机制**:HTTP...

    web 缓存技术浅谈.

    WEB缓存技术交流,该缓存能够加快网页的访问速度!

    J2EE WEB缓存技术详解.doc

    标题和描述中的“J2EE WEB缓存技术详解”指向了一篇关于在Java Web应用程序中使用缓存技术的深入分析文章。文章由作者夏俊于2011年撰写,主要探讨了在处理大量数据时,如何通过实施缓存策略来优化系统性能,特别是...

    JAVA_WEB_缓存技术

    在Java Web开发中,缓存技术是提高应用程序性能的关键手段之一。它通过存储常用的数据或计算结果,避免了每次请求时都直接从数据库或其他慢速存储中获取数据,从而显著提升了响应速度。在这个场景中,我们看到两个...

    详解大型网站web服务器缓存.zip

    总结来说,理解并有效地利用Web服务器缓存技术对于提升大型网站的性能至关重要。通过CDN、反向代理、应用程序和分布式缓存,我们可以构建出一个高效、可扩展的系统。同时,合理设置缓存过期时间,确保数据的时效性和...

    高速web缓存组件 memcached全面剖析 中文版

    一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。 如今,越来越多的Web应用程序开始使用memcached这个高速的缓存服务器软件。然而,memcached的基础知识远...

    Web缓存策略:提升网站性能的高效途径

    通过合理利用Web缓存,可以减少服务器的负载,加快内容的加载速度,降低网络带宽的使用。本文将详细介绍Web缓存的概念、类型、实现方式以及最佳实践。 Web缓存是提高Web应用性能的重要手段。通过合理配置浏览器缓存...

    充分利用ASP.NET的三种缓存提高站点性能

    "充分利用ASP.NET的三种缓存提高站点性能" ASP.NET 提供了三种主要形式的缓存:页面级输出缓存、用户控件级输出缓存(或称为片段缓存)和缓存 API。输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用...

    Map实现web缓存

    一个使用map实现web缓存的工具类 可供web应用开发参考

    详解Web缓存欺骗攻击1

    Web缓存欺骗攻击 Web缓存欺骗攻击是一种新型的Web攻击方法,它可以影响包括Web框架在内的许多技术。攻击者可以使用这种方法来提取Web用户的私人和敏感信息,在某些场景中,攻击者甚至可以完全接管用户账户。 Web...

    webapi接口缓存组件.rar

    在这个场景中,"webapi接口缓存组件.rar"是一个压缩包,包含了实现Web API接口缓存功能的相关代码。缓存是提升应用程序性能的关键技术,它减少了对数据库或其他耗时资源的重复访问,降低了服务器负载。 在描述中...

    web缓存技术精品课程

    Web缓存技术是Java Web应用中不可或缺的部分,其主要作用是减少数据在不同软硬件之间的传输延迟,优化数据读取速度。缓存可以理解为一种特殊的存储器子系统,它复制了频繁使用的数据,以便快速访问。Web应用系统中...

    高速网络中集群web缓存系统设计

    高速网络中集群web缓存系统设计

Global site tag (gtag.js) - Google Analytics