사용자가 양식에 정보를 입력 할 수있는 웹 페이지가 있습니다. 페이지의 일부 코드뿐만 아니라 코드의 일부 jQuery를 사용하고 있으므로 페이지 속도를 높이는 방법 (로드하는 데 약 30 초 소요)을 찾아야합니다. 나는 웹 사이트의 로딩 속도를 높이기위한 몇 가지 아주 쉬운 수정이 있다고 확신한다. 아래는 사이트의 일부 스 니펫이다. 어떤 도움이라도 사이트 로딩 속도를 높이는 데 도움이됩니다.jQuery를 사용하는 asp.net 페이지의 속도를 높이는 방법
<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);
}
}
특정 병목 현상이 있습니까? 브라우저가 서버에서 응답하기를 기다리는 경우 서버 측 코드를 프로파일 링하고 너무 오래 걸리는 부분 (메소드 호출 등)을 확인하십시오.브라우저가 많은 작업을 수행하는 경우, FireBug와 같은 기능을 사용하여 너무 오래 걸리는 작업 (리소스로드, 스크립트 실행 등)을 볼 수 있습니다. 가장 큰 성능 병목 지점은 어디입니까? – David
@ David 나는 병목이 어디에 있는지 잘 모르겠습니다. 페이지로드 (로드 막대는 100 %입니다). 그러나 페이지가 표시되기 전에 약 30 초 동안 빈 페이지에 위치합니다. – EvanGWatkins
이것은 단순한 질의 일 뿐이며 성능상의 문제는 아니지만 getJQueryCode에서 StringBuilder를 사용합니다. 방법은 불필요합니다. 문자열 연결은 더 좋을 것입니다. 컴파일러는 컴파일 할 때 모든 작업을 수행하지만 런타임시에도 연결할 항목이 몇 개 밖에 없기 때문에 더 좋습니다. 이 경우 자바 스크립트 코드에 개행 문자를 포함시키기 위해이 작업을 수행 한 것처럼 보입니다. 가장 좋은 방법은 아마도 다중 행 문자열 리터럴 (http://msdn.microsoft.com/en-us/library/aa287596(v=vs.71) .aspx)을 사용하는 것입니다. –