0

私は楽しみのために単純な JavaScript ゲーム エンジンを作成していますが、作業中に一種の厄介な問題に遭遇しています。

現在、javascript ファイルを含める方法は、javascript を「メイン」と呼ぶ index.html ページを作成し、すべての JavaScript ファイルと<script type="text/javascript"タグを<head>セクションに含めることです。

これはかなりうまく機能していますが、おそらくページの 6 回に 1 回程度の更新で、JavaScript ファイルの 1 つを読み込めません。次のようなエラーが表示されますGET http://localhost:8000/js/Input.js。すべてのファイルが結合されて縮小されると正常に動作するので、これはファイルの非同期ロードと、すべてがロードされる前にゲームが開始されることに関係があると思いますか? よくわかりませんが。現在、約 25 個のファイルを含めていますが、追加すると問題が悪化するようです。

JavaScriptファイルを含めるより良い方法はありますか? 私はこれをできるだけ簡単に行えるようにしようとしているので、サーバー側で大量の作業を行う必要はありません。(現在、PythonでSimpleHTTPサーバーコマンドを使用しています)

4

1 に答える 1

1

エラーが HTTP エラーであり、URL が失敗時と成功時とまったく同じである場合、問題は JS ではなく Web サーバーに関連しています。

ただし、 $.getScriptのようなものを使用していて、エラーが初期化されていない変数に関連している場合は、すべてのスクリプトをループして含め、それぞれに対してgetScriptを実行している可能性があります。その場合、getScriptは AJAX リクエストを使用して JS をロードするため、スクリプトの実行順序は保証されません。これを解決するために、このケースは開発環境で実行しているときのみのように思われるため、パフォーマンスの低下を気にしない場合は、リクエストをチェーンして、前の (必要な) JS ファイルがロードされる前にリクエストが行われないようにすることができます。スクリプト ファイルを順次実行します。

var dfr = $.Deferred().resolve();
var scripts = ["script1.js", "..."];

$.each(scripts, function(i, script) {
    dfr = dfr.pipe(function() {
        $.getScript(script);
    });
});
于 2012-11-08T03:56:36.877 に答える