4

友達のサイトを作りました。彼は、音楽プレーヤーがページの読み込みを通じて音楽を再生し続けることを望んでいたため、ajax (jQuery を使用) を介してコンテンツをページに読み込むことにしました。それは正常に動作し、javascript がない場合は適切にフォールバックし、戻る/進むボタンはうまく機能しますが、サーバー上では非常に遅くなります。

いくつかのポイント:

  1. 最初のページの読み込みはかなり高速です。Chrome 開発者コンソールは、「index.php」が約 2.5 秒で読み込まれることを示しています。クエリ文字列パラメーターがどのページが読み込まれるかを決定するように設定しましたが、この時間枠はそれらすべてに対してほぼ正確です。ホームページの場合、8.4KB のデータが読み込まれます。

  2. ajax リクエストを介してコンテンツを読み込むと、ダウンロードされるデータのサイズに関係なく、約 20 秒かかります。この方法でロードされるデータの最小量は約 500 バイトです。ここには明らかにミスマッチがあります。

そのため、Chrome は、費やされた時間の大部分が「待機中」であることを教えてくれます。これは、サーバーがリクエストを処理していることを意味します。つまり、私のコードに時間がかかっているか、サーバーで何かおかしなことが起こっていることを意味しているだけだと思います。かなり最小限なので、私のコードではないと思います。

$file = "";
if (isset($_GET['page'])) {
    $file = $_GET['page'];
} else if (isset($_POST['page'])) {
    $file = $_POST['page'];
} else {
    $file = "home";
}

$file = 'content/' . $file . '.php';

if (file_exists($file)) {
    include_once($file);
} else {
    include_once('content/404.php');
}

これは、content_loader.php私の JavaScript (このシナリオでは) が「ページ」パラメーターと共に GET 要求を送信するファイルにあります。HTML マークアップが返され、ページの DIV に配置されます。

私はjQuery .get()省略形の関数を使用しているので、そこで何かを台無しにすることは考えられません。遅延はサーバーからのデータを待っているため、Javascript の問題ではないと確信しています。また、データが非常に小さい場合でも、約 20 秒かかります。

現在、サーバーに問題があると考えていますが、javascript を介して行われたリクエストが、ブラウザーを介して従来の方法で行われたリクエストよりもはるかに遅くなる理由がわかりません。追加の注意として、一部のコンテンツ ページは MySQL データベースに接続しますが、一部は接続しません。ページの処理に必要なものや、ページが構成するデータの量は問題ではないようで、約 20 秒かかります。

私は途方に暮れています...これを説明できる何かを知っている人はいますか? また、このような質問をするのに適切な場所でない場合は申し訳ありませんが、他の場所も質問に特に適しているとは思えませんでした。

4

1 に答える 1

1

コメントで述べたように、確実な可能性は逆引き DNS ルックアップである可能性があります。私は以前にこの問題を抱えていましたが、それがあなたの遅いリクエストの原因であるに違いありません. 通常の apache と vhost の両方の構成と.htaccess. うまくいけば役立つはずのいくつかのリンクを次に示します。

http://www.tablix.org/~avian/blog/archives/2011/04/reverse_dns_lookups_and_apache/

http://betabug.ch/blogs/ch-athens/933

より多くのリソースを見つけるには、「apache slow reverse dns」などを Google で検索してください。

ごくわずかな説明

逆引き DNS ルックアップでは、IP アドレスをホスト名に解決しようとします。ほとんどの場合、Apache、SSH、MySQL などのサービスではこれは不要であり、要求/接続を遅くするだけなので、悪い考えです。さまざまなサービスの構成設定を探し、逆引き DNS ルックアップが必要ない場合は無効にすることをお勧めします。

Apache には、逆ルックアップを発生させる特定の構成設定があります。HostnameLookupsIP アドレスの代わりにドメインを指定する許可/拒否ルールなど。詳細については、上記のリンクを参照してください。

コメントで提案したように、PHP スクリプトは、最終的に実行されるとすぐに実行されます。時間は Apache での待機に費やされます。ほとんどの場合、逆引き DNS ルックアップが実行され、失敗します。問題はコードにあるのではなく、リクエストに関係する他のサービスにあることがわかります。

お役に立てれば!

于 2013-04-13T05:12:59.007 に答える