클라이언트가 ASP 페이지에 액세스할 때 필요한 정보를 클라이언트에 제공하는 두 가지 방법이 있습니다.
응용 프로그램 외부 리소스에서 데이터를 검색하려면 더 많은 처리 단계가 필요하기 때문에 응용 프로그램 공간 내부에서 데이터를 작성할 때보다 시간이 많이 걸립니다.
브라우저로 보내려는 데이터가 이전 요청에 의해 이미 준비되어 있는 경우 사용자의 응용 프로그램이 이를 캐시에 저장하면 데이터를 더 빨리 검색할 수 있습니다. 이런 형식의 캐시를 출력 캐시라고 합니다. 출력 캐시는 많은 다른 요청에 대해 동일한 형식으로 동일한 데이터를 반환하기를 원할 때 특히 적합합니다. 예를 들어 입력 양식을 개발할 때 가장 일반적인 작업은 지속적인 데이터를 드롭다운 목록 상자의 구성원으로 모으는 것입니다. 데이터를 업데이트하면 자동으로 양식에 반영되므로 HTML 페이지에 직접 항목을 작성할 때 이 방법을 선호합니다.
다음 스크립트는 출력 캐시의 보기입니다. 이 보기에서 getSportsListBox 함수는 지속된 데이터에서 목록 상자를 작성합니다. 목록 상자는 응용 프로그램 공간에 추가되어 개별적으로 목록 상자를 채울 때와 비교하여 클라이언트가 더 빨리 목록 상자에 액세스할 수 있습니다. 여기서는 서버에 데이터 원본 이름(DSN)이 "Sports"로 정의되었다고 가정합니다.
<%@ LANGUAGE=JavaScript %><HTML><BODY>
<FORM METHOD=post>
What is your favorite sport? <%= getSportsListBox() %>
<P>
<INPUT TYPE=submit>
</FORM>
</BODY>
</HTML>
<%
function getSportsListBox()
{
SportsListBox = Application("SportsListBox")
If (SportsListBox != null) return SportsListBox;
crlf = String.fromCharCode(13, 10)
SportsListBox = "<select name=Sports>" + crlf;
SQL = "SELECT SportName FROM Sports ORDER BY SportName";
cnnSports = Server.CreateObject("ADODB.Connection");
cnnSports.Open("Sports", "WebUser", "WebPassword");
rstSports = cnnSports.Execute(SQL);
fldSportName = rstSports("SportName");
While (!rstSports.EOF)
{ SportsListBox = SportsListBox + " <option>" + fldSportName + "</option>" + crlf; rstSports.MoveNext(); }
SportsListBox = SportsListBox + "</select>"
Application("SportsListBox") = SportsListBox
return SportsListBox;
}
%>
일부 환경에서는 응용 프로그램이 동일한 데이터에 대해 많은 다른 요청을 받지만 각 요청마다 데이터의 표현을 변경해야 합니다. 이런 경우에는 입력 캐시를 사용합니다. 입력 캐시를 사용하면 데이터를 저장하지만 데이터의 표현을 저장하지는 않습니다. VBScript가 제공하는 Dictionary 개체나 ADO레코드 집합을 사용하여 데이터를 캐시함으로써 이를 수행할 수 있습니다.
다음 보기는 응용 프로그램에 연결 없는 레코드 집합을 추가하여 데이터를 캐시하는 방법을 보여 줍니다. 응용 프로그램 공간 내의ASP 스크립트는 데이터베이스에서 데이터를 검색하기 보다는 레코드 집합에 액세스할 수 있습니다. 다음 두 개의 ASP 스크립트는 이런 기술을 보여 줍니다.
Global.asa로부터 발췌했습니다.
<OBJECT ID=rsCustomers PROGID="ADODB.Recordset" RUNAT="Server" SCOPE="Application">
</OBJECT><!--METADATA TYPE="TypeLib" FILE = "C:\Program Files\Common Files\system\ado\msado15.dll"
-->
<% SQL = "SELECT CompanyName, City FROM Customers" Cnn = "DSN=AdvWorks" rsCustomers.CursorLocation = adUseClient rsCustomers.Open SQL, Cnn, adOpenStatic, AdLockReadOnly rsCustomers.ActiveConnection = Nothing
Set myCustomers = Application("rsCustomers").Clone Set CompanyName = myCustomers("CompanyName") Set City = myCustomers("City")
Do Until myCustomers.EOF%><B><%= CompanyName %></B> is located in <B><%= City %></B>.<P>
<%
myCustomers.MoveNext
Loop
%>
응용 프로그램의 Global.asa 파일은 레코드 집합을 작성하고 이를 응용 프로그램 공간에 추가합니다. ASP 스크립트는 레코드 집합을 채우고 ActiveConnection 속성을 Nothing으로 설정하여 연결 없음으로 만듭니다. ASP 스크립트는 이 레코드 집합을 복제하여 그 값을 반복합니다. 이렇게 하면 데이터베이스 자체에 액세스하는 것보다 더 빠릅니다. 이 기술은 레코드 집합을 채우는 데 사용할 데이터가 비교적 안정적인 상태라는 사실을 사용자가 알고 있는 경우에 적합합니다.