4

ASP .NET MVC 2を使用して作成されたページは、読み込みに1.7秒かかります。以下に示すように、13個のjsファイルが含まれています。Firebugは、すべてのjsファイルのロードが304応答を返すことを示していますが、13個のファイルがあるため、ページのロード時間が大幅に増加する可能性があります。Chrome監査の赤いアラートは、jsファイルを結合することをお勧めします。

ASP.NET MVC 2を自動的に使用するか、他の方法でロード時間を短縮するために、それらを1つのファイルに結合するにはどうすればよいですか?プロジェクトには、それらを置き換えることができるように個別のjsファイルが必要ですが、それらはおそらく単一のjsファイルとして配信される必要があります。

以下に示すように、jqgrid、jquery、jquery-ui、tinymce、およびいくつかのjqueryプラグインjsファイルが使用されます。Visual Web DeveloperExpress2010が使用されます。アプリケーションはMono2.10/ApacheおよびWindows/IISで実行されています

site.masterに含まれるもの:

    <%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
    <!DOCTYPE html>
    <html>
    <head runat="server">
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=0.1" />
        <link rel="stylesheet" href="../../themes/redmond/jquery-ui-1.8.12.custom.css" type="text/css" />
        <link href="../../Scripts/jqgrid/css/ui.jqgrid.css" rel="stylesheet" />
        <link href="../../Content/Css/Site.css" rel="stylesheet" />
        <asp:ContentPlaceHolder ID="HeadContent" runat="server" />
        <title>
            <asp:ContentPlaceHolder ID="TitleContent" runat="server" />
        </title>
        <script type="text/javascript">
            "use strict";
            var BASE_URL = '<%= ResolveUrl("~/") %>';
        </script>
        <script src="<%= Url.Content("~/Scripts/jquery/jquery-1.7.1.js")%>" type="text/javascript"></script>
        <script src="<%= Url.Content("~/Scripts/jquery-ui-git.js")%>" type="text/javascript"></script>
        <script src="<%= Url.Content("~/Scripts/i18n/jquery.ui.datepicker-et.js")%>" type="text/javascript"></script>
        <script src="<%= Url.Content("~/Scripts/jquery.contextmenu-fixed2.js")%>" type="text/javascript"></script>
        <% if (CurUser.GetLanguage() == "EST")
           { %>
        <script src="<%= Url.Content("~/Scripts/jqgrid/js/i18n/grid.locale-et.js")%>" type="text/javascript"></script>
        <% }
           else
           { %>
        <script src="<%= Url.Content("~/Scripts/jqgrid/js/i18n/grid.locale-en.js")%>" type="text/javascript"></script>
        <% } %>
        <script type="text/javascript">
            $.jgrid.no_legacy_api = true;
            $.jgrid.useJSON = true;
    </script>
    <script type="text/javascript" src="<%= Url.Content("~/Scripts/jqgrid/jquery.jqGrid.src-multiselect1-deleteandsortpatches.js")%>"></script>
    <script type="text/javascript" src="<%= Url.Content("~/Scripts/jqgrid/jQuery.jqGrid.dynamicLink.js")%>"></script>
    <script src="<%= Url.Content("~/Scripts/json2.js")%>" type="text/javascript"></script>
    <script src="<%= Url.Content("~/Scripts/jquery.form.js")%>" type="text/javascript"></script>
    <script src="<%= Url.Content("~/Scripts/TinyMCE/tiny_mce_src.js")%>" type="text/javascript"></script>
    <script src="<%= Url.Content("~/Scripts/TinyMCE/jquery.tinymce.js")%>" type="text/javascript"></script>
    <script src="<%= Url.Content("~/Scripts/myscripts.js")%>" type="text/javascript"></script>
    <script type="text/javascript">
    var 
        $grid;
    $(function() {
        "use strict";

<% if (TempData["Message"]!=null) {
setTimeout( function() {
   showMessage ( '<%= TempData["Message"] as string %>');
...

アップデート

答えとしてOlegの提案を試しましたが、エラーが発生しました。jQueryが下の画像に示すように定義されていません。これを修正する方法は?IEコンソールにエラーは表示されません。

jQueyは未定義です

4

5 に答える 5

0

ClosureCompilerを使用して1つの実験を行うことをお勧めします。

まず、ページで使用するすべてのJavaScriptコードとすべてのインラインJavaScriptコードを連結してみることができます。原因のファイルの順序を保持する必要があります。結果には2つのバージョンがあります。1つは。を使用しCurUser.GetLanguage() === "EST"、もう1つはを使用しCurUser.GetLanguage() !== "EST"ます。

JavaScriptファイルを1つ作成したら、ClosureCompilerをcompilation_levelof ADVANCED_OPTIMIZATIONSここを参照)とともに使用して、未使用のJavaScriptコードをすべて削除できます。その結果、ページで実際に使用するjQuery、jQuery UI、およびその他のライブラリのサブセットを取得できます。結果のJavaScriptコードは別のページと同じようになりますが、非常に小さく、個別のファイルとして最適化することができます。

于 2012-09-23T12:40:01.517 に答える
0

head.jsの使用をお勧めします。

個別の.jsファイルを使用すると、ページの読み込み時間を短縮できます。次のようなファイルを1つ含めるだけです。

head.js("/path/to/jquery.js", "/google/analytics.js", "/js/site.js", function() {     
   // all done     
});
于 2012-09-23T12:15:48.867 に答える
0

これらのタイプの状況を克服するために、あなたは多くのテクニックを持っています。いくつかは:

ページ固有のJS:要件に応じてJavaScriptファイルを追加してみてください。ページで使用されていない不要なJSを追加しないでください。

GZIP圧縮: ページと静的jsおよびcssファイルにGZIP圧縮を適用します。

キャッシング:サーバーレベル(IIS)では、JSやCSSなどの静的ファイルにキャッシングを適用できます。

http://sixrevisions.com/web-development/decrease-webpage-load-times/

複数のJavaScriptファイルを1つのJSファイルに結合します

幸運を !!

于 2012-09-23T12:12:27.167 に答える
0

http://combres.codeplex.com/を使用すると、個別のjavascriptファイルを保持し、実行時に結合して縮小することができます。

本物の御馳走を動作します。

彼らはasp.net4.5に似たようなものをロールバックしたようです:

http://weblogs.asp.net/scottgu/archive/2011/11/27/new-bundling-and-minification-support-asp-net-4-5-series.aspx

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

于 2012-09-23T12:44:07.780 に答える
0

ファイルをまとめる

現在の主要なブラウザのほとんどは、各ホスト名ごとの同時接続の数を6つに制限しています。つまり、6つのリクエストが処理されている間、ホスト上のアセットに対する追加のリクエストがブラウザによってキューに入れられます。

バンドルすると、最初のページのヒットダウンロード時間を大幅に改善できます。

バンドルは、複数のCSSファイルとJavascriptファイルを単一のCSSファイルとjavascriptファイルに結合することにより、サーバーへの個々のHTTPリクエストの数を減らします。

このサイトには、5つの簡単なステップでアプリケーションにバンドルを追加する方法に関する優れたチュートリアルがあります:http ://websitespeedoptimizations.com/Bundling.aspx

于 2016-01-28T21:06:28.133 に答える