1

我更容易在 .cshtml 文件中创建我的站点使用的数据,该文件实例化一个类的 N 个对象(而不是创建一个 .json 文件)。在之前创建原始 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"},...]

...但众所周知,假设事情有时会给我们带来麻烦。

我知道你在想什么——只要测试一下就知道了;但是我还没有创建足够多的 cshtml 记录来比较这两种方法,但是想知道是否有人知道加载原始 json 文件的速度是否比将 C# 类转换为 json 数据快得多?如果是这样,我可能不得不恢复我以前的方法......

更新

您可以自己检查(www.awardwinnersonly.com),但根据我的观察,两个大小大致相同的列表(书籍>国家户外图书奖和书籍>雨果(科幻小说),第一个访问原始 json 文件和另一个将 C#/Razor 类转换为 json,以相同的速度加载(我没有使用秒表之类的,但我正在寻找更多只是一般感觉更快)。我的下一个类别(Spur 奖),我将加载一个 htm 文件,而不是做任何后端装配线的东西,然后看看。

如果有的话,cshtml文件比NOBA json文件快;它甚至比 Music > CMA json 文件还要快,后者的项目要少得多。我不知道为什么会这样,除非 Razor 引擎针对此类操作进行了超优化。

更新 2

直到现在我才想到它,但这是使用 jsonified 的 C# 类而不是直接访问 json 文件的一个优势——我可以(大概我还没有尝试过)在那个 C# 代码中放置一个断点是当它被 $.getJSON('getHugos.cshtml') 调用时,单步执行它

4

1 回答 1

1

拥有一个原始 JSON 文件可以工作并节省从 C# 序列化为 JSON 所需的一些计算。此外,让 IIS 不运行 .NET 管道而是更高效的“读取文件并写入响应流”本机代码节省了额外的开销,因为它不是动态的。但问题是您现在无法手动或通过作业创建原始 JSON 文件。如果您打算手动维护它,请确保它是可行的并且不会经常更改。

如果是这样,并且您希望保留这种在客户端上存储所需数据的性能更高的方法,您将不得不维护一段单独的代码,该代码将使用适当的值刷新该文件,这样您就不会保存无论如何,C# 最终都会(尽管编写它不会是一项困难的周期性任务并且性能更高)。

于 2013-09-17T22:41:07.847 回答