แนะนำ: ใช้ขั้นตอนที่เก็บไว้เพื่อใช้งาน Paging Data ASP 1. สร้างตาราง tiku_koushiif มีอยู่ (เลือก * จาก dbo.sysobjects โดยที่ id = object_id (n '[dbo]. [tiku_koushi]') และ ObjectProperty (id, n'isusertable ') = 1) ตารางวาง [dbo]
ASP (หน้าเซิร์ฟเวอร์ที่ใช้งานอยู่) เป็นเทคโนโลยีการพัฒนาเว็บเพจแบบไดนามิกตามแพลตฟอร์ม PWS (เว็บเซิร์ฟเวอร์ส่วนบุคคล) และแพลตฟอร์ม IIS (ข้อมูลอินเทอร์เน็ตเซิร์ฟเวอร์) ที่เปิดตัวโดย Microsoft ซึ่งตอนนี้กลายเป็นผู้ใหญ่และสมบูรณ์แบบมากขึ้น ที่นี่เรามีเพียงการอภิปรายง่ายๆเกี่ยวกับการเพิ่มประสิทธิภาพรหัส
1. ประกาศตัวแปร VBScript
ใน ASP VBScript ได้รับการสนับสนุนที่แข็งแกร่งและสามารถรวมฟังก์ชั่นและวิธีการ VBScript ได้อย่างราบรื่นซึ่งให้ความสะดวกสบายที่ดีสำหรับการขยายฟังก์ชั่นที่มีอยู่ของ ASP เนื่องจากแนวคิดของประเภทตัวแปรได้รับการเบลอใน ASP โปรแกรมเมอร์จำนวนมากจึงคุ้นเคยกับการไม่ประกาศตัวแปร VBScript ระหว่างการโต้ตอบระหว่าง ASP และ VBScript ซึ่งจะเพิ่มภาระการแยกวิเคราะห์ของเซิร์ฟเวอร์และส่งผลกระทบต่อความเร็วการร้องขอการตอบสนองของเซิร์ฟเวอร์
ในมุมมองของสิ่งนี้เราสามารถบังคับให้ผู้ใช้ทำการประกาศตัวแปรใน VBScript เช่นเดียวกับใน VB วิธีการใช้งานคือการวาง <% ตัวเลือกที่ชัดเจน%> ที่จุดเริ่มต้นของบรรทัดโปรแกรม ASP
2. เข้ารหัสที่อยู่ URL
เมื่อเราใช้ ASP เพื่อสร้างที่อยู่ URL แบบไดนามิกด้วยพารามิเตอร์และกระโดดมันเป็นเรื่องปกติที่จะแยกวิเคราะห์ใน IE แต่เมื่อเรียกดู NetScrape จะมีข้อผิดพลาดดังนี้:
ข้อผิดพลาด http 400
400 คำขอไม่ดี
เนื่องจากไวยากรณ์ที่ไม่ถูกต้องไม่สามารถเข้าใจคำขอได้โดยเซิร์ฟเวอร์
ลูกค้าไม่ควรทำซ้ำคำขอโดยไม่ต้องแก้ไข
วิธีแก้ปัญหาคือการใช้วิธี urlencode ของวัตถุเซิร์ฟเวอร์ ASP ในตัวเพื่อเข้ารหัส URL การเข้ารหัสพารามิเตอร์ URL ที่สร้างขึ้น ตัวอย่างมีดังนี้:
-
url = xur.asp
var1 = username = & server.urlencode (xur)
var2 = & company = & server.urlencode (xurstudio)
var3 = & phone = & server.urlencode (021-5385436-186)
Response.redirect url &? & var1 & var2 & var3
-
3. ล้างวัตถุ
หลังจากใช้วัตถุก่อนอื่นให้ใช้วิธีปิดเพื่อเพิ่มทรัพยากรระบบที่ครอบครองโดยวัตถุ จากนั้นตั้งค่าวัตถุให้เป็นอะไรเพื่อปลดปล่อยวัตถุเพื่อครอบครองหน่วยความจำ ก่อนหน้านี้ฉันขัดข้อง IIS ของฉันโดยการสร้างชุดบันทึกมากกว่า 100 ชุดบนหน้าเว็บที่ไม่มีวัตถุที่ชัดเจน รหัสต่อไปนี้ใช้เนื้อหาฐานข้อมูลเพื่อสร้างรายการดรอปดาวน์ ตัวอย่างรหัสมีดังนี้:
<% mydsn = dsn = xur; uid = xur; pwd = xur
mysql = select * จากผู้เขียนที่ au_id <100
ตั้งค่า conntemp = server.createObject (adoDB.Connection)
conntemp.open mydsn
ตั้งค่า rstemp = conntemp.execute (mysql)
ถ้า rstemp.eof แล้ว
response.write ฐานข้อมูลว่างเปล่า
Response.write mysql
conntemp.close
ตั้งค่า conntemp = ไม่มีอะไร
Response.end
สิ้นสุดถ้า %>
< %ทำจนกระทั่ง rstemp.eof %>
-
rstemp.movenext
วง
rstemp.close
ตั้งค่า rstemp = ไม่มีอะไร
conntemp.close
ตั้งค่า conntemp = ไม่มีอะไร
-
4. สร้างแบบสอบถาม SQL โดยใช้สตริง
การใช้สตริงเพื่อสร้างแบบสอบถามไม่ได้เพิ่มความเร็วความเร็วในการแยกวิเคราะห์ของเซิร์ฟเวอร์ ในทางตรงกันข้ามมันจะเพิ่มเวลาการแยกเซิร์ฟเวอร์ แต่ก็ยังแนะนำให้ใช้สตริงแทนคำสั่งแบบสอบถามอย่างง่ายเพื่อสอบถาม ข้อดีของสิ่งนี้คือมันสามารถค้นพบปัญหาของโปรแกรมได้อย่างรวดเร็วดังนั้นจึงช่วยอำนวยความสะดวกและสร้างโปรแกรมได้อย่างมีประสิทธิภาพ ตัวอย่างมีดังนี้:
<%mysql = เลือก *
mysql = mysql & จากสำนักพิมพ์
mysql = mysql & โดยที่ state = 'ny'
Response.write mysql
ตั้งค่า rstemp = conntemp.execute (mysql)
rstemp.close
ตั้งค่า rstemp = ไม่มีอะไร
-
5. ใช้เคสเพื่อเลือกเงื่อนไข
เมื่อทำการเลือกตามเงื่อนไขให้ลองใช้คำสั่งเคสและหลีกเลี่ยงการใช้คำสั่งหาก การใช้คำสั่ง CASE สามารถทำให้โปรแกรมสามารถไหลได้และดำเนินการได้เร็วกว่าคำสั่ง IF ตัวอย่างมีดังนี้:
-
สำหรับ i = 1 ถึง 1,000
n = i
Response.write addsuffix (n) & <br>
ต่อไป
-
-
ฟังก์ชั่น addsuffix (num)
numpart = ขวา (num, 1)
เลือก case numpart
กรณีที่ 1
ถ้า instr (num, 11) แล้ว
num = num & th
อื่น
num = num & st
สิ้นสุดถ้า
กรณีที่ 2
ถ้า instr (num, 12) แล้ว
num = num & th
อื่น
num = num & nd
สิ้นสุดถ้า
กรณีที่ 3
ถ้า instr (num, 13) แล้ว
num = num & th
อื่น
num = num & rd
สิ้นสุดถ้า
กรณีที่ 4
num = num & th
กรณีอื่น
num = num & th
สิ้นสุดเลือก
addSuffix = num
ฟังก์ชันสิ้นสุด
-
6. ใช้ค่าคงที่ที่กำหนดไว้ในไฟล์ ADOVBS.INC เพื่อเปิดชุดระเบียน
เมื่อเปิดชุดระเบียนคุณสามารถกำหนดประเภทเคอร์เซอร์และประเภทล็อคที่ชุดบันทึกจะเปิดขึ้น
มีค่าคงที่บางอย่างที่กำหนดไว้ในไฟล์ ADOVBS.INC เพื่อกำหนดประเภทเหล่านี้ ไฟล์ ADOVBS.INC ถูกบันทึกไว้ในไดเรกทอรี/IIsamples/iisamples/iisamples ต่อไปนี้เป็นเคอร์เซอร์ที่ใช้กันทั่วไปหลายประเภทและประเภทล็อค
ประเภทเคอร์เซอร์:
เคอร์เซอร์ Adopenfowardonly สามารถก้าวไปข้างหน้าได้เท่านั้น เคอร์เซอร์ Adopenkeyset สามารถก้าวไปข้างหน้าหรือข้างหน้าได้ หากผู้ใช้เพิ่มระเบียนบันทึกใหม่จะไม่ปรากฏในชุดระเบียน เคอร์เซอร์ที่นำมาใช้เป็นแบบไดนามิกและสุ่ม ชุดบันทึก Adopenstatic ไม่ได้สะท้อนถึงการแก้ไขบันทึกที่เกิดจากผู้ใช้รายอื่น
ประเภทล็อค:
Adlockreadoney ไม่สามารถแก้ไขบันทึกในชุดบันทึกได้ Adlockpessimistic ล็อคมันเมื่อแก้ไขบันทึก; Adlockoptimstic ล็อควิธีการอัปเดตชุดระเบียนเฉพาะเมื่อ Adlockbatchopeimstic Records สามารถอัปเดตได้ในแบทช์เท่านั้น
<!-#รวม virtual =/adovbs.inc->
-
ConnectMe = dsn = xur; uid = xur; pwd = xur
SQLTEMP = SELECT * จาก Publishers โดยที่ name = 'xur'
SET RESTEMP = Server.CreateObject (ADODB.RecordSet)
rstemp.open sqltemp, connectme, appenstatic, adlockoptimstic
Response.write rstemp.recordcount & Records ใน <br> & sqltemp
rstemp.close
ตั้งค่า rstemp = ไม่มีอะไร
-
7. หลีกเลี่ยงคำจำกัดความของวัตถุในไฟล์ global.asa
เนื่องจากเนื้อหาในไฟล์ global.asa สามารถอ้างอิงได้โดยไฟล์ทั้งหมดในเว็บไซต์ไม่ต้องสงสัยเลยว่าการกำหนดวัตถุในไฟล์ Global.asa สามารถบันทึกการทำซ้ำได้มาก
ตัวอย่างเช่นในฟังก์ชั่น Application_onstart ใน global.asa คำจำกัดความต่อไปนี้จะทำ:
<%sub application_onstart
ตั้งค่าแอปพลิเคชัน (TheConn) = server.createObject (adodb.connection)
สิ้นสุด sub %>;
สิ่งนี้ช่วยให้คุณสามารถอ้างอิงที่คล้ายกันในรหัสใด ๆ ในเว็บไซต์:
-
mysql = select * จากผู้เผยแพร่โดยที่ state = 'xur'
SET RESTEMP = Application (TheConn) .Execute (MySQL)
-
ในทำนองเดียวกันวัตถุชุดระเบียนสามารถสร้างได้ในฟังก์ชัน session_onstart
<%Sub Session_onstart
ตั้งค่าเซสชัน (rstemp) = server.createObject (adodb.recordset)
สิ้นสุด sub %>
จากนั้นคำพูดต่อไปนี้จะทำในเว็บไซต์:
-
mysql = select * จากผู้เผยแพร่โดยที่ state = 'xur'
ตั้งค่าเซสชัน (rstemp) = conntemp.execute (mysql)
-
อย่างไรก็ตามการทำเช่นนี้ก็มีผลกระทบเชิงลบอย่างมาก เนื่องจากทั้งแอปพลิเคชันและตัวแปรเซสชันจะปล่อยทรัพยากรที่ถูกครอบครองเมื่อปิดเว็บไซต์พารามิเตอร์เซสชันจะทำให้หน่วยความจำที่ไม่จำเป็นจำนวนมากเสียจำนวนมากและในเวลานี้ตัวแปรแอปพลิเคชันจะกลายเป็นคอขวดในประสิทธิภาพของเซิร์ฟเวอร์
สารละลาย:
สร้างหน้า ASP เพื่อกำหนดวัตถุและแนะนำหน้า ASP นี้ในหน้าเว็บที่จำเป็นต้องเรียกวัตถุเหล่านี้ สมมติว่าชื่อหน้า ASP ของวัตถุที่กำหนดถูกกำหนดไว้แล้วหน้าสามารถแนะนำได้โดยการเพิ่มคำสั่งต่อไปนี้ในหน้า ASP ที่เกี่ยวข้อง
<!-#รวม virtual =/define.asp->
เมื่อแนะนำหน้าเว็บจะเป็นการดีที่สุดที่จะไม่รวม <%@language = vbscript%> คำสั่งในไฟล์ ASP ที่จะแนะนำ เนื่องจากในไฟล์ ASP สามารถมีเพียงหนึ่งเดียวที่แยกการวิเคราะห์ภาษาสคริปต์ที่กำหนดโดย @
8. การป้องกันความปลอดภัย
ASP จัดเตรียมกลไกการป้องกันรหัสที่ดีและรหัส ASP ทั้งหมดจะดำเนินการทางฝั่งเซิร์ฟเวอร์และส่งคืนผลลัพธ์ของการดำเนินการรหัสไคลเอนต์เท่านั้น ถึงกระนั้นในเวอร์ชันเก่าของ IIS คุณสามารถดูซอร์สโค้ดของ ASP หลังจากชื่อไฟล์ :: $ data ซึ่งอยู่ในขอบเขตของความปลอดภัยของเว็บเซิร์ฟเวอร์และไม่ได้อยู่ในขอบเขตของบทความนี้ ต่อไปนี้เป็นข้อควรระวังด้านความปลอดภัยง่ายๆสองประการ
แม้ว่าจะแนะนำให้แนะนำไฟล์ด้วย Inc ASP เป็นส่วนขยาย แต่ก็ยังแนะนำให้ใช้ ASP เป็นส่วนขยายเพื่อแนะนำไฟล์ที่นี่ เมื่อรหัสเหล่านี้ทำงานบนเว็บเซิร์ฟเวอร์ที่มีกลไกการรักษาความปลอดภัยที่ไม่ดีคุณสามารถเรียกดูเนื้อหาของไฟล์ที่นำเข้าได้โดยเพียงแค่ป้อนแถบที่อยู่ (Inc เป็นส่วนขยาย) นี่เป็นเพราะบนเว็บเซิร์ฟเวอร์หากไม่ได้กำหนดไลบรารีการเชื่อมต่อแบบไดนามิกที่แก้ไขประเภทหนึ่ง (เช่น INC) ไฟล์จะแสดงในซอร์สโค้ด
อย่าใส่ไฟล์ฐานข้อมูลภายในโครงสร้างเว็บไซต์ดังนั้นเมื่อบุคคลที่เป็นอันตรายได้รับพา ธ ฐานข้อมูลเขาสามารถรับฐานข้อมูลได้อย่างง่ายดายแล้วเปลี่ยนเนื้อหาฐานข้อมูลโดยพลการ วิธีที่ดีกว่าคือการสร้าง DSN (ชื่อแหล่งที่มาวันที่) สำหรับฐานข้อมูลและเข้าถึง DSN โดยตรงเมื่อเข้าถึงฐานข้อมูล
แบ่งปัน: เคล็ดลับ ASP: ปรับปรุงประสิทธิภาพการรวบรวมคำขอ ปรับปรุงประสิทธิภาพของการใช้การรวบรวมคำขอเพื่อเข้าถึงคอลเลกชัน ASP เพื่อแยกค่าเป็นกระบวนการใช้เวลานานและการคำนวณทรัพยากรที่ใช้เวลานาน เนื่องจากการดำเนินการนี้มีชุดการค้นหาชุดที่เกี่ยวข้องจึงช้ากว่าการเข้าถึงตัวแปรท้องถิ่นมาก ดังนั้นหากคุณวางแผนที่จะอยู่ในหน้า