缓存还是不缓存

时间:2009-07-16 02:21:15

标签: php ajax caching

我有一个ajax应用程序,其中客户端可能经常查找大量数据(比如按键),数据在恶意进程的固定时间每天在服务器端更新一次或两次。为避免频繁访问服务器,我将数据存储在xml文件中,因此客户端在页面首次加载时下载一次,然后通过javascript从本地数据文件中查找数据。 但是用户可能会在更改之前不久加载页面,然后开始使用它而不刷新页面,因此数据文件永远不会更新,因此不断告诉用户新数据不可用。 我该如何解决这个问题?

5 个答案:

答案 0 :(得分:3)

您应该为生成的XML文件设置适当的HTTP缓存标头,以便在此时间之后的任何客户端请求都将获得新版本并在本地缓存它,就像任何其他静态内容一样。

答案 1 :(得分:0)

如果数据负载不是很大......将主文档中的数据作为XML岛包含在内。要么在文档生成中形成它(aspx,php,等等),要么在加载时填充(通过ajax调用)保留的文档节点。这样,您的用户始终拥有最新的数据,您不必担心缓存,生活也会简单得多。

如果它很大,请根据需要通过ajax调用填写该节点。

答案 2 :(得分:0)

一个显而易见的选择是添加一些每隔x分钟轮询服务器的AJAX。如果数据需要刷新,只需在页面上显示一条非阻塞消息,通知用户新的数据可用,并提供刷新页面的链接。作为额外的,您可能希望为用户提供一个按钮,以便他们自己检查新数据(而不是等待x分钟过去)。

如果您使用HEAD请求,则只需检查上次修改的标题。

答案 3 :(得分:0)

你说更新时间是固定的吗?因此,当用户在更新时间之前短时间访问您的页面时,您可以设置一个javascript变量到您的页面,指示多少分钟,例如,直到下次更新,并运行客户端计时器,如:

timer = {     run:function(){         if(now + minuteToUpdate> updateTime - startVisitTime){

        // make ajax request here to update XML file
    }
},
interval: //you can determine this since this will run in client-side

}

你不要在这种侮辱中投票,因为它是浪费,并且每次都要打电话给服务器。

您可以设置一些SESSION变量来帮助您更好,更准确地运行

贾斯汀

答案 4 :(得分:0)

运行时说...

或者,由于更新时间是固定且不频繁的,因此当您提供XML时,还要将缓存过期时间包括为元素或自定义标头。这样,如果您的用户在XML更新前1分钟访问该站点,您可以对客户端进行编码,使其缓存过期,并在该1分钟标记后的下一个请求中自行更新。