asp页面中的许多javascripts标签使性能降低

时间:2014-01-29 07:47:15

标签: javascript asp.net

我在VS2013上有一个asp.net 4.5(C#)页面。在这个页面中,我使用一个循环来itrate抛出我的一些对象。对于每个对象(产品)我有一个文本框(使用type = textbox输入),我使用jquery来使它成为一个微调器。

我需要在每个产品的循环中使用它,因为我希望每个微调器都有来自对象的参数(min,max,步长,十进制等)。

循环就是这样的:

foreach ( Product product in getCart().ItemsList() ) {
  String spinnerId = "spinner_" + product.Code;%>
      <input id="<%:spinnerId %>" name="<%:product.Code%>">
       <script type="text/javascript" language="javascript">
            setSpinner('<%:spinnerId%>','<%:product.min%>','<%:product.max%>','<%product.step%>');
       </script>
    <%}%>

在页面的头部我有:

function setSpinner(id,minVal,maxVal,stepVal){
            j("#"+id).spinner({
                min: minVal,
                max: maxVal,
                step: stepVal,
            });
        }

问题是,当我的循环经过几次(10-15)时,页面加载非常purley并且“onready”函数需要几秒钟才能执行,这意味着需要一些字段隐藏显示2秒,只有disaperas(这包括ajaxcontroltoolkit控件,如popupextender面板等)。

为了简单起见,javascript代码本身无关紧要。 如果您尝试这样的事情:

    <%for (int i=0;i<100;i++){%>
<script type="text/javascript" lang="javascript">
</script>
<%}%>

同样的问题发生了。

如果您多次使用它,即使是一个空的javascript块也会让页面花费很长时间才能完成。

为什么50 \ 100空的javascript块会使页面滞后如此糟糕?我可以做些什么来解决这个问题,考虑到我必须在我的每个对象数据中使用javascript代码?

2 个答案:

答案 0 :(得分:0)

首先看看@ David的ans,这肯定是一个更好的方法

@roland清除了这是丑陋的。 即使你需要将js注入网页。最好注入一个js对象和包含所有对象的数组,然后在page load内的一个块内迭代它并完成你的工作。

var ps = getCart()。ItemsList()。选择(p =&gt; new {  p.Id /...所有你的财产...... / });

现在使用任何json库(如Newtonsoft.Json)在网页/脚本标记内注入ps。

var jsonString = JsonConvert.SerializeObject(ps);

答案 1 :(得分:0)

尝试在data- HTML属性中添加所需信息,并一次调用javascript。像

这样的东西
foreach ( Product product in getCart().ItemsList() ) {
  String spinnerId = "spinner_" + product.Code;%>
      <input id="<%:spinnerId %>" class="spinner" name="<%:product.Code%>" data-min="<%:product.min%>" data-max="<%:product.max%>" data-step="<%:product.step%>">
<%}%>

然后使用jQuery迭代“spinner”类输入:

$("input.spinner").each(function(intput){
  $(this).spinner({
      min: $(this).data('min'),
      max: $(this).data('max'),
      step: $(this).data('step'),
  });
});