</script> <link href="file.css"> </head> [...] "> </script> <link href="file.css"> </head> [...] "> </script> <link href="file.css"> </head> [...] " />

ほとんどがajaxで作られたWebサイトにリソースを適切に読み込むには?

ALL 私のリソースを基本レイアウト/テンプレートビューにロードする方がよいでしょうか、またはajaxでロードする部分的なビューで直接ロードする方が良いですか?

例:

_レイアウト:

[...]

    <head>
        <script src="file.js"></script>
        <link href="file.css">
    </head>

[...]

OR

_レイアウト:

[...]

    <head>
    </head>

[...]

partialView(AJAXで後で読み込まれます):

<div>
    <script src="file.js"></script>
    <link href="file.css"> 
</div>
2

2 答え

あなたが通常やっていることは、いくつかのスクリプトリソースをビューバックのリストにプッシュして、テンプレートを取得してそのリストを通過させ、スクリプトインクルードを生成することです。

部分的に:

@{
    ViewBag.ScriptIncludes = ViewBag.ScriptIncludes ?? new List();
    ViewBag.ScriptIncludes.add("script1.js");
}

レイアウト(_Layout.cshtml)では、

@if (ViewBag.ScriptIncludes != null)
{
    foreach (string url in ViewBag.ScriptIncludes)
    {
        <script src="@url" type="text/javascript"></script>
    }
}

通常の状況では、これはあなたが非常にいい部分にスクリプトを関連付けることを可能にし、ページの読み込み時にページ上に存在する部分だけをリフレッシュするのは良い考えです。

スクリプトはページにプリロードする必要があります。 ajaxを介してスクリプトリソースを取得し、それをページに注入することで、スクリプトをリロードするべきではありません。理想的には、ajaxにhtmlをもらうことはできませんが、これを受け入れる人もいます。あなたは、より多くのスクリプトではなく、ページにhtmlを注入したいだけです。部分ビュー内のアイテムにイベントハンドラがある場合は、個々の要素ではなくコンテナにイベントハンドラをアタッチすることを検討してください。

しかし、ビューを再読み込みしているとすれば、スクリプトを頭に入れておく方が良いと思います。これにより、後で競合するスクリプトが見つからないことが保証されます。サイトは、本質的に、最初に読み込むための小さなオーバーヘッドをユーザーに負担させるアプリケーションですが、更新する必要はありません。

1
追加された
問題は、私のすべてのウェブサイトがAJAXにあることです。ほぼすべてのビューが読み込まれます。
追加された 著者 Jean-Philippe Leclerc,
私はすべてをリロードすると言っているわけではありません(少なくとも同じ時間ではありません...)、私はbackbone.jsをルーティングに使用しているので、バックボタンを破ることはありません!
追加された 著者 Jean-Philippe Leclerc,
とにかくすべてをリロードしている場合、何がAJAXのポイントですか?この前にページのリソースをすべて事前にロードしていた場合は意味があります。あなたはJavaScriptの状態に本当に注意する必要があります。おそらく、すべてのスクリプトが頭の中に含まれているように(より良いが単一のjsファイル)、あなたのサイトのどこかに矛盾した状態がないことを知るように、あなたのサイトをコードする方が良いでしょう。また、戻るボタンを壊さないようにしてください;)
追加された 著者 Matt Esch,
おそらく、動的スクリプトの読み込みは悪くはないが、一部のスクリプトで部分的なビューを取得するだけでなく、より構造化されたメカニズムが必要であると言及する必要があります。各ページのjsonデータを取得してクライアント上でレンダリングし、JavaScriptモジュールを非同期にロードする方が、
追加された 著者 Matt Esch,

私はあなたの文脈に依存していると思う。レイアウトに配置すると、すべてのページ(ビュー)に必要なリソースをより良くしたいとします。また、ビューに固有のリソースがある場合は、ビューにロードすることができます。
また、URLヘルパーを使用してリソースのURLを取得していることを確認してください。そうしないと、展開後に問題が発生します。

1
追加された
スクリプト "y"を持っているビュー "x"をロードし、それを複数回(古いものを上書きする)ロードすると、それは悪いですか?
追加された 著者 Jean-Philippe Leclerc,
ええ、その悪い。複数のビューに関連する場合は、テンプレートからロードする必要があります。
追加された 著者 Jayantha Lal Sirisena,