首页 文章

如何加速使用jQuery的asp.net页面

提问于
浏览
1

我有一个允许用户将信息输入表单的网页 . 我在页面上以及后面的代码中使用了一些jQuery,我需要找到一种加速页面的方法(大约需要30秒才能加载) . 我相信有一些非常简单的修复方法可以加快网站的加载速度,下面是网站的一些信息 . 任何帮助都可以加快网站的加载速度 .

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">

  <script type="text/javascript">
      $(document).ready(function () {
          var i = $("table.newRequirementClass tr td:contains('Description')").next();

          i.textLimiter({
              maxLength: 255,
              elCount: 'elCount'
          });
          $("#submitMIFields").hide();
          $("#submitMIFields").toggle(false);
          $("[id$='chkMI']").change(function () {
              $("#submitMIFields").toggle("slow");
          });

          $(".MIHead").hide();
      });

      function Count(text, maxLength) {
          if (text.value.length > maxLength) {
              text.value = text.value.substring(0, maxLength);
          }
      }
   </script>
<div style="text-align: left; width: 80%;">
        <h2 runat="server" id="h2Caption">New Requirement</h2>
        <asp:Panel ID="ErrorSummary" runat="server">
        <asp:Label runat="server" ID="lblErrors" />
        <asp:ValidationSummary id="valSummary" runat="server"
        HeaderText="Please Revise The Following Errors:"
        ShowSummary="true" DisplayMode="List" />

        </asp:Panel>
        <asp:DetailsView ID="dvNewRequirement" 
            runat="server"  CssClass="newRequirementClass"
            AutoGenerateRows="False" 
            Width="100%"
            DefaultMode="Insert"
            SkinID="SampleDetailsView" 
            CssSelectorClass="PrettyDetailsView" 
            OnItemInserting="dvNewRequirement_ItemInserting" 
            OnModeChanging="dvNewRequirement_ModeChanging" 
            ondatabound="dvNewRequirement_DataBound" >
            <FieldHeaderStyle Width="15em" Font-Bold="True"/>
            <Fields>
                <asp:TemplateField HeaderText="Status">
                    <InsertItemTemplate>
                    <asp:Label ID="lblStatus" Text="Pre-Solicitation" runat="server" />

                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Vehicle:" Visible="false" >
                    <InsertItemTemplate>
                        <asp:DropDownList ID="ddlVehicles"
                            runat="server" 
                            DataTextField="strDescription" 
                            DataValueField="strCode" 
                            DataSource='<%# CodeLists.Vehicles() %>'
                            AppendDataBoundItems="true">
                            <asp:ListItem Text="" Value="" />
                        </asp:DropDownList>
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Office:">
                    <InsertItemTemplate>
                        <Proj:OrgTree id="OrgTree" runat="server" Filter="false" Visible='<%# (AuthenticatedUser.CanCreateMis() != true) ? true : false %>'
                        SelectedValue = '<%# (AuthenticatedUser.IsCUS() != true) ? BaseControl.LoginOffice : Guid.Empty %>' />
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Customer Office:">
                    <InsertItemTemplate>
                        <Proj:OrgTree id="customerOrgTree" Filter="false" runat="server"
                        SelectedValue = '<%# (AuthenticatedUser.CanCreateMis() == true) ? BaseControl.LoginOffice : Guid.Empty %>' />
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Description:" ControlStyle-CssClass="Description">
                    <InsertItemTemplate>
                        <asp:TextBox runat="server" ID="txtDescription"
                            TextMode="multiLine" onKeyUp="Count(this,257)" onChnage="Count(this,257)"
                            Width="90%"/>
<div id="elCount"></div> </InsertItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Procurement Type:"> <EditItemTemplate> <asp:DropDownList ID="ddlProcurementTypeList" runat="server" DataTextField="strDescription" DataValueField="strCode" DataSource='<%# CodeLists.ProcurementTypes() %>' AppendDataBoundItems="true"> </asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Type:"> <InsertItemTemplate> <asp:DropDownList ID="ddlTypeList" runat="server" DataTextField="strDescription" DataValueField="strCode" DataSource='<%# CodeLists.Types() %>' AppendDataBoundItems="true"> <asp:ListItem Text="" Value="" /> </asp:DropDownList> </InsertItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Est Total Value:"> <InsertItemTemplate> <asp:TextBox ID="txtEstValue" runat="server" /> <ajax:FilteredTextBoxExtender ID="FilteredTextBoxExtender1" TargetControlID="txtEstValue" FilterType="Numbers,Custom" ValidChars=",." runat="server" /> </InsertItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Customer Contact Date:"> <EditItemTemplate> <asp:TextBox ID="txtCustomerContact" runat="server" /> <ajax:CalendarExtender ID="calCustomerContact" runat="server" TargetControlID="txtCustomerContact" /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Req Start Date:"> <EditItemTemplate> <asp:TextBox ID="txtReqStartDate" runat="server" /> <ajax:CalendarExtender ID="calReqStartDate" runat="server" TargetControlID="txtReqStartDate" /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Previous Number:"> <EditItemTemplate> <asp:DropDownList ID="ddlAwardList" runat="server" DataTextField="strAwardNumber" DataValueField="strAwardNumber" DataSource='<%# CodeLists.AwardNumbers() %>' AppendDataBoundItems="true"> <asp:ListItem Text="None" Value="" /> </asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Currency"> <EditItemTemplate> <asp:DropDownList ID="ddlCurrencyList" runat="server" DataTextField="strCultureName" DataValueField="strCulture" DataSource='<%# CodeLists.Currency() %>' AppendDataBoundItems="true" > </asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="?"> <EditItemTemplate> <asp:CheckBox runat="server" ID="chkMI" /> <div id="submitMIFields"> <Proj:MI runat="server" ID="initialMI" /> </div> </EditItemTemplate> </asp:TemplateField> <asp:CommandField InsertText="Submit" ShowCancelButton="False" ShowInsertButton="True" ControlStyle-CssClass="NewReqSubButton" /> </Fields> </asp:DetailsView> </div> protected void Page_Load(object sender, EventArgs e) { if (AuthenticatedUser.CanCreateMis()) { CheckBox chkMI = (CheckBox)dvNewRequirement.FindControl("chkMI"); chkMI.Checked = true; chkMI.Enabled = false; runjQueryCode(); } } private string getJQueryCode() { StringBuilder sb = new StringBuilder(); sb.AppendLine("$(document).ready(function() {"); sb.AppendLine("$('#submitMIFields').show();"); sb.AppendLine(" });"); return sb.ToString(); } private void runjQueryCode() { ScriptManager requestSM = ScriptManager.GetCurrent(Page); if (requestSM != null && requestSM.IsInAsyncPostBack) { ScriptManager.RegisterClientScriptBlock(this, typeof(Page), Guid.NewGuid().ToString(), getJQueryCode(), true); } else { Page.ClientScript.RegisterClientScriptBlock(typeof(Page), Guid.NewGuid().ToString(), getJQueryCode(), true); } }

2 回答

  • 0

    我相信有一些非常简单的修复方法可以加快网站的加载速度

    这真的取决于,因为这是使用webforms性能改进通常需要很多工作 . Webforms是最难调试和扩展的Web框架之一 .

    通常可以通过以下方式改进性能

    • 改进了查询计划

    • 减少远程调用(IO,DB等)

    • 减少了加载的数据量 .

    viewstate是webforms的第一大性能杀手 . 你可以做的任何事情来减少viewstate的大小是一件好事 .

    如果您一次只显示几条记录,则只加载要显示的记录 . 页面通过数据库中的数据,而不是UI . 当您从数据库加载100或1000个记录然后显示1-20个记录时,检索到的所有记录都存储在viewstate中,而不仅仅是显示给用户的记录 .

    执行的查询数也会降低性能 . 假设您有一个gridview,当您绑定到gridview时,您可以使用数据源控件将查找值列表加载到下拉列表中 . 每次下拉列表绑定时,数据源都将执行 . 创建像这样的选择n 1问题非常容易 .

    最后,如果查询格式不正确,或者数据库架构未经过优化(索引等),查询可能需要几秒甚至几分钟而不是几毫秒来执行 .

  • 0

    挖掘出Dynatrace AJAX版本的副本(http://ajax.dynatrace.com/ajax/en/)

    观点状态有多大,它的反序列化需要多长时间?

    有多少表单字段依赖于viewstate中的数据以及下拉列表的大小等 .

    我的猜测是你正在推送过多的数据,然后必须通过Javascript反序列化并填充到表单中 .

    您使用的是哪种浏览器,使用当前的Chrome或Firefox版本是否更快?

相关问题