我有一个允许用户在表单中输入信息的网页。我在页面上以及后面的代码中使用了一些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%"/><br />
<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);
}
}
答案 0 :(得分:0)
我确信有一些非常简单的修复方法可以加快网站的加载速度
这真的取决于,因为这是使用webforms性能改进通常需要很多工作。 Webforms是最难调试和扩展的Web框架之一。
通常可以通过
进行性能改进viewstate是使用webforms的第一个性能杀手。你可以采取的任何措施来减少视图状态的大小是一件好事。
如果您一次只显示几条记录,则只加载要显示的记录。页面通过数据库中的数据,而不是UI。当您从数据库加载100或1000条记录然后显示1-20条记录时,所有检索到的记录都存储在视图状态中,而不仅仅是显示给用户的记录。
执行的查询数量也会降低性能。假设您有一个gridview,当您绑定到gridview时,您可以使用数据源控件将查找值列表加载到下拉列表中。每次下拉列表绑定时,数据源都将执行。创建像这样的选择n + 1 问题非常容易。
最后,如果查询格式不正确,或者数据库架构未经过优化(索引等),查询可能需要几秒甚至几分钟而不是毫秒才能执行。
答案 1 :(得分:0)
挖掘出Dynatrace AJAX版本(http://ajax.dynatrace.com/ajax/en/)
视图状态有多大,它的反序列化需要多长时间?
有多少表单字段依赖于viewstate中的数据以及下拉列表的大小等。
我的猜测是你推送了太多的数据,然后必须通过Javascript反序列化并填充到表单中。
您使用的是哪种浏览器,使用当前的Chrome或Firefox版本是否更快?