2

現在、読み込みに時間がかかる Web ページがあります。ページの php 側は多くのデータ処理と計算を行いますが、これは (残念ながら) 避けられません。PHPの処理中にページに何かを表示したいと思います。残念ながら、ページの大部分は PHP の計算に依存しています。

私が持っている現在の解決策は次のとおりです。

HTML/PHP (はじめに):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title id="title">Loading</title>

<link href="style.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="preLoading.js"></script>
</head>
<body onload="onLoad()">
<?php
flush();
?>
<?php
// computation.
?>

ジャバスクリプト:

document.write('<span id="loading">Please wait... Loading and processing data.</span>');

function onLoad() {
    if (document.getElementById) {
        var loading = document.getElementById("loading");
        loading.style.display="none";
    }
}

ページのレンダリング中に、ページのレンダリング中に小さな待機メッセージが表示されるという意味でうまく機能します。しかし、ページがすべてのデータを受信するのを待ってから何かをレンダリングするという意味では機能しません。どうすれば後者を達成できますか?

1 つの注意点: doctype の前の空白行には 1024 個のスペースが含まれています。これは、ブラウザが特定の文字数を読み取るまで待ってから何かをレンダリングしようとする場所 (StackOverflow を含む) を読んだためです。

どんなアイデアでも大歓迎です。ブラウザには、私を当惑させる難解なトリックやハックがたくさんあります。

4

6 に答える 6

4

ページのスケルトンのみを送信し、AJAX 呼び出しを介して計算コストの高いデータを取得することをお勧めします。そうすれば、プレースホルダー ページを作成して、利用可能になったときに内容を入力できます。

これの利点は、フラッシュ バッファーに依存しないことです。これは、データが実際にクライアントに送信されることを保証するものではなく、ソフトウェア スタックの次の上位レイヤーが現在利用可能なすべてのものを取得する必要があるだけです。

欠点は、ページを生成するために少なくとも 2 つの HTTP リクエストが必要になることです。1 つはページのスケルトンを取得するためのもので、AJAX リクエストは「空白を埋める」データを取得するために少なくとも 1 つ以上です。

于 2011-07-25T19:38:32.043 に答える
1

これを試して:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title id="title">Loading</title>

<link href="style.css" rel="stylesheet" type="text/css"/>
<script type ="text/javascript" src="jquery.js"> </script>

<script type="text/javascript">  

$(document).ready(function(){
 $.get('data.php',
 function(output) {
 $('#dataDiv').html(output).fadeIn(250);
 });
});

</script>
</head>
<body>
<div id="dataDiv"> Please wait while loading... </div>
<?php
// computations placed in data.php file
?>

これにはjQueryを使用する必要があり、phpの計算を「data.php」ファイルに移動する必要があることに注意してください。

于 2011-07-25T20:28:59.273 に答える
1
  1. 最初に、ローダーメッセージをbodyタグの直後に配置してみてください。このように、ブラウザはできるだけ早くそれを表示する必要があります。
  2. デフォルトで圧縮(gzipなど)がオンになっていないか設定を確認します。
  3. テーブルは使用しないでください。完全にロードされる前にレンダリングされません。
于 2011-07-25T20:00:56.200 に答える
1

使ってみて

flush(); ob_flush();

PHPマニュアルに記載されているとおりです。これにより、出力が可能な限りブラウザに近くなります。

バッファをブラウザにプッシュする方法の詳細については、php マニュアルの flush(); を参照してください。

于 2011-07-25T19:35:46.537 に答える
0

Ajax 呼び出しで永遠にかかるコンテンツをロードします。

于 2011-07-25T19:36:20.290 に答える
0

出力バッファリングをオフにして、PHP プロセスがジョブを実行するときに出力を暗黙的にフラッシュする必要があります。

Output Bufferingをチェックアウトすることをお勧めします。また、バッファのフラッシュはブラウザと、出力を表示する前に期待する量に依存することに注意してください。

役に立つと思われる関連する質問。

于 2011-07-25T19:36:49.890 に答える