PHP include()中断页面布局,直到包含的文件完成数据库查询
考虑以下几点: incl.phpPHP 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),其中包含一个页脚,其标记在
<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万次下载)
- (超过200万次下载)
- 我认为这是一个错误的想法,
我不认为任何用户愿意等待10秒来加载组件 通常,如果该组件不是任务关键型组件,
您应该将数据库结果缓存到静态文件中,
然后做一个简单的要求 Wordpress已经有很多专门为缓存编写的插件:-
一些编辑器(如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();