본문으로 바로가기

asp 속도 개선법

category 웹/웹.php.asp 2008. 4. 17. 15:24

[속도개선법-2]
*Response.Redirect 대신 Sever.Transfer를 사용하라

Response.Redirect는 Sever에서 브라우저에 요청 후 Sever로 돌아오나. Sever.Transfer는 Server내부에서 처리됩니다.


*Directory URL에 후행 슬러시 사용

후행 슬래시를 생략하면 브라우저는 서버에 요청하여 디렉터리를 요구하고 있다는 응답을 받습니다. 그러면 브라우저는 URL에 슬래시를 첨가하여 두번째 요청을 하며 이때서야 서버가 그 디렉터리에 대한 기본 문서로 응답합니다.


*Sever 변수사용금지

서버 변수에 액세스하면 웹 사이트가 서버에 특별한 요청을 하게 되어 요청한 것만이 아니라 모든 서버 변수를 수집하게 됩니다. 속도가 저하됨
ex : < Response.Write(“Data”)>


*< OBJECT> Tag를 사용하라

Server.CreateObject는 즉시 개체를 만듭니다. 이 개체를 나중에 사용하지 않는다면 결국 리소스를 낭비하는 것입니다. < object id=objname> 태그는 objname을 선언하지만 이 개체의 메서드 또는 속성 중 하나가 처음 사용될 때까지 objname은 실제로 만들어지지 않습니다.
Ex : < OBJECT runat=server progid=ADODB.Connection id=dbcon> < /OBJECT>


*일괄 처리 인라인 스크립트 및 Response.Write 문

응답버퍼링을 켜지 않으면 이 문(statement)이 여러 작은 패킷으로 네트워크를 통해 브라우저로 데이터를 쓰게 됩니다. 이 과정은 매우 느립니다. 작은 양의 스크립트 및 HTML을 여기 저기 배치하면 스크립트 엔진과 HTML간의 전환이 일어나서 성능이 떨어집니다. 가깝게 모여있는 인라인 식(expression)을 Response.Write를 한 번 호출하는 것으로 교체합니다. 특히 게시판과 같이 Until 문을 사용할 때 사용하시면 좋은 효과를 볼것입니다.
Ex)
<table>
<% For Each fld in rs.Fields %>
<th><%=fld.Name%></th>
<%
Next
While Not rs.EOF
%>
<tr>
<% For Each fld in rs.Fields %>
<td><%=fld.Value%></td>
<% Next %>
</tr>
<% rs.MoveNext
Wend %>
</table>


아래에 있는 더 효율적인 코드는 행마다 응답 스트림에 쓰기가 하나 있습니다. 모든 코드는 하나의 VBScript 블록에 포함됩니다.
<table>
<%
For each fld in rs.Fields
    Response.Write ("<th>" & fld.Name & "</th>" & vbCrLf)
Next
While Not rs.EOF
    Response.Write ("<tr>")
    For Each fld in rs.Fields
        Response.Write("<td>" & fld.Value & "</td>" & vbCrLf)
    Next
    Response.Write "</tr>"
End
%>

</table>



*세션 개체의 현명한 사용

ASP는 자동으로 웹 서버에 접근하는 모든 사용자를 위한 세션을 작성합니다. 각 세션은 약 10 KB의 메모리 오버헤드(세션에 저장된 모든 데이터의 상단에 있는)를 갖고 있어서 모든 요청을 약간 늦춥니다. 세션은 구성할 수 있는 시간 제한 기간동안 유효하며 이 제한 시간은 일반적으로 20분입니다.
세션이 필요하지 않은 컨텐츠(도움말 화면, 방문자 영역 등)를 세션이 꺼진 별도의 ASP 응용 프로그램으로 옮길 수 있습니다. 각 페이지를 기초로 해당 페이지에 세션 개체가 필요 없다는 것을 알리기 위해 다음과 같은 지시어를 ASP 페이지 상단에 놓을 수 있습니다.


< % @EnableSessionState=False %>
이 지시어를 사용하게 되는 이유 중 하나는 세션이 프레임셋과 관심있는 문제를 만드는 것입니다. ASP는 언제나 한번에 한 세션에서 하나의 요청만이 실행되도록 보장합니다. 따라서 브라우저가 한 사용자를 위해 여러 페이지를 요청하면 한번에 단지 하나의 ASP 요청만이 세션에 전달되기 때문에 세션 개체에 액세스할 때 멀티스레딩 문제를 방지하지만 모든 페이지는 동시에 페인트되지 않고 차례로 순차적 방법으로 페인트됩니다. 어떤 프레임셋 페이지가 세션에 의지하지 않는 다면 ASP가 @EnableSessionState=False 지시어를 사용하도록 하십시오