0

我正在使用 Firefox 3.6.6。

我有一个index.php使用以下代码调用的 PHP 脚本:

<?php
sleep(20); die(time());
?>

我打开两个浏览器选项卡,将 URL 复制到每个选项卡中,然后在每个选项卡中快速按 Enter。第一个选项卡在 20 多秒内完成。第二个选项卡在 40 多秒内完成。

我在 IE 中做了同样的实验,两个脚本在一秒钟内完成,大约 20 秒。

这是预期的行为吗?导致我对此进行测试的实际脚本是一个同步过程。我希望任何尝试执行它两次的人都收到进程已经在进行中的错误,而不是让浏览器坐在那里等到它可以再次执行它。

如果这就是 Firefox 的工作方式,它如何确定一个页面何时是重复的,以及它应该将请求排队而不是同时运行它们?

我可以通过在末尾放置一个垃圾 GET 字符串来欺骗它,例如index.phpindex.php?JUNK=1两者都在 20 秒左右完成。

4

1 回答 1

2

这是缓存机制:如果您禁用所有缓存,则不会发生问题。显然,FF 开发人员检查了当请求仍在加载时它可能是可缓存的,因此它等待第一个请求,然后才决定不使用缓存,然后才调度第二个请求(您可以在时间戳中检查您的日志文件)。

您可以尝试使用一些无缓存标头和向客户端发送数据的 flush(),也许它可以确定在接收标头时缓存不是一个选项,尽管我怀疑缓存检查仅在内容加载后完成.

于 2010-07-19T19:46:35.240 回答