您的位置:首页 > 其它

如何解决浏览器缓存

2017-09-07 14:39 302 查看
你是否遇到过:改了css,改了js,替换了图片,但是没有生效的情况呢?

这个问题其实是浏览器缓存了css,js,和图片所造成的

解决方案:

1:如果你是前后端分离的开发模式,那么使用webpack等打包工具生成md5就可以解决了,这个方案是目前的主流方法。

但是,现在还存在大部分并非是前后端分离的项目需要我们维护

那么,我们可以通过使用一些脚本语言来动态改变对应url的版本号来解决

贴上php代码:

<?php
/*
Creat by xiaolu289 2017/9/7 11:19
该脚本解决更换图片后浏览器还是旧图片的问题
*/
$baseDir = __DIR__;
$publicDir = "{$baseDir}/Public";
$viewDir = "{$baseDir}/Application/Home/View";
$cssDirs = array(
"{$publicDir}/css",
"{$publicDir}/mobile/css",
);
$imgReg = "/([\w-]+\.(?:png|jpg|gif))(?:\?[\w]+=[\w]+)?/";
$cssReg = "/([\w-]+\.(?:css))(?:\?[\w]+=[\w]+)?/";
$VERSION = time();
/*
队列方式遍历文件夹
参考链接:http://blog.csdn.net/nuli888/article/details/52144752
*/
function read_dir_queue($dir){
$files=array();
$queue=array($dir);
while($data=each($queue)){
$path=$data['value'];
if(is_dir($path) &&$handle=opendir($path)){
while($file=readdir($handle)){
if($file=='.'||$file=='..')
continue;
$files[] = $real_path=$path.'/'.$file;
if (is_dir($real_path))
$queue[] = $real_path;
}
}
closedir($handle);
}
return $files;
}
// 遍历所有css目录
foreach($cssDirs as$item){
$cssFiles = read_dir_queue($item);
foreach($cssFiles as$item){
if(is_file($item)){
// 设置版本号
$fileContent=file_get_contents($item);
file_put_contents($item,preg_replace($imgReg,"$1?v={$VERSION}",$fileContent));
}
}
}
// 遍历view目录
$viewFiles=read_dir_queue($viewDir);
foreach($viewFiles as$item){
if(is_file($item)){
// 设置版本号
$fileContent=file_get_contents($item);
$fileContent=preg_replace($imgReg,"$1?v={$VERSION}",$fileContent);
file_put_contents($item,preg_replace($cssReg,"$1?v={$VERSION}",$fileContent));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: