本文转自:http://niutuku.com/tech/www/271454.shtml

对于页面中不经常变化的静态内容通过指定expires头,来进行浏览器端的缓存,减少每次访问时的请求。

原理:对于页面中不经常变化的静态内容通过指定expires头,来进行浏览器端的缓存,减少每次访问时的请求。

实现:

1、IIS下的实现参考

为静态文件(js,css,image)设置客户端缓存是前端优化的重要法则之一,通过IIS为静态文件设置过期头(Expires headers)很方便,

1.打开IIS管理器;

2.点击要设置的站点,在功能视图中双击HTTP响应标头

3.然后点击,打开对话框

但是这样操作,web的整个站的所有的静态文件的缓存时间都一样,如果我们希望为不同的静态文件添加不同的缓存时间,比如有些文件很久不改变希望缓存时间长些,有些希望缓存时间短些。一直我以为IIS不可以做到,需要编程的方式管理,在google上搜索也无果,最后在stackoverflow提问(iis only Add Expires headers to images),很长时间没人回答(),不过最终还是有人解答了。

操作起来还是很简单,下面以添加某一个JS文件的缓存时间为例:

1. 在IIS管理器下点击该文件的文件夹并切换到内容视图

2. 选中要设置的js文件,如上图的jquery-1.3.2.js,右键切换到功能视图,这时看到的IIS管理台内容是

双击上图的HTTP响应标头就可以像为整个站点设置过期时间一样的操作。

上面的操作最终还是生成web.config的配置,经过上面的设置你会发现在Script文件夹下生成了一个web.config配置文件,打开发现内容如下

这样就明白了通过上面在IIS管理器的“繁琐”的界面操作可以通过简单的web.config中配置即可,

比如我要我整个Script文件夹设置统一的过期日期,只用添加一个location节即可

2、java的实现

mod_expires Apache 模块,具体还没研究如何用

win2000+apache2.0.54+tomcat5.0.28 现在想在某些目录上设置网页过期时间。 当写法是在httpd.conf的后面直接加 ExpiresActive  on ExpiresDefault  "access  plus  50  hour " 时,网站全部网页和图片等内容起作用。
当我想只配置某个特定的目录起作用时。写法改为: <Directory  "D:/Tomcat/webapps/ROOT ">       Options  Indexes  FollowSymLinks       AllowOverride  None       Order  allow,deny       Allow  from  all       ExpiresActive  on       ExpiresDefault  "access  plus  50  hour " < /Directory>

结论:

通过对指定不同的expires头来达到缓存查找的目的,如果静态内容有变化,可通过对应文件名称改变的方式来进行督促浏览器更新缓存。最好采用名称加版本号的方式对静态文件进行命名。

所针对的缓存对象为不经常改变的任何静态内容,不只是局限于图片,像css、js、flash都可以。

http1.1引入了cache-control来解决expires头需要客户端和服务器端时钟严格同步的问题。

cache-control通过max-age(以秒为单位)来指定多长时间以后过期。

-

[转]IIS7.5 添加expires头 提高性能的更多相关文章

  1. 前端性能优化 —— 添加Expires头与Cache-control区别

    要:添加Expires头能有效的利用浏览器的缓存能力来改善页面的性能,能在后续的页面中有效避免很多不必要的Http请求,WEB服务器使用Expires头来告诉Web客户端它可以使用一个组件的当前副本, ...

  2. 前端性能优化 —— 添加Expires头

    简要:添加Expires头能有效的利用浏览器的缓存能力来改善页面的性能,能在后续的页面中有效避免很多不必要的Http请求,WEB服务器使用Expires头来告诉Web客户端它可以使用一个组件的当前副本 ...

  3. Web前端性能优化教程03:添加Expires头

    本文是Web前端性能优化系列文章中的第三篇,主要讲述添内容:加Expires头.完整教程可查看:Web前端性能优化 什么是Expires头? Expires存储的是一个用来控制缓存失效的日期.当浏览器 ...

  4. IIS添加Expires头

    今天的Web页面包含大量组件,并且数量不断增长:页面的初访问者会进行很多HTTP请求,但通过使用一个长久的Expires头,使这些组件可以被缓存.这会在后续的页面浏览中避免不必要的HTTP请求.长久的 ...

  5. ASP.NET MVC之如何看待内置配置来提高性能优化(四)

    前言 前几篇我们比较基础的讲了下MVC中的知识,这一节我们穿插点知识,讲讲MVC中我们可以提高性能的办法. Razor视图引擎优化(优化一) 我们知道默认情况下配置MVC去解析一个视图会首先约定通过查 ...

  6. Java编程提高性能时需注意的地方

    1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...

  7. Java编程中提高性能的几点建议

    尽量减少对变量的重复计算 如 for(int i=0;i<list.size();i++) 应该改为 for(int i=0,len=list.size();i<len;i++) 并且在循 ...

  8. SQL Server 性能优化之——系统化方法提高性能

    SQL Server 性能优化之——系统化方法提高性能 阅读导航 1. 概述 2. 规范逻辑数据库设计 3. 使用高效索引设计 4. 使用高效的查询设计 5. 使用技术分析低性能 6. 总结 1. 概 ...

  9. 使用SQL Server 2000索引视图提高性能

    什么是索引视图? 许多年来,Microsoft? SQL Server? 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某 ...

随机推荐

  1. android中向bitmap里写入文字

    public static Bitmap drawText2Bitmap(String text, int imgResourceId, Context mContext) { try { Resou ...

  2. homework-02 最大子区域和

    题目描述 题目建立上一个作业的题目基础上,上一次作业是要求在一个一维序列里找一个最大连续子串,这次task最基础的要求是在一个二维表里找一个最大连续子矩形,但是这次作业有若干个升级版,分别要求可以加入 ...

  3. Gym 100818I Olympic Parade(位运算)

    Olympic Parade http://acm.hust.edu.cn/vjudge/contest/view.action?cid=101594#problem/I [题意]: 给出N个数,找出 ...

  4. Spring EL regular expression example

    Spring EL supports regular expression using a simple keyword "matches", which is really aw ...

  5. Spring入门(10)-Spring JDBC

    Spring入门(10)-Spring JDBC 0. 目录 JdbcTemplate介绍 JdbcTemplate常见方法 代码示例 参考资料 1. JdbcTemplate介绍 JdbcTempl ...

  6. UVaLive 6627 First Date (转换时间)

    题意:给定两个日期,两种不同算闰年的方法,导致日期不同,给定那个慢的,求你求了那个快的. 析:因为算闰年的方法不同,所以我们就要先从1582算到当前时间,算出差了多少天,再加上就好.注意跨月,跨年的情 ...

  7. c# 实现IComparable、IComparer接口、Comparer类的详解

    在默认情况下,对象的Equals(object o)方法(基类Object提供),是比较两个对象变量是否引用同一对象.我们要必须我自己的对象,必须自己定义对象比较方式.IComparable和ICom ...

  8. Proactor设计模式:单线程高并发

    Boost::Asio为同步和异步操作提供了并行支持,异步支持基于前摄器模式,这种模式的优点和缺点可能比只同步或反应器方法要低. 让我们检查一下Boost::Asio是如何实现前摄器模式的,没有引用基 ...

  9. shell脚本的入参

    shell脚本参数可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制.参数从第一个开始,在第九个结束.$0 程序名字$n 第n个参数值,n=1..9 $* 所有命令行参数$@    ...

  10. List、ArrayList、Vector及map、HashTable、HashMap分别的区别

    一.List与ArrayList的区别      List->AbstractList->ArrayList     (1) List是一个接口,ArrayList是一个实现了List接口 ...