ASP 최적화, ASP 캐시 기술
1. ASP 캐시 란 무엇입니까/왜 캐시
ASP 기술 초기에 웹 사이트가 설립되면 ASP 동적 웹 기술과 무작위 수정 및 무료 HTTP 제어가 제공하는 편의를 느낄 수 있습니다. 그러나 방문 횟수가 증가함에 따라 사이트 액세스가 느려지고 느려지고 IIS는 점점 더 빈번하다는 것을 알게 될 것입니다. 다음으로, 더 좋은 데이터베이스 교체, 인덱스 설정, 스토리지 절차 작성 등과 같은 ASP를 최적화해야합니다. 이러한 조치 중 일부는 비용 압력을 증가시킬 필요는 없지만 일부 비용 압력 (예 : SQL에 대한 클러스터 액세스)은 반드시 그 효과가 아닙니다.
웹 액세스의 압력에 직면하여 가장 경제적 인 방법은 캐시 최적화 기술을 사용하여 웹의 서비스 압력을 완화하는 것입니다.
웹 액세스량 증가는 일반적으로 다음 자원 수요의 빠른 성장을 의미합니다.
1. 네트워크 카드 트래픽 증가는 더 많은 CPU 처리 네트워크 트래픽 및 네트워크 I/O 스레드를 소비해야합니다.
2. 데이터베이스 연결을 더 자주 열고 닫아야합니다 (데이터베이스 기술이 사용되는 경우 -일반적으로 ASP는 데이터베이스를 데이터 저장으로 사용합니다), 리소스를 심각하게 소비하는 것의 수 및 경쟁 자원으로 인한 교착 상태 트랜잭션은 네트워크 I/O 또는 CPU 소비를 증가시킵니다.
3. 세션이 사용되는 경우, IIS는 상태를 유지하기 위해 더 많은 메모리를 소비하며 메모리 소비는 물리적 메모리가 충분하지 않아 물리적 메모리와 보조 메모리 사이의 교환이 발생하여 코드 실행이 중지됩니다
4. 액세스의 적시 응답으로 인해 웹 페이지 액세스 실패가 발생하여 사용자가 새로 고침하여 CPU, 메모리 및 기타 리소스의 요구를 악화시킵니다.
실제로 일반적인 웹 응용 프로그램을 고려할 때 동적 코드 실행의 여러 번 불필요합니다.
2. ASP 캐시의 분류
승인없이 요약하면 ASP의 캐시는 두 가지 범주로 나눌 수 있습니다.
1. 파일 캐시
So -Called File Cache는 논리적 판단에 따라 특정 ASP의 특정 실행이 크게 변경되지 않습니다. 웹 리디렉션에서 기술로의 정적 파일에 액세스하여 데이터베이스 리소스를 줄이기위한 요구를 충족시킬 수 있습니다. 예를 들어, 많은 포럼이 스티커에 답장 할 때 정적 파일을 다시 말한 다음 donews.com 포럼과 같은 리디렉션이 있습니다. Castle에는 부작용 (이점)이 있습니다. Google과 같은 검색 엔진에는 쉽게 포함 할 수 있습니다. 일부 보도 자료 시스템은이 기술을 채택했습니다.
2. 파일 필름 브레이크 캐시
SO -CALLED 파일 캐시는 또한 논리적 판단을 기반으로합니다 (일반적으로 리소스를 소비하기 위해 소비 해야하는 대규모 대용량 데이터베이스 쿼리)는 일정 기간 동안 변경되지 않으므로 저장할 수 있습니다. 파일 형태의 데이터는 데이터베이스의 부담을 증가시키지 않기 위해 파일을 읽음으로써 데이터를 얻을 수 있습니다. 예를 들어, 우리는 일반적으로 일부 데이터를 XML 형식으로 저장 한 다음 XSLT 기술을 사용하여 디스플레이를 구현합니다 (XML 처리는 일반적으로 많은 양의 CPU 리소스가 필요하므로 IE는 일반적으로 고객의 CPU에서 처리하기 위해 클라이언트에게 직접 XML을 읽습니다). 이것이 CSDN의 포럼이 처리되는 방식입니다.
3. 메인 메모리 캐시
또한 메모리에서 캐시를 다루는 것을 고려하고 메모리에 적시에 응답 해야하는 컨텐츠를 저장하면 즉시 빠르게 스토리지에서 전송하십시오. 많은 액세스 요구가 여러 개의 작은 페이지 또는 메인 스토리지에 집중되면 메인 메모리 캐시를 사용하여 웹 액세스 성능을 크게 향상 시키려고합니다.
3. 캐시를 달성/사용하는 방법
캐시를 구현하려면 다음과 같은 문제를 고려해야합니다.
1. 짧은 시간에 어떤 페이지가 변경되지 않습니까?
자신의 사이트를 분석하면 많은 페이지가 있습니다. 예를 들어, 사이트에는 일반적으로 뉴스 및 정보 열이 있습니다.이 열에는 일반적으로 사이트 유지 관리 직원의 특정 시간에 정보가 게시되며 페이지를 거의 변경하지 않습니다. 이 페이지는 정적 파일이있는 캐시에 적합합니다. 실제로, 소위 보도 자료 시스템이 수행되므로 원래 동적 ASP 페이지를 변환하기 위해 이러한 시스템의 아이디어를 참조 할 수도 있습니다.
2. 해당 페이지는 모든 방문에 대해 생성되어 동일한 논리를 생성합니다 (즉, 방문자를 구별하지는 않습니다).
뉴스 및 정보와 같은 열을 제외하고 모든 방문자는 인터페이스를보고 포럼 및 기타 소비 자원과 같은 리소스의 적용은 일반적으로 통합 논리 생성으로 설계 될 수 있습니다 (동일한 게시물, Zhang Sanli 및 Sisi는 동일합니다. )) 정적 캐시로 구현할 수 있습니다. 또한 서버 처리 용량, 즉 처리를위한 클라이언트 브라우저 외에도 데이터를 중단하고 스크립트 기술을 사용하는 것을 고려할 수 있습니다.
3. 캐시의 비용과 수확을 사용하십시오.
주로 공간 변경 시간 (응답). 캐시 기술을 사용하여 웹 서버의 응답 능력을 향상시키기 위해 자주 필요한 컨텐츠를 사전 처리하고 더 중요한 것은 방문자의 호의를 얻습니다.
가격은 웹 공간에 대한 수요가 증가하고 액세스 효과에 영향을 줄 수 있다는 것입니다.
그러나 나는 적절한 캐시가 단점보다 크다고 생각합니다.
4. 해당 장소에서 캐시를 사용하는 대신
동적 쿼리 페이지, 각 사람의 쿼리 컨텐츠는 다르므로 디스플레이 결과는 동일하지 않으므로 쿼리 결과 캐시를 생성 할 가능성이 없으므로 캐시가 더 복잡하고 캐시 사용률의 맨 아래에 있습니다. 관리 비용 1 1 쿼리 키워드. 그러면 이러한 키워드 관리에 해당하는 서신도 번거 롭습니다).
넷째, 인스턴스 분석
제안 포럼의 원래 레이아웃이 다음과 같습니다.
루트 디렉토리에서 :
Default.asp 홈페이지, 일반적으로 본질, 권장 사항 등
Listborad.asp이 파일에는 모든 열의 이름과 소개가 표시되면 Plate 아래에 열을 나열합니다.
listthread.asp 파일은 모든 스티커를 나타내는 매개 변수를 가지고 있지 않으며 특정 조각의 모든 스티커를 나타내도록 메인을 가지고 다닙니다. Subbid가 특정 열의 게시물을 나타내도록 전달되는 경우. 주제의 페이지 매김을 표시하기 위해 페이지 매개 변수를 가지고있는 경우.
Viewthread.asp에는 특정 스티커 컨텐츠가 나열됩니다. 우리는 게시물이 연설로 표시되고 모든 스티커를 따르는 모든 스티커가 뒤에 나열되어 있다고 가정합니다. ID 매개 변수는 표시 될 게시물입니다.
respl.asp는 특정 게시물에 응답하고 매개 변수 ID를 가지고 특정 게시물에 응답합니다.
다른 토론은 없습니다.
위의 모든 ASP/PHP를 사용하여 모든 ASP 파일을 실행하려면 데이터베이스 작업, 빈번한 쿼리 및 여러 쿼리가 필요하다는 것을 알 수 있습니다. 쿼리 데이터베이스는 결국 성능 감소, 응답 속도 감소이며 방문자에게 느린 탐색 영향은 웹의 품질에 도움이되지 않는다는 것을 알아야합니다. 더 중요한 것은 A와 B의 두 사람의 경우 viewthread.asp를 방문했습니다. ID가 일관되면 여러 번 동일한 컨텐츠를 볼 수 있습니다 (브라우저에서 수신 한 HTML 코드는 거의 동일합니다). 이를 위해 동일한 컨텐츠에서 서버는 데이터베이스 연결을 열고 쿼리, 레코드를 읽고 레코드 및 데이터베이스 연결이 닫혀 있음을 표시해야합니다. 본질 본질 본질 더 많은 사람들이 더 많은 사람들에게 접근 할 경우, 최종 결과는이 사람들이 서버 리소스를 악화시킵니다. 실제로 동일한 콘텐츠에 대한 중복 노동은 캐시 기술로 최적화 될 수 있습니다. 예를 들어:
Repy.asp의 내용을 제출 한 후 정적 함수를 호출하여 viewthread_xxxx.htm과 같은 정적 html 파일에 정적 컨텐츠를 생성 한 다음 viewthread.asp를 방문하면 시스템이 자동으로 재생됩니다 해당 정적 파일 viewthreadxxxx.htm. 이런 식으로, 게시물이 최신이 아닌 경우, 그는 항상 새로운 제출이 있으면 정적 파일로 업데이트됩니다.
Listborad.asp는 정적을 구현할 수도 있습니다. 운반 할 수있는 매개 변수를 분석하고 캐시 파일 이름을 Listboard_xx.htm으로 설정하고 새 열을 추가 할 때 Listboard_xxx.htm을 업데이트 할 수 있습니다. ListThread.asp는 비슷하지만 더 많은 매개 변수로 인해 많은 캐시 파일이 있습니다. listthread.asp를 캐시하려면 subbid = xxx & page = 2를 보려면 해당 정적 파일이 listthread_xxx_p2.htm입니다. 기본값도 마찬가지입니다.
그렇다면 언제 업데이트 할시기를 판단 하는가? 몇시에 업데이트해야합니까?
讨论 listthread.asp? subbid = xxx & page = 2, 我们在执行 listthread.asp 俄时候提取 page, 然后探测 listthread_xxx_p2.htm 是否存在, 如果不存在就调用静态生成功能进行生成该文件 最终重定向到此정적 파일. 여기에 존재한다는 것은 새로운 컨텐츠의 출현으로 인해 업데이트해야한다는 것을 의미합니다.
파일은 어떻게 존재할 수 없습니까? 삭제. 새 스티커를 게시하고 스티커 삭제 및 움직이는 스티커를 게시 할 때 ListRestread_xxx_p2.htm과 같은 모든 정적 파일을 삭제할 수 있습니다. 이런 식으로 캐시에 알림이 표시됩니다.
정적 파일을 생성하는 방법은 여전히 남아있는 한 가지 문제가 여전히 남아 있습니까?
우리는 이전에 언급 한 것과 동일한 내용을 알았습니다.我们可以将改造前的 default.asp ault listthread.asp 等拷贝一个副本 等拷贝一个副本, 取名为 default_d.asp 、 listthread_2.asp, 且在同一个目录中 且在同一个目录中 (理论上 listthtrad.asp? subid = 123 同 listthread_d.asp? SubID = 123의 액세스 결과는 동일한 내용이됩니다.) 정적 파일을 생성 해야하는 논리에서 웹 액세스 요청에 의해 수정되기 전에 사본을 호출하고 HTML 코드를 얻고이를 정적 파일. 이 웹 요청은 실제로 실제 뷰어가 정적 콘텐츠에 액세스하기 전에 실제로 동일합니다. 서버 자체는 출력 될 HTML에 의해 검사 된 다음이 코드를 반환하여 파일 작동 기능을 정적 파일로 저장합니다. 이런 식으로 캐시 파일은 실제 뷰어 앞에 생성되었습니다.
이러한 체계는 원래 레이아웃에 거의 닿지 않으며 변형으로 인해 404와 같은 오류가 거의 발생하지 않습니다. 둘째, 정적 파일은 Google과 같은 검색 엔진에서 사이트를 쉽게 포함시킬 수 있도록 도와줍니다. 왜 안 돼?
마지막으로, 웹 액세스를 통해 ASP 프로그래밍 환경에서 많은 사람들이 XMLHTTP 구성 요소를 사용하여 액세스하여 많은 문제를 일으킬 것임을 상기시켜줍니다. XMLHTTP 자체가 요청을 캐시 하여이 구성 요소를 통해 요청에 의해 얻은 컨텐츠가 발생하여 논리적 혼란을 초래합니다. 따라서 웹 요청 리소스를 구현하려면 XML Server HTTP 객체 또는 WinHTTP 구성 요소를 선택해야합니다.
ASP의 캐시 기술을 사용하면 웹 사이트 성능이 크게 향상 될 수 있습니다.
이러한 기술을 도입하기 전에 ASP의 캐시 기술이 무엇인지 설명해 봅시다.
SO -CALLED CACHE는 캐시를 사용하여 데이터를 저장하는 공간을 열어줍니다. 쿼리 작업을 수행하고 쿼리 결과를 캐시에 넣으면 데이터를 빠르게 방문 할 수 있습니다. 또한 데이터를 캐시에 넣지 않으면이 쿼리를 다시 실행하면 서버가 데이터베이스에서 프로세스를 소비하여 정렬했습니다.
데이터가 캐시에 저장되면 다시 쿼리 할 때의 시간은 주로 데이터를 표시 할 때입니다.
다시 말해서, 종종 서버의 캐시에 변경 해야하는 데이터를 더 적게 변경해야하지만, 종종 캐시에 액세스하는 데이터를 넣어야합니다.
이제 우리는 먼저 서버에서 ASP를 사용하는 기술에 대해 논의합니다.
캐시 기술.
클라이언트에 많은 데이터 (정적, 즉 변경 사항이 적음)가있는 경우 서버의 캐시 기술 사용을 고려할 수 있습니다. 이 기술은 특히 디스플레이 스타일 일관성을 가진 웹 사이트에 특히 적합합니다 (Huh, 비 메인 스트림 웹 사이트의 경우 사용하기 쉽지 않습니다.)
실제로 구현 방법은 특히 간단한 예를 살펴보십시오.
이것은 책 분류를 표시하는 예입니다
DisplayBooks.asp 파일 :
< %@ language = javas
cript %>
<html>
<body>
<form 메소드 = post>
책 분류;; <getBooksListbox () %>
<p>
<입력 유형 = 제출>
< %
함수 getBooksListbox () ()
{{
BookSlistbox = 응용 프로그램 (BookSlistbox)
if (bookslistbox! = null) return bookStristbox;
crlf = string.fromcharcode (13, 10)
bookslistbox = <select name = books> + crlf;
sql = select * looks Order에서 이름별로;
cnnbooks = server.createobject (adodb.connection);
cnnbooks.open (books, admin,);
rstbooks = cnnbooks.Execute (SQL);
fldbookname = rstbooks (bookname);
while (! rstbooks.eof) {
BooksListbox = BookSlistbox + <옵션> +
fldbookname + + crlf;
rstbooks.movenext ();
}
BookSlistbox = BookSlistbox +
응용 프로그램 (BookSlistbox) = BookSlistbox
BooksListbox를 반환합니다.
}
%>
실제로 매우 간단합니다. 매우 간단한 응용 프로그램 기술을 사용하며 차이점은 한 문장에 있습니다.
응용 프로그램 (BookSlistbox) = BookSlistbox
서버의 요청 수가 많이 줄어든지 확인할 수 있습니다. 이 상황은 한 번만 업데이트되기 때문에 그 업데이트가 한 번만 (또는 오랜 시간) 업데이트되기 때문에 자주 발생하지 않는 웹 사이트에 특히 적합합니다.
클라이언트 캐시 기술을 논의하겠습니다.이 기술은 연결된 ADO 연결 기술을 연결하는 것도합니다 (번역 수준은 너무 많아서 너무 어색합니다). 이 기술은 주로 사용자 비밀번호, 코드 코드 등과 같은 사용자 개인 정보를 저장하는 데 사용됩니다. 주로 Ado의 일부 속성을 사용합니다. 동시에 일부 네티즌은 ADO 객체를 사용할 수있는 질문이 적용되는지 여부를 언급했습니다. 설명은 명확하지 않습니다. 코드에 다음을 설명하십시오.
파일 Global.asa :
<! -Metadata Type = typelib 파일 = C :/Program Files/Common
파일/시스템/ado/msado15.dll->
<script language = vbscript runat = server>
서브 application_onstart
SQL = UserInfo에서 사용자 이름, 비밀번호를 선택하십시오
cnnusers = dsn = 사용자입니다
set rsusers = server.createobject (adodb.recordset)
'다음 두 문장은 연결을 분리 할 수있는 ADO 기술을 달성하는 데 사용됩니다.
RSCSOMOMOMERSORLOCATION = 신원 방향
RSCOSOMERS. OPEN SQL, CNNADVWORKS, 채택, AdlockReadonly
'레코드 세트와 데이터베이스의 연결을 중단합니다
RSCOSOMERS.ActiveConnection = 아무것도
적용 (rscustomers) = rscustomers를 설정하십시오
종료 서브
파일 users.asp
< %
'클론 방법은 각 사용자에게 레코드 세트 컬렉션을 갖습니다
set yoursers = application (rsusers) .clone
set username = yourusers (사용자 이름)
비밀번호 설정 = YourSusers (비밀번호)
당신의 주인을 unil하십시오
%>
사용자 이름 : < % = username %> 사용자 비밀번호 : < % = 비밀번호 %>
< %
yourusers.movenext
고리
%>