PHP循环阻止其余代码执行[关闭]

Posted

技术标签:

【中文标题】PHP循环阻止其余代码执行[关闭]【英文标题】:PHP loop blocking the rest of the code to execute [closed] 【发布时间】:2012-11-09 03:08:58 【问题描述】:

我有一个看起来有点像这样的循环的 scipt

[CODE]  [BIG LOOP] [SOME MORE CODE]

我面临的问题是,只要循环运行,php 代码就不会继续加载页面的其余部分([SOME MORE CODE])。我该如何解决这个问题?有什么指点吗?

我正在执行的循环是从 mysql 数据库中获取数据、下载和保存图像。之后,它会删除临时 MYSQL 数据。

但循环所做的并不重要,IMO 每个循环都会阻塞正在进行的代码,直到循环完成。

所以我的问题是,是否有可能执行循环,但也可以在代码中继续?如果没有(我在想什么),是否有任何合乎逻辑的解决方案我可以解决这个问题,因为我想在这个页面上加载两个“代码块”。我认为将代码拆分为 2 .phps 并将其分开将面临同样的问题。

【问题讨论】:

你需要优化你的循环。您应该提供有关您在该循环中所做的事情的信息。 显然:不要在那里执行如此长时间运行的代码。在不了解细节的情况下,不可能给出更具建设性的建议。 @AndreKR 我认为他应该用伪代码编写它 @Hussam 那是相当虚构的代码。 @Rubens 伪代码在定义上或多或少是虚构的,只要它使理解代码更容易 【参考方案1】:

你可以试试:

[CODE]  [SOME MORE CODE]  [BIG LOOP]

但是如果“更多代码”依赖于“大循环”,那么你就有问题了。以下是一些想法:

优化您的循环。您的循环中可能存在某种严重的低效率。 减少工作量。也许你不需要处理整个大循环,可以做更少的处理。 缓存您的结果。如果经常执行相同的循环并产生相同的结果,也许您可​​以将结果保存在文件/APC/memcached 中? 使用 AJAX。加载一个没有来自大循环的数据的页面,然后让该页面使用 AJAX 加载您需要的数据。您可以在页面上显示“请稍候,我们正在获取您的数据”消息/图标/任何内容。

【讨论】:

它不依赖于循环。它只是网站的页脚。但是没有它看起来很丑。所以我正在寻找一种在附近工作的方法。我会尝试你的一些建议,因为我想在这个项目中使用 AJAX。【参考方案2】:

如果[BIG LOOP]结果需要计算并且还需要出现在[SOME MORE CODE]之前的html中,那么:没有解决方法。我说的是[CODE=HTML] [BIG LOOP=PHP] [SOME MORE CODE=HTML]。否则,更精确(或给出代码)。 当您说“加载页面的其余部分”时,您的意思是“加载 HTML 页面”吗?在这种情况下,所有 PHP 代码都必须已经执行。 尽管您可能应该采取不同的方式,但这里有一个可能的技巧:

[CODE] [DIV FOR AJAX]  [SOME MORE CODE] [AJAX INSTRUCTION TO LOAD RESULT OF BIG LOOP IN DIV]

现在,这是一个非常聪明的方法,可能在 PHP 编程方面有点残酷!

【讨论】:

以上是关于PHP循环阻止其余代码执行[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

对话框会阻止其余代码执行吗?

Javascript块脚本执行

while循环阻止其他代码执行c#

仅在第一个周期中检查条件,在其余周期中执行一些代码

Node.js 等到异步函数完成,然后继续执行其余代码

Node.js 等到异步函数完成,然后继续执行其余代码