PHP include()中断页面布局,直到包含的文件完成数据库查询

PHP include()中断页面布局,直到包含的文件完成数据库查询,php,css-float,server-side-includes,Php,Css Float,Server Side Includes,考虑以下几点: incl.php <div id='footer'> <?php sleep(10); echo "<div class='footer-float'><!-- content --></div>"; ?> <div style='clear:both;'></div> </div> 我有一个页面(page.php),其中包含一个页脚,其标记在

考虑以下几点:

incl.php

<div id='footer'>
  <?php
      sleep(10);
      echo "<div class='footer-float'><!-- content --></div>";
  ?>
  <div style='clear:both;'></div>
</div>

我有一个页面(page.php),其中包含一个页脚,其标记在incl.php中。 real incl.php做了一些wordpress数据库的工作来查找最新的文章,并为每一篇文章显示一点模糊信息——这很好,但因为数据库连接和包含所需的WP文件有延迟(这里用sleep()命令表示),它可以中断我的页面布局,因为它最多可以暂停几秒钟

在等待时,“我的页脚”中的浮动div意味着在incl.php完成执行并提供拉伸容器所需的清除div之前,容器不会拉伸以适应已加载的内容

我想知道的是:有没有一种方法可以让PHP先为标记(即非动态内容)服务,而不是像现在这样按顺序完成所有事情? 否则,有没有更好的方法来减少震动?我不能在有问题的页脚div上设置静态高度,因为它会根据内容而变化

非常感谢你的指点

编辑: 对于那些关心效率的人来说,只有几点:

当我使用本地运行的站点进行测试时,会出现这个问题,但数据库服务器是远程的,并且位于不可靠且缓慢的网络连接的另一端(如果您听说过“飓风bawbag”,它可能会提供更多的上下文),如果在实时环境中,我预计不会出现太多问题

虽然对优化和提高效率的要点表示赞赏,我看不出我有什么理由花时间担心加载某些页脚内容可能会延迟2秒,而这些内容只会在测试环境中出现-请不要错误地认为我没有考虑性能,纯粹是因为我说过加载内容会延迟(同样-本地站点、远程数据库服务器、连接速度慢)


出于这个问题的目的,请假设延迟不是问题所在,而是问题在于如何处理可能的延迟,而不使页面看起来一团糟。

您可以处理字符串变量中包含的标记,而不是直接回显,并在页脚回显。这样,延迟将在pa之前出现ge完全生成,不会导致布局中断


编辑:您必须将包含放在一个更好的位置。

您可以处理字符串变量中包含的标记,而不是直接回显,并在页脚回显。这样,延迟将在页面完全生成之前发生,并且不会导致布局中断


编辑:您必须将您的include放在一个更好的位置。

如果您想保持当前的流而不做很多更改,您可以使用:


否则,如果您不想在几秒钟内拥有一个空白页面,最好的解决方案是使用Ajax:正常加载页面(可能使用加载程序加载内容的最小高度),然后加载结果。

如果您想保持当前流而不做太多更改,可以使用:


否则,如果您不想在几秒钟内看到一个空白页面,最好的解决方案是使用Ajax:正常加载页面(可能使用加载程序加载内容的最小高度),然后加载结果。

我认为这是一个错误的想法,
我不认为任何用户愿意等待10秒来加载组件

通常,如果该组件不是任务关键型组件,
您应该将数据库结果缓存到静态文件中,
然后做一个简单的要求

Wordpress已经有很多专门为缓存编写的插件:-

  • (超过200万次下载)

    • 我认为这是一个错误的想法,
      我不认为任何用户愿意等待10秒来加载组件

      通常,如果该组件不是任务关键型组件,
      您应该将数据库结果缓存到静态文件中,
      然后做一个简单的要求

      Wordpress已经有很多专门为缓存编写的插件:-

      • (超过200万次下载)

      此问题是由于UTF-8中的BOM造成的。您可以在没有BOM的情况下将编码更改为ANSI或UTF-8。
      一些编辑器(如RJTextEd)可以在这种模式下写入文件。我已经检查过了。它解决了我的BOM问题。

      这个问题是由于UTF-8中的BOM造成的。您可以在没有BOM的情况下将编码更改为ANSI或UTF-8。
      一些编辑器,比如RJTextEd,可以在这种模式下编写文件。我已经检查过了。它解决了我的BOM问题。

      您可以在div上设置最小高度?这可能不是最好的解决方案,因此它不会作为答案发布,但您可以输出页面布局,然后使用AJAX加载动态内容…@OptimusCrime最小高度在某些IE中有问题s、 如果可能的话,我通常会避免这样做,但这可能就是我最终要做的:(@DaveRandom这是个不错的主意。谢谢,如果我找不到更好的选择,也许可以看看。@DaveRandom我在回复中包括了这种可能性,并且(没有进一步的信息)对我来说,这似乎是最好的方法。当然,这里要强调的一点是,从数据库加载一些结果不应该花费几秒钟。你可以在div上设置一个最小高度?这可能不是最好的解决方案,因此它不会作为答案发布,但你可以输出页面布局,然后加载动态内容使用AJAX…@OptimusCrime min height在某些IEs中有问题,如果可能的话,我通常会避免使用它-但这可能就是我最终要做的:(@DaveRandom这不是个坏主意。谢谢,如果我找不到更好的替代方案,也许可以看看。@DaveRandom我在回复中包含了这种可能性,并且(没有进一步的信息)对我来说,这似乎是最好的方法。当然,这里要强调的主要一点是,这不应该花太多时间
      <div id='main-content'>
        <!-- normal markup structure... -->
      </div>
      <div id='footer-wrapper'>
        <?php include('incl.php'); ?>
      </div>
      
      // at the begining of your application
      ob_start();
      // rest of the application: do any kind of output
      //...
      
      // at the end, maybe at the end of the footer
      ob_end_flush();