优化/改进客户端代码

optimize/improve client side code

本文关键字:客户端 代码 优化      更新时间:2023-09-26

我有一个项目列表,我需要记录它在列表中的位置-即排序顺序,我正在运行下面的代码来绑定停止事件-然而,由于有180个字段,这在我的机器上相当慢,这可以优化吗?

$(".survey-fields").bind("sortstop", function(event, ui) {
        $(".report-field").each(function(i) {
            $(".sorted-fields").find("#" + $(this).data("field-id")).val(i + 1);
        });
    });

代码说明:我有一个可排序div的列表,每个div都有一个id(db唯一id,一个数字),然后我有另一个隐藏的列表,我将新位置复制到相关字段中

以前我使用字段名作为字符串,而不是现在使用的id,不确定这是否会使它变得非常慢。我有jquery ui 1.8.16

<div data-field-id="41" class="display-wrapper report-field">
    <div class="field-header field-move">
        <span>name: fieldname</span> | <span>max length:
                100</span><span class="ui-icon ui-icon-carat-2-n-s field-icon field-toggle" title="show/hide details of this field"></span>
    </div>
 <div> whatever here...
    </div>
</div>

我可以做的任何其他解决方案…基本上,我需要通过ajax请求

向我的controller发送一个ID列表和它们的排序顺序

如果没有正确的分析,很难说。这个

  $(".sorted-fields").find("#" + $(this).data("field-id"))

可以简化为

  $("#" + $(this).data("field-id"))

因为id在文档范围内是(应该)唯一的。另一个想法是:如果您无论如何都在使用ajax,那么填充表单字段有什么意义?为什么不使用一个简单的对象,它可以用json发送到服务器。像

    var sortOrder = {}
    $(".report-field").each(function(i) {
        sortOrder[$(this).data("field-id")] = i + 1;
    });