0

さまざまなphpファイルからSQLクエリをフェッチするjsと、js変数を表示するhtmlがあります。

今のところしばらくは動作しますが、js がデータを取得するときに各 php ページをキャッシュするため、ブラウザがゆっくりと過負荷になり、最終的にブラウザがクラッシュします。

これについていくつか質問があります: A) 2 つの php ページの「古い」セットのキャッシュを無効にするにはどうすればよいですか? B) もっと良い方法はありますか?

var seconds = 3;
var divs = new Array("div1", "div2");
var urls = new Array("jaxcount.php", "jaxcount2.php");

    // Refresh DIV
    function refreshdiv() {
        for (var i = 0; i < 2; i++) {
            var div = divs[i];
            var url = urls[i];
            dorefresh(div, url);
            break;
        }
    }

    function dorefresh(div, url){
        // Stolen XMLHTTP Request Object

        var xmlHttp;
        try {
            xmlHttp = new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
        } catch (e) {
            try {
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); // Internet Exploder
            } catch (e) {
                try {
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {
                    return false;
                }
            }
        }

        // IE Optimizations

        fetch_unix_timestamp = function () {
            return parseInt(new Date().getTime().toString().substring(0, 10));
        };

        var timestamp = fetch_unix_timestamp();
        var nocacheurl = url + "?t=" + timestamp;

        // The Beef

        xmlHttp.onreadystatechange = function () {
            if (xmlHttp.readyState === 4) {
                document.getElementById(div).innerHTML = xmlHttp.responseText;
                setTimeout('refreshdiv()', seconds * 1000);
            }
        };
        xmlHttp.open("GET", nocacheurl, false);
        xmlHttp.send(null);
    }

    // Trigger Refresh

    var seconds;
    window.onload = function startrefresh() {
        setTimeout('refreshdiv()', seconds * 1000);
    };
4

2 に答える 2

0

キャッシュバスタークエリ文字列を使用することはできますが (実際に使用しています)、適切なキャッシュ有効期限ヘッダーを発行するようにサーバー側のコードを変更することをお勧めします。

<?php
header('Cache-control: max-age=60'); // cache for 60 seconds at most
header('Expires: Tue, 11 Jun 2013 12:00:00 GMT'); // expire at a specific date/time.

次に、毎回同じ URL を使用するだけで、ブラウザ独自のキャッシュ メカニズムによって古いデータが消去されます。

于 2013-06-11T16:58:35.503 に答える