MVC FormCollection性能速度



我正在处理一个具有动态生成标记的页面。因此,我不知道表单上有哪些字段可用。因此,POST方法使用FormCollection,而不是创建视图模型。一旦收到POST,程序就会快速运行。

我的问题是:点击表单上的"提交"大约需要10-15秒才能到达控制器POST操作第一行的断点。在我的场景中,表单上有800个输入字段。只为800个字段创建FormCollection真的需要这么长时间吗?是否有任何方法可以简化流程或缩短响应时间?

编辑:

IE探查器表示大部分时间都花在JQuery CSS选择器上。如果我删除所有的CSS,页面会很快工作。为什么CSS选择器在发布回服务器之前运行?我可以禁用它吗?

编辑2:探查器现在显示JQuery 1.6.4.min.js中花费的时间,函数为"k"。我认为这只是一个内部变量查找。我还发现,从输入字段中删除"size"one_answers"maxlength"属性可以使页面快速响应(hooray)。。。除了我需要这些用于客户端验证。我仍在努力寻找一种提高速度的方法,或者删除属性并保留一些方法来限制客户端字段的输入长度。

编辑3:我深入研究了jquery-1.6.4.min.js,找到了函数k。根据Edit 2,添加/删除"maxlength"one_answers"size"属性会产生所有差异(33K ms而不是3k ms)。然而,函数K不应该做太多。。。因为这些不是nodetype===1,第一个IF应该失败,在下一行的函数中返回。

function k(a,c,d)
    {
        if(d===b&&a.nodeType===1)
        {
            var e="data-"+c.replace(j,"-$1").toLowerCase();
            d=a.getAttribute(e);
            if(typeof d=="string")
            {
                try
                {
                    d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)
                }
                catch(g){}
                f.data(a,c,d)
            }
            else 
                d=b
        }
        return d
    }

我刚刚创建了一个包含1000个字段的表单,从我提交时起,控制器可以在不到一秒钟的时间内访问每个字段。

这就是我创建字段的方式:

<script language="javascript" type="text/javascript">
$(document).ready(function () {
    for (var i = 0; i < 1000; i++) {
    $('<input/>').attr({ type: 'text', id: 'test'+i, name: 'test'+i,value:'test '+i }).appendTo('#fields');
    }
    });
</script>

这就是行动:

    public ActionResult TestFields()
    {
        for (int i = 0; i < 1000; i++)
        {
            if (Request.Form[i] != string.Format("test{0}", i))
            {
                throw new Exception("bad value received");
            }
        }
            return View();
    }

用表单值填充FormCollection似乎不是问题。我在本地网络上有短值和测试。如果你有更长的值和较慢的网络,这可能是问题所在。如果每个值都是1KB,则需要发送800KB。

从Mystere Man的评论中,发现客户端在某种程度上进行了验证,这个链接解决了问题:http://forums.asp.net/t/1523883.aspx/1/10?Disabling+客户端+侧面+验证+开启+提交+按钮+

基本上,我禁用了提交按钮上的验证。这允许"maxlength"one_answers"size"属性在用户键入时工作,但阻止POST上的任何客户端验证。这种行为似乎很好,因为服务器将在处理输入时再次进行验证。POST的平均时间从33秒变为2秒。

同样在这里:禁用MVC 3中的客户端验证";取消";提交按钮

最新更新