加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 为什么ASP.NET MVC默认的模型绑定器很慢?做好工

发布时间:2020-12-16 00:25:40 所属栏目:asp.Net 来源:网络整理
导读:在当前的项目中,客户要求以两种方式回答问卷的可能性:使用向导(一次一个问题)和列表(所有问题一次)以单一形式。两种方式都已经实现。 使用AJAX(这是超级快速),手册章节从数据库中加载了这些问题。目前最大的一章有230个问题(每个都有4个HTML输入字段 –
在当前的项目中,客户要求以两种方式回答问卷的可能性:使用向导(一次一个问题)和列表(所有问题一次)以单一形式。两种方式都已经实现。

使用AJAX(这是超级快速),手册章节从数据库中加载了这些问题。目前最大的一章有230个问题(每个都有4个HTML输入字段 – 输入/文本,选择等)。如果用户选择这样的章节以列表格式回答,< form>将包含约920个字段以发布到服务器。

我正在做一个AJAX POST请求,通过jQuery的serialize方法传递数据:

data: $("#questions :input").serialize()

此序列化需要207.143ms才能完成。我在Firefox中使用Firebug调试此值:

console.profile();
$("#questions :input").serialize();
console.profileEnd();

再次这是超快的…

当使用以下操作方法对接收到的数据进行保湿时,会出现问题:

public async Task<ActionResult> ListSaveAsync(IEnumerable<AnswerViewModel> questions)

如您所见,发布的数据是绑定到IEnumerable< AnswerViewModel>的数据。的问题。 AnswerViewModel只有4个字段来存储每个答案。

事情是,在点击“保存”按钮以在此操作方法上点击一个断点之后,需要相当长的时间(正好是10秒),也就是说,大概在模型绑定中花了10秒钟。

一件重要的事情是,我使用史蒂夫·桑德森的@Html.BeginCollectionItem helper来帮助从HTTP POST实现ViewModel集合属性。查看数据在ViewModel(Keys)中如何获取:

你知道我可以尝试做哪些优化?

我想到了4个解决方法:

>仅保存修改后的问题。为此,我需要在加载列表时将每个答案值存储在数据属性中,并将其与实际值进行比较,当提交< form>正如这个人建议here。
>在客户端创建AnswerViewModel JavaScript对象,并将它们传递给action方法。这会减轻模型粘合剂吗?
>滚动我自己的模型绑定器…但我真的不知道它是否会比ASP.NET MVC附带的默认值更快。从我读过的默认模型绑定器做了很多反思来设置值/水合物的动作模型参数,这可能是瓶颈。
>使用FormCollection并枚举通过按键获取每个值的已发布数据,并手动执行验证,如here所示。

你还建议什么?

更新1

我选择了3,并实现了一个自定义的模型绑定器:AnswerModelBinder:IModelBinder并使用它在具体的操作方法:

public async Task<ActionResult> ListSaveAsync(
             [ModelBinder(typeof(AnswerModelBinder))]List<AnswerViewModel> questions)

现在需要10秒才能完成只需2秒钟。

>看起来像默认模型绑定器验证检查[ModelState]对性能有很大的影响。

更新2

我刚刚经历过一次:有一个List< Guid>作为一个动作参数,通过一个$ .getJson调用只传递59个字符串需要?3秒钟来触发动作方法第一行的断点。将参数类型更改为List< string>使整个事情都在眨眼间工作。

一个有趣的事实是,在动作方法中我做到了这一点:

List<Guid> userIds = resources.Select(Guid.Parse).ToList();

并转换资源列表< string>列表< Guid>瞬间。

肯定有一些bug与ASP.NET模型绑定。我只想知道是什么…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读