今天遇到一个问题,我有一个页面叫test.php,这个页面需要执行5秒。我用Firefox以很快的速度先后打开了2个test.php,第1个页面执行了5秒返回了,第2个页面是在第1个页面返回后执行了5秒返回,所以总的时间是10秒。这就奇怪了,为什么第2个页面会等第1个页面执行完了才执行呢?莫非两个页面有资源竞争?后来经过了测试,总算发现了问题的所在,这个问题不是PHP或者Apache造成的,而是Firefox浏览器造成的。原因应该是Firefox的缓存机制,当访问完全一样的URL时,后面的URL访问会被挂起,以便可以从本地直接访问第1个URL下载过来的资源,加快访问速度。
为了证实这个问题是由firefox造成的,我进行了2种测试:
1:我用IE浏览器同时打开2个test.php,这2个页面几乎同时返回,没有等待。
2:我给页面加上URL参数,构造两个访问同一页面但不相同的URL,如test.php?t=1和test.php?t=2,然后几乎同时访问该页面,2个页面几乎同时返回,也没有等待。
所以这个问题和PHP无关,是浏览器的行为造成的,我测试了一下,Google Chrome也是这样,可能Safari也是这样的。因此用其他编程语言的朋友应该也会遇到类似的问题。最好的解决方法就是加上一个无意义的参数,构造两个不一样的URL来访问,参考测试2。
Ferris Xu
2010-08-06