ASP (Active Server Page)는 Microsoft에서 시작한 PWS (Personal Web Server) 및 IIS (Internet Information Server) 플랫폼을 기반으로 한 동적 웹 페이지 개발 기술로, 이제는 더욱 성숙하고 완벽 해지고 있습니다. 여기에는 코드 최적화에 대한 간단한 토론 만 있습니다.
8 ASP 코딩 최적화 기술 :
1. vbscript 변수를 선언합니다
ASP에서 vbscript에는 강력한 지원이 제공되며 VBScript 함수 및 메소드를 완벽하게 통합하여 ASP의 기존 기능을 확장하는 데 큰 편의를 제공합니다. ASP에서 가변 유형의 개념이 흐려 졌기 때문에 많은 프로그래머는 ASP와 VBScript 간의 상호 작용 중에 VBScript 변수를 선언하지 않아 서버의 구문 분석 부담을 증가시켜 서버의 응답 요청 속도에 영향을 미칩니다.
이를 고려하여 사용자가 VB에서 변수 선언을 수행하도록 강요하는 것처럼 사용자가 VBScript에서 변수 선언을 수행하도록 강요 할 수 있습니다. 구현 방법은 ASP 프로그램 라인의 시작 부분에 <% 옵션 명시 적%>를 배치하는 것입니다.
2. URL 주소를 인코딩합니다
ASP를 사용하여 매개 변수와 점프가있는 URL 주소를 동적으로 생성 할 때 IE에서 구문 분석하는 것이 정상이지만 NetScrape를 탐색 할 때 다음과 같이 오류가 있습니다.
- httperror400
- 400badrequest
- duetomalformedsyntax, Quest는 TheServer에 의해 이해할 수 없었습니다.
- TheClient는 UpoutModifications를 사용하지 않아야합니다.
솔루션은 생성 된 URL 매개 변수를 인코딩하는 URL에 ASP 내장 서버 객체의 UrlenCode 메소드를 사용하는 것입니다.
- <%
- url = xur.asp
- var1 = username = & server.urlencode (xur)
- var2 = & company = & server.urlencode (xurstudio)
- var3 = & phone = & server.urlencode (021-53854336-186)
- Response.redirecturl &? & var1 & var2 & var3
- %>
3. 개체를 지우십시오
객체를 사용한 후 먼저 가까운 방법을 사용하여 객체가 차지하는 시스템 리소스를 제거하십시오. 당시에는 명확한 개체가없는 페이지에 100 개가 넘는 레코드 세트를 만들어 IIS를 추락했습니다. 다음 코드는 데이터베이스 컨텐츠를 사용하여 드롭 다운 목록을 만듭니다. 코드 예제는 다음과 같습니다.
- <%mydsn = dsn = xur; uid = xur; pwd = xur
- mysql = select*fromauthorswhereau_id < 100
- setconntemp = server.createobject (adodb.connection)
- Conntemp.openmydsn
- setrstemp = conntemp.execute (mysql)
- ifrstemp.eofthen
- 응답. 쓰기 데이터베이스가 비어 있습니다
- 응답 .writemysql
- conntemp.close
- setconntemp = 아무것도
- 응답. 엔드
- endif%>
- %dountilrstemp.eof%>
- <%
- rstemp.movenext
- 고리
- rstemp.close
- setrstemp = 아무것도 없습니다
- conntemp.close
- setconntemp = 아무것도
- %>
4. 문자열을 사용하여 SQL 쿼리를 만듭니다
문자열을 사용하여 쿼리를 설정한다고해서 서버의 구문 분석 속도가 속도가 높아지지 않으면 서버의 구문 분석 시간이 증가합니다. 그러나 여전히 간단한 쿼리 명령문 대신 문자열을 사용하여 쿼리를 사용하는 것이 좋습니다. 이것의 장점은 프로그램의 문제를 빠르게 발견하여 프로그램을 촉진하고 효율적으로 생성 할 수 있다는 것입니다. 예는 다음과 같습니다.
- <%mysql = select*
- mysql = mysql & fromempublishers
- mysql = mysql & wherestate = 'ny'
- 응답 .writemysql
- setrstemp = conntemp.execute (mysql)
- rstemp.close
- setrstemp = 아무것도 없습니다
- %>
5. 사용 케이스. 조건을 선택하십시오
조건부 선택을 할 때는 사례 진술을 사용하고 IF 문을 사용하지 마십시오. 사례 문을 사용하면 프로그램을 유동성으로 만들고 IF 문보다 더 빨리 실행할 수 있습니다. 예는 다음과 같습니다.
- <%
- fori = 1 ~ 1000
- n = i
- Response.WriteadDsUffix (N) & <BR>
- 다음
- %>
- <%
- functionaddsUffix (num)
- Numpart = 오른쪽 (Num, 1)
- SelectCasenumpart
- CASE1
- 그런 다음 ifinst (Num, 11)
- num = num & th
- 또 다른
- num = num & st
- endif
- CASE2
- 그런 다음 ifinst (Num, 12)
- num = num & th
- 또 다른
- num = num & nd
- endif
- CASE3
- 그런 다음 ifinst (Num, 13)
- num = num & th
- 또 다른
- num = num & rd
- endif
- CASE4
- num = num & th
- CASEELSE
- num = num & th
- EndSelect
- AddSuffix = num
- 최종 기능 장애
- %>
6. adovbs.inc 파일에 정의 된 상수를 사용하여 레코드 세트를 엽니 다.
레코드 세트를 열 때 레코드 세트가 열리는 커서 유형 및 잠금 유형을 정의 할 수 있습니다. 이러한 유형을 정의하기 위해 Adovbs.inc 파일에 정의 된 상수가 있습니다. adovbs.inc 파일은/inetpub/iissamples/iisamples 디렉토리에 저장됩니다. 다음은 일반적으로 사용되는 커서 유형과 잠금 유형입니다.
CURSOR 유형 : 채택 된 커서는 앞으로 또는 뒤로 이동할 수 있습니다 다른 사용자에 의해.. 반영.
잠금 유형 : adlockopopopepopeimstic 레코드를 편집 할 때 adlockpessimistic leks는 레코드 세트에서 레코드를 수정할 수 없습니다.
- <!-#includevirtual =/adovbs.inc- >
- <%
- ConnectMe = dsn = xur; uid = xur; pwd = xur
- sqltemp = select*frommpublisherswherename = 'xur'
- setrstemp = server.createobject (adodb.recordset)
- rstemp.opensqltemp, connectme, 채택, adlockoptimstic
- Response.Writerstemp.recordCount & Recordsin <BR> & sqltemp
- rstemp.close
- setrstemp = 아무것도 없습니다
- %>
7. Global.asa 파일의 객체 정의를 피하십시오
Global.asa 파일의 내용은 사이트의 모든 파일에서 참조 할 수 있으므로 의심 할 여지없이 Global.asa 파일의 객체를 정의하면 많은 복제를 저장할 수 있습니다. 예를 들어, Global.asa의 application_onstart 함수에서 다음과 같은 정의가 이루어집니다.
- <%subapplication_onstart
- setApplication (theconn) = server.createobject (adodb.connection)
- Endsub%>;
이를 통해 사이트의 모든 코드에서 유사한 참조를 할 수 있습니다.
- <%
- mysql = select*frommpublisherswherestate = 'xur'
- setrstemp = application (theconn) .Execute (mysql)
- %>
마찬가지로, 레코드 세트 객체는 세션 _onstart 함수에서 생성 할 수 있습니다.
- subsession_onstart
- setsession (rstemp) = server.createobject (adodb.recordset)
- Endsub%>
그런 다음 사이트에서 다음과 같은 인용문이 있습니다.
- <%
- mysql = select*frommpublisherswherestate = 'xur'
- setsession (rstemp) = conntemp.execute (mysql)
- %>
그러나이 작업을 수행하면 부정적인 영향을 미칩니다. 애플리케이션 변수와 세션 변수는 웹 사이트를 닫을 때만 점유 된 리소스 만 릴리스되므로 세션 매개 변수는 많은 불필요한 메모리를 낭비하며,이 시점에서 응용 프로그램 변수는 서버에서 병목 현상이됩니다. 성능. .
솔루션 : 객체를 정의하기 위해 ASP 페이지를 만들고이 객체를 호출 해야하는 페이지 에이 ASP 페이지를 소개합니다. 정의 된 객체의 ASP 페이지 이름이 정의되었다고 가정하면 다음 문을 해당 ASP 페이지에 추가하여 페이지를 소개 할 수 있습니다.
페이지를 소개 할 때 ASP 파일에 <%@language = vbscript%> 문을 포함시키지 않는 것이 가장 좋습니다. ASP 파일에는 @에 의해 정의 된 언어를 구문 분석하는 스크립트가 하나만있을 수 있습니다.
8. 안전 보호
ASP는 우수한 코드 보호 메커니즘을 제공하며 모든 ASP 코드는 서버 측에서 실행되며 클라이언트 코드 실행 결과 만 리턴합니다. 그럼에도 불구하고 IIS의 기존 버전에서는 파일 이름 :: $ data 다음에 ASP의 소스 코드를 볼 수 있으며, 이는 이미 웹 서버 보안 범위에 속하며이 기사의 범위 내에 있지 않습니다. 다음은 두 가지 간단한 안전 예방 조치입니다.
INC ASP가 확장자로 파일을 도입하는 것이 좋습니다. 여기에 ASP를 확장자로 사용하여 여기에 파일을 소개하는 것이 좋습니다. 이러한 코드가 보안 메커니즘이 열악한 웹 서버에서 실행되면 주소 표시 줄을 입력하여 가져 오기 파일의 내용을 탐색 할 수 있습니다 (Inc는 확장자입니다. 유형 (예 : inc)은 정의되지 않으며 파일은 소스 코드에 표시됩니다.
악의적 인 사람이 데이터베이스 경로를 얻을 때 데이터베이스 파일을 웹 사이트 구조 내에 넣지 말고 데이터베이스를 쉽게 얻은 다음 데이터베이스 내용을 임의로 변경할 수 있습니다. 더 나은 접근 방식은 데이터베이스에 대한 DSN (날짜 소스 이름)을 설정하고 데이터베이스에 액세스 할 때 직접 DSN에 액세스하는 것입니다.
위의 8 가지 ASP 코딩 최적화 기술 각각은 매우 중요하며 모든 사람이 신중하게 경험하고 자신의 일이되도록 진정으로 이해해야합니다.