web-dev-qa-db-ja.com

Chrome JSファイルの読み込みが完了しない

私は<head>セクションに約12個の短いJSファイルを含むアプリを書いています(承知しているので、それらをマージして<body>の終わりの直前に移動する必要があります。本番環境でこれらに移動します)。

問題は、Chromeでアプリを読み込もうとすると、 一部のファイルはすぐにロードされますが、まったくロードが完了しないものもあります。 Chromeは、12個のJSファイルをロードしようとし続け、「停止」を押すまでページをレンダリングしません。

下の画像のように、停止ボタンを押すと、HTMLがレンダリングされ、JSファイルが失敗します。

JS Load errors

試行ごとに異なるJSファイルが失敗することに注意してください!それは毎回スタックする同じファイルではありません!

失敗したファイルのヘッダーを調べると、「注意:リクエストはまだ完了していません」と表示されます。ファイルが「受信中」の状態で何分も続く場合があります。

enter image description here

これが楽しい部分です。ストップを押した後、オムニバーに焦点を合わせてEnterキーを押すと、すべてのJSファイルが 瞬時にロード そして、アプリケーションは正常に動作します!

サーバー側では、Apache、PHPおよびMySQLを使用しています。Apacheで何かを誤って設定しましたか?

過酷な2日後のステータス:zilch、何も、なだ、これは私を狂わせる。別のマシンからコードを実行してみました。Apacheのキャッシュ設定を変更して、JavaScriptの無数のものを変更しましたが、何も機能しませんでした。最悪なのは、問題の場所を特定できないことです。

21

1つの可能性として、キープアライブを有効にしていて、正常に動作していない可能性があります。私はこれを見たことがあります。ブラウザは、サーバーへの最大接続数(通常は6)を確立して、最初の数ファイル(CSS、JSなど)をダウンロードします。これらの接続は、タイムアウトするまで解放されません。私の症状はあなたの症状とまったく同じではありませんでした-タイムアウトは20秒で、その後すべてが6のバッチでロードされます-しかし、これが原因である可能性があります。

Apache構成(ほとんどのシステムではhttpd.conf)で、KeepAlive行を探し(または、欠落している場合は追加して)、Offに設定します。

16
Dave Morrissey

答えではなく、ここで問題のトラブルシューティングを行います。

私が試したいことの1つは、タグを1つずつコメント化して再読み込みして、しきい値がどこにあるかを確認することです。また、これはおそらくサーバー構成の問題であるため、試行ごとに再起動して、いわば白紙の状態にします。つまり、試行間で状態を保持しません。

お好みの言語のスクリプトからさまざまなJavascriptをリクエストすることで、より多くのヒントを得ようと思います。理想的には、リクエスト間で数ミリ秒待ってスクリプトを1つずつ(たとえばcurlで)GETしてみます。ここでもしきい値に達すると思います。たとえば、1秒あたり1つのスクリプトを取得しても機能しますが、リクエストが近づきすぎると、サーバーがスタックします。

それでも手掛かりがない場合は、tcpdumpを使用してブラウザーとサーバー間のトラフィックを監視します。さて、これは少し低すぎるかもしれません!

しかし、おそらくnetstatを使用して、ブラウザがサーバーと並行して開いているリソース数を取得する接続の数を確認し、同時実行制限に達したかどうかを確認します。

これが解決策であって申し訳ありませんが、あなたがいくつかのアイデアを得てくれることを願っています。結局、あなたの問題が何であるかを知りたいと思います!

5
idrarig

ブラウザーで要求した後、まったく同じメッセージ「警告:要求はまだ完了していません」が表示されました。

Angular 1アプリケーションにフィードされた15 MBのJSONオーダーのリクエスト自体。このリクエストには約2秒かかりました。リクエストが完了した直後、Angularダイジェストサイクルは12秒以上ブラウザをブロックしました(これはリクエスト中のプロファイリングで表示されます)。その間Chromeはこの「注意:リクエストはまだ完了していません"実際に既に終了している間、リクエストでメッセージ。

4
Jos de Jong

Content-Lengthヘッダーを確認します。サーバーが誤った値を渡す可能性があります-実際のコンテンツの長さを超えています。

https://www.stevesouders.com/cuzillion/ で問題をエミュレートしてみてください-それはあなたが問題の側面を言っているはずです-chromeまたはサーバー

1

いくつかの良い答えがありますが、これを行うための確実な方法が必要な場合は、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
?>
_

他に何も機能せず、問題が過剰な接続である場合、これは機能するはずです。

0
Ramsay Smith