我正在使用Firefox 3.6.6。
我有一个名为index.php
的PHP脚本,其代码如下:
<?php
sleep(20); die(time());
?>
我打开两个浏览器标签,将URL复制到每个标签中,然后在每个标签中快速按回车键。第一个标签在短短20秒内完成。第二个标签在40秒内完成。
我在IE中进行相同的实验,两个脚本在一秒钟内完成,大约20秒。
这是预期的行为吗?导致我测试它的实际脚本是一个同步过程。我希望任何人试图执行两次以接收该进程已在进行中的错误,而不是让浏览器坐在那里等待它再次执行它。
如果这是Firefox的工作原理,它如何确定页面何时重复并且它应该排队请求而不是同时运行它们?
我可以通过在末尾添加一个垃圾GET字符串来欺骗它,例如index.php
和index.php?JUNK=1
都在20秒左右完成。
答案 0 :(得分:2)
这是缓存机制:如果禁用所有缓存,则不会发生问题。显然,FF开发人员检查当请求仍在加载时它可能是可缓存的,所以它等待第一个,然后才决定不使用缓存,然后才调度第二个请求(你可以在时间戳中检查它)你的日志文件)。
您可以尝试使用一些无缓存标头和放大器。一个flush()数据到客户端,也许它可以确定缓存不是接收标头时的选项,虽然我怀疑只有在加载内容后才进行缓存检查。