【问题标题】:Multiple instances of PHP script won't load concurrently in the same browser from the same URLPHP 脚本的多个实例不会从同一个 URL 在同一个浏览器中同时加载
【发布时间】:2015-11-07 00:46:47
【问题描述】:

我正在尝试让 php 脚本的两个实例同时运行。我有一个脚本,'test.php':

<p><?php echo time(); ?> Sleeping...</p>
<?php sleep(5); ?>
<p><?php echo time(); ?> done</p>

如果我同时在两个浏览器选项卡中加载页面,我会得到:

1446855680 睡觉...

1446855685 完成

还有这个:

1446855686 睡觉...

1446855691 完成

一个实例阻塞,直到另一个实例加载。这在 Firefox 和 Chromium 上都会发生。

如果我制作第二个相同的脚本“test2.php”,或者将两个 url 重写为同一个脚本,并将两个页面加载到不同的选项卡中,我会得到:

1446855862 睡觉...

1446855867 完成

还有这个:

1446855863 睡觉...

1446855868 完成

两个实例同时加载。因此,被阻止的是相同的 URL。

如何让具有相同 URL 的脚本的两个实例同时加载/运行?

【问题讨论】:

  • 由于我在您的脚本中没有看到任何实际同步,您是否检查过它不是浏览器优化(您是否尝试在 Firefox 中加载一个实例,在 chrome 中加载另一个实例?)。如果是浏览器优化,请尝试在页面加载时添加一个随机参数 (?random=123)(具有 不同 值),看看会发生什么。
  • 这不是关于 php 的行为,而是关于浏览器的行为。 firefox 和 Chrome/-ium 都按顺序对完全相同的 url 执行(可缓存的)请求。
  • @ted 该页面将在 Firefox 和 Chromium 中同时加载。 random 参数还允许它同时加载。
  • @VolkerK 有没有办法告诉浏览器页面在加载之前不能缓存?我试过header("Cache-Control: no-cache, must-revalidate"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); flush(); 但没用
  • @Fred-ii- 它在远程服务器上。在两种浏览器(Chromium 和 Firefox)上,当在不同的选项卡/窗口(相同的 URL、相同的浏览器、不同的窗口)中加载相同的 url 时,一个实例总是在下一个实例开始之前完成。

标签: php apache firefox chromium


【解决方案1】:

正如 VolkerK 指出的那样,您的测试证实 Firefox/Chrome 会按顺序执行对 完全相同 URL 的请求。但实际上这不是问题,因为用户通常不会两次加载同一个页面,而且对于为 Ajax 请求提供数据的脚本,由于附加了不同的参数,因此 URL 会有所不同。

如果你想绕过这个机制,你可以在url中附加一个随机参数(在不同的浏览器标签中必须不同),即url.to/your/script?urlID=4821de7e524cf762deab6ed731343466。 random 参数使浏览器看到两个不同的 URL,从而并行执行加载。

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 2022-07-30
    • 1970-01-01
    相关资源
    最近更新 更多