前言
最近在一家创业公司实习,主要负责新版官网和商家平台管理系统的前端开发和维护,每次测试都要上传文件到ftp服务器端测试,初期由于更新修改比较频繁,每次都是直接上传覆盖css、js、php文件,链接方式是普通的链接而没有添加时间戳。由于大多数服务器端或CDN都会对css、js和图片这些静态的内容设置缓存和gzip压缩,到了IE这里又会在本地做一个缓存。所以当我们在服务器端更新了css、js文件之后,客户端经常会出现没有更新的现象,即浏览器会缓存你网站之前css、js的一些版本,导致一些问题的出现。
ps:并且我们不会要求客户每次访问你的网站都要清除下缓存,刷新一下页面。所以为了得到服务器端最新版的静态内容,在引入相关css、js文件时就有必要使用时间戳了。(格式大概是:xxx.css?t=aaa或xxx.js?t=bbb)如淘宝首页源码:
使用
这些时间戳标志着修改css、js等文件的日期,并且是动态生成的,可以在后台使用php或其他语言获取,然后前台输出。这样服务器端每次修改,浏览器端都会得到同步更新,用户访问网站时不会导致相关问题出题。
php对时间戳的操作:
一、php获取时间戳方法有两个:time()、strtotime()。
这两个方法,都可以获取php中unix时间戳,time()为直接获取得到,strtotime($time, $now)为将时间格式转为时间戳,$time为必填。由于对php不是很熟悉,详情请看strtotime的用法 ,如下(注:该段代码是从网上copy的)
//获得时间戳 <?php $timestamp = time(); echo $timestamp; ?> //更新timestamp的SQL的语句: update 表名 set 字段名= $timestamp where 条件=值;
二、另外使用钩子修改css、js的url的php方法可参考:使用php给css和js加上时间戳
结语
总之一句话概括使用时间戳的目的就是:禁止缓存css、js,使浏览器同步更新到服务器端最新的静态内容。由于本人技术很菜,这里只是把一些遇到的问题摆出来,好让看到的人有这个意识,避免犯同样的错误,相关解决方案因人各异。