【发布时间】:2013-09-20 03:11:11
【问题描述】:
在实例化类的 N 个对象的 .cshtml 文件中创建站点使用的数据对我来说更容易(与创建 .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),但根据我的观察,两个大小大致相同的列表(书籍 > 国家户外图书奖和书籍 > Hugos(科幻小说),第一个访问原始json 文件和另一个转换为 json 的 C#/Razor 类,以相同的速度加载(我没有使用秒表之类的,但我正在寻找更多只是为了更快的一般感觉)。我的下一个类别(激励奖),我将加载一个 htm 文件,而不是做任何后端流水线的东西,然后看看。
如果有的话,cshtml文件比NOBA json文件快;它甚至比 Music > CMA json 文件还要快,后者的项目要少得多。我不知道为什么会这样,除非 Razor 引擎针对此类操作进行了超优化。
更新 2
直到现在我才想到它,但这是使用 jsonified 的 C# 类而不是直接访问 json 文件的优势 - 我可以(大概我还没有尝试过)在其中设置一个断点当它被 $.getJSON('getHugos.cshtml') 调用时,C# 代码会逐步执行它
【问题讨论】:
-
只要你有一个继续,复制/粘贴或循环数据以使其足够大以给你一个有效的测试应该不难。这样做并告诉我们什么是最快的!
-
我会等到第一个 cshtml 文件完成后,看看它是否比其他文件更快捷或更流畅。我应该在一周左右的时间内完成;我只是想知道那里是否有人已经确定了。
标签: asp.net json performance razor getjson