我希望php页面首先加载其他信息&然后做一个手术

时间:2010-12-17 20:19:10

标签: php javascript

我正在寻找一个解决方案,以便php页面将加载其中的所有其他信息,如果有内容/图像,然后执行一项操作,这将花费一些时间来完成并显示其结果。

由于操作需要很长时间,因此php页面加载速度太慢。我希望我的客户首先看到页面,然后进行最后显示结果的操作。

我尝试了ob_start()& flush()但是没有成功。 它可能需要Javascript来初始化我认为的操作。但我怎么能这样说呢。

4 个答案:

答案 0 :(得分:1)

这是一个php操作吗?由于php是服务器端语言,因此在用户收到http响应之前执行。所以你必须先建立网站。将其发送给用户。然后向需要执行操作的脚本发出新请求(例如使用ajax)。这是应该执行的订单代码。

  • PHP(Serverside):构建您的网站, 主要的PHP代码被执行
  • HTML(Clientside):HTML正在构建,图像和javascripts文件将被加载
  • Javascript(Clientside):使用您的操作为php文件创建一个新的httprequest(异步)。请注意超时,因为操作可能需要很长时间。设置 - 如果需要,自定义超时时间。
  • PHP(Serverside):执行long opperation并返回结果(确保你的php服务器没有超时,认为大多数服务器默认为30秒)
  • Javascript(Clientside):在ajax处理程序中执行结果。

一些手工链接。

Ajax tutorial of w3schools
jQuery ajax api with examples

答案 1 :(得分:1)

jQuery使这非常容易,因为......

<script type="text/javascript" src="jquery-1.4.4.min.js"></script> <!-- Put this in your web page's head -->
<script type="text/javascript">
$(function() {
    $('wherever-you-need-the-resulting-html-to-go').html('<img src="loading-image.gif" alt="Loading" />');
    $.ajax({
        url: 'wherever-your-slow-code-is.php',
        success: function(msg) {
            $('wherever-you-need-the-resulting-html-to-go').html(msg);
            }
        });
    });
</script>

答案 2 :(得分:0)

您需要在没有“慢速通话”的情况下加载页面。在onload事件或网页末尾的脚本中,对服务器执行XHR调用以获取慢速数据。默认情况下,调用是异步的,因此用户可以在等待调用返回时与网页进行交互。此时,您将获取数据并使用JavaScript将其转换为HTML。

答案 3 :(得分:-1)

您使用onload,在很短的时间内触发定时事件。这将让屏幕被绘制。

当事件触发时,使用AJAX技术启动漫长的过程。

您无法长时间尝试在服务器上运行进程。一段时间后(通常为300秒),一个失控计时器将终止您的服务器线程。为避免这种情况,您的漫长过程必须使用轮询技术或不在正常的Web服务器环境下运行。

如果它将运行超过20或30秒,则在会话中保存某种形式的状态,并返回“工作”回复。在开始下一个循环之前,使用回复更新用户的进度。这会加载并定位会话数据,并在另一个短时间内运行。

警告 - php将仔细序列化对会话数据的所有访问,因此在服务器处理循环时用户的任何发送将等待该循环在处理之前结束。