web应用必然要面对缓存问题,无论前台后台都会涉足缓存。特别是对于前端而言,缓存利用的是否得当直接关系到应用的性能。

通常情况下,我们会倾向于使用缓存,因为缓存一方面可以减少网络开销,一方面可以减轻服务器的压力。

但是有些时候缓存也会带来一些比较诡异的问题,呵呵。关于缓存的文章应该不在少数,不再讨论,本文的重点在于为js和css文件自动添加版本号。

这样做的原因是:首先对于js和css类型的静态文件设置了缓存机制,当文件被更新时,需要强迫浏览器下载修改后的新文件,也就是要更新缓存,而通过为js和css文件增加版本号这样的方式就可以很好的解决这个问题。

本文是以php脚本为例,其它语言可参考

php脚本的作用是取文件的时间戳作为版本号,这里可以自行定义版本格式

PHP

< ?php
/**
* Add version to the file for cache problem
* @param string $url to add version
* @return string
*/
function autoVer($url){
$ver = filemtime($_SERVER['DOCUMENT_ROOT'].$url);
echo $url.'?v='.$ver;
}
?>

引用js和css等资源文件时,使用脚本

<link href="<?php autoVer('/path/file.css'); ?>" rel="stylesheet" type="text/css" >
</link>

最终客户端展现的html页面内容

<link href="/path/file.css?v=1297503090" rel="stylesheet" type="text/css" />

这里URI不是静态,可能会造成某些浏览器不会进行缓存,可以采用伪静态配合URL重写来解决,关于伪静态也比较简单,这里就不赘述了。

为js和css文件自动添加版本号的更多相关文章

  1. gulp自动化打包及静态文件自动添加版本号

    前端自动化打包发布已是一种常态,尤其在移动端,测试过程中静态资源的缓存是件很头疼的事情,有时候明明处理的bug测试还是存在,其实就是缓存惹的祸,手机不比pc浏览器,清理缓存还是有点麻烦的.所以自动化实 ...

  2. SpringMVC+FreeMarker实现静态资源文件自动添加版本号(md5)

    近日切换java开发,开始学习springframework.在实现静态资源文件自动计算版本号的实例时,因为不熟悉框架,走了不少弯路,好在最终解决了问题.这里写篇文章记录一下实现,也希望对大家有些用处 ...

  3. 用python给html里的css及js文件链接自动添加版本号

    传统的给文件链接添加版本号的方法是使用gulp-rev,这里提出的解决方案是使用python来替代gulp-rev. import os import re import uuid import sy ...

  4. MVC学习随笔----如何在页面中添加JS和CSS文件

    http://blog.csdn.net/xxjoy_777/article/details/39050011 1.如何在页面中添加Js和CSS文件. 我们只需要在模板页中添加JS和CSS文件,然后子 ...

  5. 动态添加div及对应的js、css文件

    动态添加div及对应的js.css文件 在近期的项目开发中需要在首页中添加很多面板型的div,直接加载代码显得很繁琐,于是利用js封装一个动态添加div及其对应css文件和js文件的方法供大家参考使用 ...

  6. 前端自动化工具gulp自动添加版本号

    之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...

  7. [转][前端优化]使用Combres合并对js、css文件的请求

    本文转自:http://www.cnblogs.com/parry/archive/2011/01/28/Reduce_Http_Request_Using_Combres_For_Js_Css.ht ...

  8. 【翻译】Microsoft Ajax Minifier 快速使用指南(与VS集成使用) 编译后直接压缩项目的JS或CSS文件

    网上找了好久终于找到一个能跟VS集成使用的JS和CSS压缩工具,因为害怕忘记,所以给转发过来,顺便翻译一下,大学那会儿学的英语基本上都已经还给老师了,所以翻译的不太好,不过能看懂就成,对吧? 原文地址 ...

  9. 引用:使用grunt 压缩 合并js、css文件

    引用:https://www.jianshu.com/p/08c7babdec65 压缩 js 文件 1.创建一个目录 名为grunt   目录.png 2.在grunt目录下创建一个 src目录,存 ...

随机推荐

  1. JAVA 构造方法之间的调用

    this:看上去,用来区分局部变量和成员变量的情况this:就是代表本类对象,this代表它所在方法所属对象的引用构造方法之间的调用只能通过this语句来完成构造方法之间进行调用时this语句只能出现 ...

  2. laravel查询构造器中别名的问题

    Laravel框架对数据库的封装是比较完善的,用起来也比较方便.但之前有一个问题一直困扰着我,就是利用laravel作查询时.如果想给表名或是字段名起别名是比较麻烦的事.但翻阅它的文档不难发现,它提供 ...

  3. Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...

  4. MySql 存储过程实例(附完整注释)

    将下面的语句复制粘贴可以一次性执行完,我已经测试过,没有问题! MySql存储过程简单实例:                                                       ...

  5. 使用LKDBHelper 插入相同id时候应该是更新数据而不是插入新的数据

    要实现使用LKDBHelp 插入相同id时候应该是更新数据而不是插入新的数据 例如#import "JSONModel.h" @interface InfoModel : JSON ...

  6. mysql 错误1054

    问题,当查询数据时,输入字符串是数字时,可以查询,但当输入字母字符串时却不能查询,总是提示错误1054 解决:将字符串打上单引号 字段对应的值如果为字符或字符串类型的时候,应用英文单引号括起来,你用的 ...

  7. [Flex] ButtonBar系列——labelFunction用户提供的函数,在每个项目上运行以确定其标签

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  8. Dubbo 服务暴露注册流程

    Dubbo的应用会在启动时完成服务注册或订阅(不论是生产者,还是消费者)如下图所示. 图中小方块Protocol, Cluster, Proxy, Service, Container, Regist ...

  9. [SQL]一组数据中Name列相同值的最大Je与最小je的差

    declare @t table(name varchar(),qy varchar(),je int) insert into @t union all union all union all un ...

  10. 用浏览器打开本地html 直接到首页 的解决方法

    方法1:直接把本地文件拖到浏览器就可以打开