有没有办法清除/删除浏览器缓存中的特定资源而不是清除整个缓存?

时间:2013-12-20 13:53:30

标签: javascript caching web-applications browser

例如在Chrome中,我正在开发一个webapp(这个很重,需要大约5秒),第一次有很多静态资源(JS)文件和CSS加载。为了反映一个JS的变化,我需要用“清空缓存”重新加载网页。

如果有办法只从缓存中删除特定资源的JS文件(以便强制从服务器重新获取),我的测试时间可以在很大程度上减少。

3 个答案:

答案 0 :(得分:0)

一种技术是将随机参数添加到您不想缓存的资源的URL中。 根据您的服务器端语言,您可以执行以下操作:

<script src="my.js?_=<%= encode(new Date().toString()) %>"></script>

答案 1 :(得分:0)

如果你有一个PHP后端,你可以将一个随机数添加到JS文件URL:

<script type="text/javascript" src="/script.js?<?php echo time(); ?>"></script>

这将导致浏览器每次从服务器重新获取它,因为URL会有所不同。

答案 2 :(得分:0)

如果更改服务器上文件的日期和时间,则可以单独重新加载特定资源。 &#34;清除缓存&#34; 并不像应该的那样容易。我没有清除浏览器上的缓存,而是意识到&#34;触摸&#34;缓存的服务器文件实际上会更改缓存在服务器上的源文件的日期和时间(在Edge,Chrome和Firefox上测试),大多数浏览器会自动下载服务器上最新的最新版本(代码,图形,任何多媒体)太)。我建议您在程序运行之前复制服务器上的最新脚本和&#34;触摸事物&#34; 解决方案,这样它会将所有问题文件的日期更改为最新的日期和时间,然后下载一个新的副本到您的浏览器:

import React, { Component } from 'react';
import { Provider } from "react-redux";
import {
  BrowserRouter as Router,
  Route
} from "react-router-dom";
import {withRouter} 'react-router';

import store from "./store";

import { IntroJm } from './components/intro/jm';
import { IntroNfc } from './components/intro/nfc';
import { IntroTxn } from './components/intro/txn';

import './assets/sass/main.scss';
import './static/css/main.scss';
import './static/css/pure.min.scss';
import './App.scss';

let browserHistory = createHistory();

class App extends Component {

  componentDidMount() {
    this.props.history.push("/intro/jm");
  }

  render() {
    return (
      <Provider store={store}>
        <div>
          <Router>
            <div>
              <Route path="/intro/jm" component={IntroJm} />
              <Route path="/intro/nfc" component={IntroNfc} />
              <Route path="/intro/txn" component={IntroTxn} />
            </div>
          </Router>
        </div>
      </Provider>
    );
  }
}

export default withRouter(App);

然后......你的其他程序......

我花了一些时间来解决这个问题(因为许多浏览器对不同的命令采取不同的行动,但他们都检查文件的时间并与浏览器中下载的副本进行比较,如果不同的日期和时间,将进行刷新) ,如果你不能按照正确的方式行事,总会有另一个可用的更好的解决方案。最好的问候和快乐的露营。顺便说一下touch();或者替代品在许多编程语言中工作,包括在javascript bash sh php中,你可以在html中包含或调用它们。