私は<head>
セクションに約12個の短いJSファイルを含むアプリを書いています(承知しているので、それらをマージして<body>
の終わりの直前に移動する必要があります。本番環境でこれらに移動します)。
問題は、Chromeでアプリを読み込もうとすると、 一部のファイルはすぐにロードされますが、まったくロードが完了しないものもあります。 Chromeは、12個のJSファイルをロードしようとし続け、「停止」を押すまでページをレンダリングしません。
下の画像のように、停止ボタンを押すと、HTMLがレンダリングされ、JSファイルが失敗します。
試行ごとに異なるJSファイルが失敗することに注意してください!それは毎回スタックする同じファイルではありません!
失敗したファイルのヘッダーを調べると、「注意:リクエストはまだ完了していません」と表示されます。ファイルが「受信中」の状態で何分も続く場合があります。
これが楽しい部分です。ストップを押した後、オムニバーに焦点を合わせてEnterキーを押すと、すべてのJSファイルが 瞬時にロード そして、アプリケーションは正常に動作します!
サーバー側では、Apache、PHPおよびMySQLを使用しています。Apacheで何かを誤って設定しましたか?
過酷な2日後のステータス:zilch、何も、なだ、これは私を狂わせる。別のマシンからコードを実行してみました。Apacheのキャッシュ設定を変更して、JavaScriptの無数のものを変更しましたが、何も機能しませんでした。最悪なのは、問題の場所を特定できないことです。
1つの可能性として、キープアライブを有効にしていて、正常に動作していない可能性があります。私はこれを見たことがあります。ブラウザは、サーバーへの最大接続数(通常は6)を確立して、最初の数ファイル(CSS、JSなど)をダウンロードします。これらの接続は、タイムアウトするまで解放されません。私の症状はあなたの症状とまったく同じではありませんでした-タイムアウトは20秒で、その後すべてが6のバッチでロードされます-しかし、これが原因である可能性があります。
Apache構成(ほとんどのシステムではhttpd.conf)で、KeepAlive
行を探し(または、欠落している場合は追加して)、Off
に設定します。
答えではなく、ここで問題のトラブルシューティングを行います。
私が試したいことの1つは、タグを1つずつコメント化して再読み込みして、しきい値がどこにあるかを確認することです。また、これはおそらくサーバー構成の問題であるため、試行ごとに再起動して、いわば白紙の状態にします。つまり、試行間で状態を保持しません。
お好みの言語のスクリプトからさまざまなJavascriptをリクエストすることで、より多くのヒントを得ようと思います。理想的には、リクエスト間で数ミリ秒待ってスクリプトを1つずつ(たとえばcurlで)GETしてみます。ここでもしきい値に達すると思います。たとえば、1秒あたり1つのスクリプトを取得しても機能しますが、リクエストが近づきすぎると、サーバーがスタックします。
それでも手掛かりがない場合は、tcpdumpを使用してブラウザーとサーバー間のトラフィックを監視します。さて、これは少し低すぎるかもしれません!
しかし、おそらくnetstatを使用して、ブラウザがサーバーと並行して開いているリソース数を取得する接続の数を確認し、同時実行制限に達したかどうかを確認します。
これが解決策であって申し訳ありませんが、あなたがいくつかのアイデアを得てくれることを願っています。結局、あなたの問題が何であるかを知りたいと思います!
ブラウザーで要求した後、まったく同じメッセージ「警告:要求はまだ完了していません」が表示されました。
Angular 1アプリケーションにフィードされた15 MBのJSONオーダーのリクエスト自体。このリクエストには約2秒かかりました。リクエストが完了した直後、Angularダイジェストサイクルは12秒以上ブラウザをブロックしました(これはリクエスト中のプロファイリングで表示されます)。その間Chromeはこの「注意:リクエストはまだ完了していません"実際に既に終了している間、リクエストでメッセージ。
Content-Lengthヘッダーを確認します。サーバーが誤った値を渡す可能性があります-実際のコンテンツの長さを超えています。
https://www.stevesouders.com/cuzillion/ で問題をエミュレートしてみてください-それはあなたが問題の側面を言っているはずです-chromeまたはサーバー
いくつかの良い答えがありますが、これを行うための確実な方法が必要な場合は、PHPを使用してすべてのスクリプトを一度に送信できます。問題がサーバーへの接続が多すぎる場合は、次のようなhtmlコードを追加できます。
_<script type="text/javascript" src="scripts/scripts.php />
_
そして、_scripts.php
_では、include()
関数を使用して、次のようにすべてのJavaScriptファイルを含めます。
_<?php
header(''); // control all your headers
include('jquery-1.9.1.min.js');
// rest of scripts
?>
_
他に何も機能せず、問題が過剰な接続である場合、これは機能するはずです。