1

(.json ファイルを作成するのではなく) クラスの N 個のオブジェクトをインスタンス化する .cshtml ファイルでサイトが使用するデータを作成する方が簡単です。以前に生のjsonファイルを作成した後、最近この方法に変更しました。

.json であれ .cshtml であれ、データを読み取るコードは同じです。

$.getJSON('Content/noba.json', function (data) {
            $.each(data, function (i, dataPoint) {
    . . .

$.getJSON('getHugos.cshtml', function (data) {
            $.each(data, function (i, dataPoint) {
    . . .

おそらく、生の json を次のように読み取ります。

. . .
{
    "category":"Outdoor Literature",
    "title":"Almost Somewhere: Twenty-Eight Days on the John Muir Trail",
    "author":"Suzanne Roberts",
    "kindle":"B008SAOT4C",
    "hardbound":"--",
    "paperback":"0803240120",
    "imghref":"http://www.amazon.com/exec/obidos/ASIN/B008SAOT4C/garrphotgall-20\" target=\"_blank\" ><img height=\"180\" width=\"120\" src=\"http://images.amazon.com/images/P/B008SAOT4C.01.MZZZZZZZ.jpg\" alt=\"Suzanne Roberts Book Cover\" /></a>"
  },
. . .

...次のようなものよりもパフォーマンスが向上します。

@{
    var books = new List<BookClass>
    {
        new BookClass{Year=2013, YearDisplay="blankYearDisplay", Category="2013", Title="blankTitle", Author="blankAuthor", KindleASIN="blankKindleASIN", HardboundASIN="blankHardboundASIN", PaperbackASIN="blankPaperbackASIN", ImgSrc="blankImgSrc"},
. . .
        new BookClass{Year=2001, YearDisplay="2001", Category="Best Novella", Title="The Ultimate Earth", Author="Jack Williamson", KindleASIN="B00DV8TSHO", HardboundASIN="--", PaperbackASIN="1612421547", ImgSrc="http://images.amazon.com/images/P/B00DV8TSHO.01.MZZZZZZZ"}
    };
    Response.ContentType = "application/json";
    Json.Write(books, Response.Output);
}

...これは、ASP.NET を介して次のように変換する追加の手順を実行する必要があります。

[...,{"Year":2013,"YearDisplay":"2013","Category":"Best Novel","Title":"Redshirts","Author":"John Scalzi","KindleASIN":"B0079XPUOW","HardboundASIN":"0765316994","PaperbackASIN":"0765334798","ImgSrc":"http://images.amazon.com/images/P/B0079XPUOW.01.MZZZZZZZ"},...]

...しかし、誰もが知っているように、物事を推測することは時々私たちをトラブルに巻き込みます。

私はあなたが何を考えているか知っています - ただそれをテストして調べてください; しかし、2 つのアプローチを比較できるほど十分な cshtml レコードをまだ作成していませんが、C# クラスを json データに変換するよりも生の json ファイルをロードする速度が著しく速いかどうかを知っている人はいますか? もしそうなら、私は以前の方法論に戻らなければならないかもしれません...

アップデート

自分で確認できます (www.awardwinnersonly.com) が、私の観察によると、ほぼ同じサイズの 2 つのリスト (書籍 > National Outdoors Book Awards および Books > Hugos (Science Fiction)、生の json ファイルにアクセスする最初のリスト、およびもう 1 つの C#/Razor クラスは json に変換され、同じ速度で読み込まれます (ストップウォッチなどは使用しませんでしたが、どちらが速いかという一般的な感覚を探しています)。 )、バックエンド アセンブリ ラインの作業を行うのではなく、htm ファイルを読み込み、それについて確認します。

どちらかといえば、cshtml ファイルは NOBA json ファイルよりも高速です。これは、項目数がはるかに少ない Music > CMA json ファイルよりもさらに高速です。Razor エンジンがそのような操作などのために超最適化されていない限り、なぜそうなるのかはわかりません。

更新 2

今まで考えたこともありませんでしたが、これは json ファイルに直接アクセスするよりも、json 化された C# クラスを使用する利点です。 $.getJSON('getHugos.cshtml') によって呼び出されたときにステップスルーします

4

1 に答える 1

1

生の JSON ファイルがあれば機能し、C# から JSON へのシリアル化に必要な計算を節約できます。さらに、IIS で .NET パイプラインを実行するのではなく、より効率的な "ファイルの読み取りと応答ストリームへの書き込み" ネイティブ コードを動的に実行しないようにすることで、追加のオーバーヘッドが節約されます。しかし、問題は、生の JSON ファイルを手動またはジョブで作成しなければならないことです。手動で保守する予定がある場合は、それが実行可能であり、あまり頻繁に変更されないことを確認してください。

その場合、クライアントで必要なデータを保存するこのよりパフォーマンスの高い方法を維持したい場合は、そのファイルを適切な値で更新する別のコードを維持する必要があるため、次の行を保存しません。とにかく最終的にはC#です(ただし、定期的に書くのは難しいタスクではなく、パフォーマンスが向上します)。

于 2013-09-17T22:41:07.847 に答える