ASP สามารถรันเว็บเพจไดนามิกของคุณได้อย่างรวดเร็ว แต่คุณยังสามารถทำให้มันรันเร็วขึ้นด้วยการบีบอัดโค้ดและการเชื่อมต่อฐานข้อมูล นี่คือบทความโดยละเอียดเกี่ยวกับวิธีปรับปรุงประสิทธิภาพของโค้ดและ ASP เพื่อให้ได้ความเร็วในการดำเนินการที่เร็วที่สุด สำหรับผู้ใช้ที่ใจร้อน ความล่าช้าระหว่างการกดปุ่มผู้ใช้กับผลลัพธ์ที่ปรากฏบนหน้าจออาจหมายความว่าพวกเขากำลังเรียกดูไซต์อื่นอยู่ หากคุณมีไซต์เชิงพาณิชย์ อาจหมายถึงการสูญเสียยอดขายที่อาจเกิดขึ้น
เราไม่มีวิธีใดในการควบคุมแบนด์วิดท์ของผู้ใช้ แต่เราได้รับประสิทธิภาพที่ดีที่สุดโดยการปรับไซต์ ASP ให้เหมาะสม การปรับปรุงประสิทธิภาพที่เป็นไปได้ส่วนใหญ่เกิดจากการเปลี่ยนแปลงระบบมากกว่าการกระชับโค้ด แนวคิดที่ไม่เหมาะสมคือการขอให้ผู้ดูแลระบบอัปเกรดระบบเมื่อคุณประสบปัญหาด้านประสิทธิภาพของระบบ
ก่อนอื่น ปัจจัยใดบ้างที่อาจส่งผลต่อประสิทธิภาพของ Asp น่าเสียดายที่มีหลายปัจจัย? นี่เป็นเพียงบางส่วนเท่านั้น:
แบนด์วิธที่มีอยู่
ความเร็วของโปรเซสเซอร์และฮาร์ดแวร์อื่นๆ บนเซิร์ฟเวอร์
โปรแกรมอื่นๆ ที่ทำงานบนเซิร์ฟเวอร์ (เช่น โปรแกรมรักษาหน้าจอ OpenGL!)
โหมดการเชื่อมต่อฐานข้อมูล, พูลการเชื่อมต่อ, ระบบฐานข้อมูลเอง (เช่น Oracle ดีกว่า Sql Server, เซิร์ฟเวอร์ Sql ดีกว่า Access)
ภาษาที่ใช้
กระบวนงานที่เก็บไว้ดีกว่าคำสั่ง SQL แบบแถว
ใช้ส่วนประกอบที่คอมไพล์แทน VB หรือ JavaScript ประสบการณ์การเขียนโปรแกรม ASP ที่ดี เช่น การจัดการข้อผิดพลาด เป็นต้น
ปัจจัยข้างต้นบางประการอาจสังเกตเห็นได้ทั่วไปโดยนักพัฒนาที่มีความรู้และประสบการณ์เกี่ยวกับ IIS แต่ปัจจัยอื่นๆ อาจเป็นปัญหาที่ซับซ้อนมากสำหรับพวกเขา ในบทความนี้ เราจะพยายามอธิบายปัจจัยทั้งหมดที่ส่งผลต่อประสิทธิภาพของ Asp* และให้เราดูสิ่งสำคัญที่สามารถทำได้ภายในเวลาไม่กี่มิลลิวินาทีที่เราโกน
ขนาดสคริปต์ ASP
หน้าสคริปต์ของคุณ (และหน้าอื่นๆ) ยาวเกินความจำเป็นหรือไม่ นี่คือสิ่งที่จะลดประสิทธิภาพของ Asp* ทันทีที่มีการดำเนินการ สคริปต์ ASP มีประโยชน์ในการรับข้อมูลและการจัดรูปแบบเอาต์พุต แต่สคริปต์ก็จะได้รับการตีความทีละบรรทัดเช่นกัน ดังนั้น ยิ่งสคริปต์ของคุณยาวเท่าใด จะใช้เวลาดำเนินการนานขึ้นเท่านั้น
หากสคริปต์ของคุณมีขนาดใหญ่ คุณจะทำอย่างไรเพื่อลดความยาวของสคริปต์? นี่คือข้อเสนอแนะบางส่วน:
คุณสามารถแปลงเป็นส่วนประกอบฝั่งเซิร์ฟเวอร์ ซึ่งก็คือ VB DLLs หรือเป็นส่วนประกอบที่ไม่ได้คอมไพล์ผ่านภาษาการเขียนโปรแกรม Windows ขั้นสูงหรือภาษาอินเทอร์เฟซ COM ที่เหมาะสมได้หรือไม่ และลงทะเบียนบนฝั่งเซิร์ฟเวอร์ สามารถดูคำแนะนำฉบับย่อได้ที่
พบได้ที่http://www.webdevelopersjournal.com/articles/activex_for_asp.html การคอมไพล์ส่วนประกอบ ActiveX ที่เขียนไว้อย่างดีไม่เพียงแต่ช่วยปรับปรุงประสิทธิภาพได้อย่างมาก แต่ยังปกป้องซอฟต์แวร์ (สคริปต์) ของคุณ โดยเฉพาะอย่างยิ่งเมื่อคุณเผยแพร่ไซต์ ASP ของคุณบนโฮสต์บุคคลที่สาม
เนื่องจากสคริปต์ถูกตีความทีละบรรทัด ประสิทธิภาพจึงสามารถปรับปรุงได้โดยการกำจัดสคริปต์ที่ซ้ำซ้อนหรือสร้างสคริปต์ที่มีประสิทธิภาพมากขึ้น หากคุณมีโค้ดหลายร้อยบรรทัดในไฟล์ ASP ไฟล์เดียว อาจด้วยวิธีนี้คุณสามารถแยกผู้ใช้ ธุรกรรม และบริการข้อมูลได้อย่างดี หากคุณทำเช่นนี้ คุณอาจพบโค้ดที่ซ้ำซ้อน: หากคุณต้องการส่งออกหลายตาราง คุณสามารถเขียนฟังก์ชันทั่วไปเพื่อส่งออกตารางและเรียกมันหลายๆ ครั้งได้
เมื่อพูดถึงขนาดของสคริปต์ Asp เราต้องพูดถึงขนาดของไฟล์ที่รวมไว้ด้วย เมื่อคุณใช้ไฟล์รวม ไฟล์รวมทั้งหมดจะถูกโหลด เมื่อมีการรวมไฟล์รวมไว้ จะเทียบเท่ากับการเขียนโค้ดส่วนนั้นในไฟล์ Asp เอง ดังนั้น หากคุณกำหนดวิธีการและคำจำกัดความทั่วไปจำนวนมากในไฟล์รวมที่มีความยาว โปรดเข้าใจว่าเมื่อคุณรวมไฟล์ ไม่ว่าคุณต้องการใช้ทุกวิธีหรือคำจำกัดความในไฟล์ ไฟล์นั้นจะถูกรวมไว้ในไฟล์ทั้งหมด ASP แคชโค้ดส่วนขยายทั้งหมด ซึ่งจะลดประสิทธิภาพการค้นหา ในกรณีนี้ ไฟล์ที่รวมไว้จะต้องถูกแบ่งออกเป็นไฟล์โมดูลาร์ที่มีขนาดเล็กลง นอกจากนี้ โปรดเข้าใจด้วยว่าเซิร์ฟเวอร์จะถือว่าไฟล์รวมถือเป็นคำขอหน้าแยกต่างหาก และการใช้ไฟล์รวมมากเกินไปอาจส่งผลต่อเวลาในการดาวน์โหลด
<!-- #include file=Header.asp -->
<!-- #include file=Footer.asp -->
<ภาษาสคริปต์=vbscript runat=เซิร์ฟเวอร์>
หลักย่อย()
เขียน Header
เขียนร่างกาย
เขียน Footer
จบหมวดย่อย
เขียนย่อยBody()
-
จบหมวดย่อย
หลัก?'ขั้นตอนการโทรหลัก
</สคริปต์>
หากสคริปต์ของคุณยาว ให้ใช้ Response.IsClientConnected ซึ่งหมายความว่า CPU เซิร์ฟเวอร์ของคุณสามารถหลีกเลี่ยงการรอแบบวนซ้ำเมื่อไคลเอนต์ไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์อีกต่อไป
-
'ตรวจสอบว่าไคลเอนต์ยังคงเชื่อมต่ออยู่หรือไม่
ถ้าไม่ตอบสนอง IsClientConnected แล้ว
'ยังเชื่อมต่ออยู่ ผู้จัดการ'
อื่น
'ตัดการเชื่อมต่อ
สิ้นสุดถ้า
-
สลับ ASP และ HTML
ทุกคนทำแบบนี้หรือเปล่า? เมื่อเราส่งออกตาราง เราจะแปลงระหว่างโค้ด ASP และ HTML ซึ่งเป็นนิสัยที่ไม่ดี ตัวอย่างเช่น:
<HTML>
<ร่างกาย>
-
ตั้งค่า MyConn = Server.CreateObject (ADODB.Connection)
MdbFilePath = Server.MapPath (sample.mdb)
MyConn.Open Driver={ไดรเวอร์ Microsoft Access (*.mdb)};
SQL_query = SELECT * จากเพื่อน
ตั้งค่า RS = MyConn.Execute(SQL_query)
แม้ว่าจะไม่ใช่ RS.EOF
-
<LI><%=RS(ชื่อ)%>: <A HREF=>หน้าแรก</A>
-
RS.MoveNext
เวน
-
</ร่างกาย><
</HTML><
อีกตัวอย่างทั่วไปคือเมื่อใช้คำสั่ง IF:
-
ถ้าไม่ใช่เซสชัน (DBOpen) แล้ว
-
<H1>ฐานข้อมูลไม่ได้เชื่อมต่อ</H1>
-
อื่น
-
<H1>ฐานข้อมูลเปิด</H1>
-
สิ้นสุดถ้า
-
ในกรณีเหล่านี้ สามารถปรับปรุงประสิทธิภาพของสคริปต์ได้โดยการเขียนสคริปต์ฝั่งเซิร์ฟเวอร์ร่วมกัน และใช้ Response.write เพื่อสร้างโค้ด HTML ตัวอย่างเช่น:
-
ถ้าไม่ใช่เซสชัน (DBOpen) แล้ว
การตอบสนองเขียน <H1> ไม่ได้เชื่อมต่อฐานข้อมูล </H1>
อื่น
การตอบสนองเขียน <H1> ฐานข้อมูลเปิด </H1>
สิ้นสุดถ้า
-
ในกรณีที่มีสคริปต์ขนาดใหญ่และหลายสคริปต์ คุณจะเห็นการปรับปรุงประสิทธิภาพ โปรดทราบว่าควรหลีกเลี่ยงการใช้แท็ก <% ให้มากที่สุด เพื่อปรับปรุงประสิทธิภาพ ASP ไม่จำเป็นต้องคำนวณโค้ด Ascii ของอักขระเมื่อเรียกใช้งานสคริปต์
สถานะเซสชัน
ไม่ต้องสงสัยเลยว่าความสามารถในการรักษาสถานะบางอย่างผ่านเซสชันนั้นเป็นคุณสมบัติที่ทรงพลังมากใน ASP อย่างไรก็ตาม อาจส่งผลต่อประสิทธิภาพ* ของคุณได้ แน่นอนว่าความสามารถในการปรับขนาดของไซต์ของคุณจะกลายเป็นอีกปัญหาหนึ่งหากคุณจำกัดการใช้เซสชัน อย่างไรก็ตาม เซสชันจะใช้ทรัพยากรเซิร์ฟเวอร์สำหรับผู้ใช้แต่ละราย
จะเกิดอะไรขึ้นถ้าคุณไม่ใช้ตัวแปรเซสชันหรือจริงๆ แล้วคุณไม่จำเป็นต้องใช้? การใช้ฟิลด์แบบฟอร์มที่ซ่อนอยู่ การบันทึกข้อมูลในฐานข้อมูล และสตริงการสืบค้นเป็นเคล็ดลับหรือไม่ ดังนั้นคุณควรปิดการใช้งานสถานะเซสชัน คุณสามารถปิดการใช้งานเซสชันด้วยคำสั่งต่อไปนี้:
@EnableSessionState = เท็จ
ด้วยวิธีนี้ ASP จะไม่ตรวจสอบข้อมูลเซสชันอีกต่อไป
หากคุณต้องพึ่งพาสถานะเซสชัน คุณควรหลีกเลี่ยงการจัดเก็บข้อมูลจำนวนมากในออบเจ็กต์เซสชัน เซสชันใน IIS จะถูกรักษาไว้ตราบเท่าที่คุกกี้ HTTP ของไคลเอ็นต์พร้อมใช้งาน ทำให้หน่วยความจำที่เซสชันถูกครอบครองจนกว่าเซสชันจะสิ้นสุดลงหรือหมดเวลา ด้วยวิธีนี้ หากมีผู้ใช้จำนวนมากใช้โปรแกรมของคุณพร้อมกัน ทรัพยากรเซิร์ฟเวอร์ของคุณอาจหมดลง
การเข้าถึงฐานข้อมูล
การเข้าถึงฐานข้อมูลเป็นสิ่งที่ต้องมี? การเข้าถึงฐานข้อมูลจะทำให้แอปพลิเคชันของคุณช้าลงอย่างมาก แต่เห็นได้ชัดว่าไซต์จำนวนมากจะไม่ไร้ค่าหากไม่มีฐานข้อมูล แต่ด้วยการเข้าถึงฐานข้อมูลผ่านขั้นตอนการจัดเก็บแทนการใช้คำสั่ง SQL แบบฝัง คุณสามารถเพิ่มประสิทธิภาพการทำงานที่เป็นไปได้ได้ นอกจากนี้ยังมีความยืดหยุ่นที่ดี* โดยใช้ขั้นตอนการจัดเก็บและ ActiveX Data Objects (ADO) เมื่อใดก็ตามที่เป็นไปได้ ให้ส่งออกข้อมูลจากขั้นตอนการจัดเก็บ
ตรวจสอบให้แน่ใจว่าฐานข้อมูลของคุณมีดัชนี เนื่องจากจะช่วยปรับปรุงประสิทธิภาพของโปรแกรมของคุณได้โดยตรง นอกจากนี้ ให้ลองเรียกใช้ Update Statistics บนเซิร์ฟเวอร์ฐานข้อมูลของคุณเพื่อช่วยติดตามการกระจายข้อมูลของคุณ เพื่อให้ฐานข้อมูลของคุณสามารถปรับเปลี่ยนการดำเนินการค้นหาตามข้อมูลนี้ได้ โปรดทราบว่าฐานข้อมูลบางประเภท เช่น MS Access เป็นที่ยอมรับในโปรแกรมระดับองค์กรอย่างแท้จริงใช่หรือไม่ SQL Sever 7.0 หรือ Oracle เป็นทางเลือกที่ดีกว่า
ปล่อยให้ SQL ทำงานตามที่ได้รับการออกแบบมาให้นับ รวม เรียงลำดับ และจัดกลุ่มข้อมูล เมื่อคุณสามารถเขียนคำสั่งแบบสอบถามเพื่อทำสิ่งเหล่านี้ได้ อย่าทำเองในภาษาอื่น
ต่อไปนี้เป็นไวยากรณ์ที่ง่ายที่สุดในการนับคอลัมน์ทั้งหมด:
SELECT count(*) จากผู้จัดพิมพ์ WHERE state='NY'
หากคุณนับคอลัมน์ใดคอลัมน์หนึ่ง คุณต้องใช้คำสั่งกลุ่มตามคำสั่งเพื่อจัดกลุ่มคอลัมน์นั้น มิฉะนั้นจะไม่ทำงาน:
เลือกจำนวน (เมือง) เมือง จากผู้จัดพิมพ์ จัดกลุ่มตามเมือง
ข้อมูลที่จัดหมวดหมู่ส่งคืน:
SELECT * FROM TableName WHERE FieldName>50 หรือ FieldName<100 เรียงตาม FieldName2, Field Name3
ใช้ Odbc หรือไฟล์ DSN เพื่อเชื่อมต่อกับฐานข้อมูลหรือไม่ ใช้เทคโนโลยีผู้ให้บริการ OLEDB ที่รวดเร็วเพื่อเชื่อมต่อกับฐานข้อมูลของคุณแทนการใช้การเชื่อมต่อ DSN ไม่ต้องขอให้ ISP ของคุณ (หรือผู้ดูแลระบบฐานข้อมูล/ผู้ดูแลระบบเครือข่าย) ตั้งค่า DSN ระบบให้กับคุณอีกต่อไป และไม่มีการเปลี่ยนแปลงการกำหนดค่าเมื่อคุณย้ายไฟล์เว็บ
OLEDB อยู่ระหว่างเลเยอร์ ODBC และแอปพลิเคชัน ADO เป็นแอปพลิเคชันที่อยู่ด้านบนของ ODEDB ในหน้า ASP ของคุณ การเรียก ADO ของคุณจะถูกส่งไปยัง OLEDB ก่อน จากนั้นจึงไปที่เลเยอร์ ODBC อย่างไรก็ตาม คุณสามารถเชื่อมต่อกับเลเยอร์ OLEDB ได้โดยตรง และหากทำเช่นนั้น คุณจะเห็นการปรับปรุงประสิทธิภาพฝั่งเซิร์ฟเวอร์ แต่จะเชื่อมต่อโดยตรงกับ OLEDB ได้อย่างไร?
หากคุณใช้ SQLServer 7 ให้ใช้โค้ดการเชื่อมต่อต่อไปนี้เพื่อเชื่อมต่อกับฐานข้อมูล:
strConnString = DSN='';DRIVER={SQL SERVER};
UID=myuid;PWD=mypwd;
ฐานข้อมูล=MyDb;SERVER=MyServer;
พารามิเตอร์ที่สำคัญที่สุดคือส่วน DRIVER= ถ้าคุณต้องการข้าม ODBC และเชื่อมต่อกับ SQL Server โดยใช้ OLEDB (ซึ่งเป็นการเชื่อมต่อที่เร็วกว่า) ให้ใช้ไวยากรณ์ต่อไปนี้:
strConnString =ผู้ให้บริการ=SQLOLEDB.1;รหัสผ่าน=mypassword;
คงข้อมูลความปลอดภัย=True;User ID=myuid;
แค็ตตาล็อกเริ่มต้น=mydbname;
แหล่งข้อมูล=myserver;การเชื่อมต่อหมดเวลา=15
มีอะไรผิดปกติหรือเปล่า?
ตอนนี้คุณอาจสงสัยว่า: อะไรคือประเด็นของเราในวิธีการเชื่อมต่อใหม่นี้? ทำไมไม่ลองใช้วิธี DSN-less/System DSN มาตรฐานล่ะ ตามผลการทดสอบของ Wrox ในหนังสือของเขา "การอ้างอิงโปรแกรมเมอร์ ADO 2.0" หากคุณเปรียบเทียบการเชื่อมต่อ OLEDB กับวิธีการเชื่อมต่อ DSN หรือ DSN น้อยกว่า คุณจะพบการปรับปรุงต่อไปนี้:
*สามารถเปรียบเทียบ:
การเข้าถึง SQL
OLEDBDSNOLEDBDSN
เวลาในการเชื่อมต่อ: 18?82?เวลาในการเชื่อมต่อ: 62?99
เวลาในการสืบค้น 1,000 เรคคอร์ด: 29005400 เวลาในการสืบค้น 1,000 เรคคอร์ด: 100950
หมายเหตุ: ผลลัพธ์นี้สามารถพบได้ในหน้า 232 และ 233 ของหนังสือ "ADO 2.0 Programmer's Reference" ของ Wrox เวลาวัดเป็นมิลลิวินาที และเวลาสืบค้นถึง 1,000 บันทึกจะถูกคำนวณโดยใช้เคอร์เซอร์ฝั่งเซิร์ฟเวอร์ (ประสิทธิภาพระหว่างชุดบันทึก OLEDB และ DSN ไม่มีความแตกต่างมากนัก เมื่อใช้เคอร์เซอร์ฝั่งไคลเอ็นต์)
ปัญหาการถอดรหัส ASP:
ตรวจสอบอินพุตของผู้ใช้บนฝั่งไคลเอ็นต์ทุกครั้งที่เป็นไปได้ เพื่อลดจำนวนคำขอ HTTP ไปกลับ หากเบราว์เซอร์ของคุณสามารถรองรับ JavaScript หรือสคริปต์อื่นๆ ได้ ให้ใช้พลังของเบราว์เซอร์นั้นเพื่อเพิ่มทรัพยากรเซิร์ฟเวอร์ให้มากขึ้น
VBScript ต่อไปนี้ทำงานในเบราว์เซอร์ไคลเอนต์เพื่อตรวจสอบข้อมูลผู้ใช้ก่อนที่จะส่งไปยังเซิร์ฟเวอร์ของคุณ:
<ภาษาสคริปต์=VBScript>
-
ย่อย btnEnter_OnClick
ดิมเดอะฟอร์ม
ตั้งค่า TheForm = Document.MyForm
ถ้า IsNumeric(TheForm.Age.Value) แล้ว
TheForm.ส่ง
อื่น
Msgbox กรุณาระบุอายุเป็นตัวเลข
จบถ้า
จบหมวดย่อย
-
</สคริปต์>
<FORMmethod=POST name=MyFormaction=myfile.asp>< ชื่อ: <INPUT typr=text name=Name>
อายุ: <INPUT type=text name=Age>
<ประเภทอินพุต=ชื่อปุ่ม=btnEntervalue=Enter>
</แบบฟอร์ม><
ใช้ตัวแปรท้องถิ่นและหลีกเลี่ยงตัวแปรส่วนกลาง ตัวแปรท้องถิ่นเข้าถึงได้เร็วกว่าโดยกลไกสคริปต์ Asp มากกว่าตัวแปรส่วนกลาง เนื่องจากไม่จำเป็นต้องค้นหาโดเมนชื่อทั้งหมด หลีกเลี่ยงการเปลี่ยนคำจำกัดความของอาร์เรย์ จะมีประสิทธิภาพมากกว่าในการจัดสรรขนาดที่เพียงพอระหว่างการเริ่มต้นครั้งแรก ในกรณีนี้ คุณอาจเสียหน่วยความจำบางส่วน แต่คุณจะได้ประโยชน์จากความเร็ว เทคนิคนี้มีประสิทธิภาพอย่างเห็นได้ชัดเมื่อเซิร์ฟเวอร์มีภาระงานหนัก
หากคุณต้องการอ้างอิงวัตถุที่ไม่จำเป็นต้องใช้ ควรใช้แท็ก <OBJECT> แทนการใช้เมธอด Server.CreateObject การใช้ Server.CreateObject ทำให้วัตถุถูกสร้างขึ้นทันที ในทางตรงกันข้าม แท็ก <OBJECT> จะไม่สร้างวัตถุทันที หากคุณไม่ได้ใช้วัตถุหลังจากกำหนดด้วย <object> คุณจะไม่เสียทรัพยากร
ตัวอย่างเช่น: ตัวอย่างต่อไปนี้ใช้แท็ก <OBJECT> เพื่อสร้างการใช้ออบเจ็กต์ Ad Rotator ของวงล้อโฆษณาในขอบเขตแอปพลิเคชัน
ตัวอย่าง:
<OBJECT runat=ขอบเขตเซิร์ฟเวอร์=Application id=MyAds progid=MSWC.AdRotator>
</วัตถุ><
หลังจากจัดเก็บออบเจ็กต์ Ad Rotator ในแอปพลิเคชันแล้ว คุณสามารถเข้าถึงออบเจ็กต์ในหน้าโปรแกรมใดก็ได้โดยใช้ไวยากรณ์ต่อไปนี้
<%=MyAds.GetAdvertisement(CustomerAds.txt) %>
เปิดสวิตช์ 'ตัวเลือกที่ชัดเจน' ใน VB และ VBScript คุณสามารถใช้ตัวแปรได้โดยไม่ต้องมีการประกาศอย่างชัดเจน แต่การเปิดใช้งานตัวเลือกนี้สามารถระบุและกำหนดตัวแปร ซึ่งสามารถเขียนตัวแปรได้ดีและช่วยปรับปรุงประสิทธิภาพ ตัวแปรในเครื่องที่ไม่ได้กำหนดจะช้ากว่าเนื่องจากต้องค้นหาเนมสเปซเพื่อดูว่ามีตัวแปรอยู่ก่อนสร้างหรือไม่ กำจัดมันออกไปและกำหนดตัวแปรทุกตัวให้ชัดเจน (กำหนดก่อน ใช้ทีหลัง)
นี่เป็นนิสัยที่ดี มันอาจดักจับการพิมพ์ผิด และมันเร็วขึ้น
ยกเว้นกรณีที่คุณต้องการใช้งานจริงๆ อย่าใช้เมธอด Server.MapPath ใช้เส้นทางจริงถ้าคุณรู้ การใช้ MapPath ต้องใช้ IIS เพื่อดึงข้อมูลเส้นทางเซิร์ฟเวอร์ปัจจุบัน ซึ่งหมายความว่าต้องส่งคำขอพิเศษไปยังเซิร์ฟเวอร์ ซึ่งหมายถึงประสิทธิภาพที่ลดลง อีกวิธีหนึ่งคือจัดเก็บเส้นทางไว้ในตัวแปรภายในเครื่องและใช้เมื่อจำเป็น เพื่อให้เซิร์ฟเวอร์ไม่จำเป็นต้องค้นหาหลายครั้ง
ตรวจสอบว่าคุณเป็นยังไงบ้าง
คุณสามารถวัดประสิทธิภาพของระบบผ่านเครื่องมือต่างๆ เช่น System Performance Monitor, netMon และ PerfMon หากต้องการทดสอบประสิทธิภาพของเว็บ* คุณสามารถใช้ WCAT (เครื่องมือวิเคราะห์ความจุเว็บ) เมื่อใช้ WCAT คุณสามารถทดสอบความสามารถของเซิร์ฟเวอร์ IIS และการกำหนดค่าเครือข่ายของคุณเพื่อตอบสนองต่อการร้องขอข้อมูลหรือหน้า HTML ที่หลากหลายของไคลเอ็นต์ ผลการทดสอบเหล่านี้สามารถใช้เป็นแนวทางในการเพิ่มประสิทธิภาพเซิร์ฟเวอร์และการกำหนดค่าเครือข่ายของคุณได้ WCAT ได้รับการออกแบบมาโดยเฉพาะเพื่อประเมินปริมาณงานของลูกค้าที่ Internet Services ใน Windows 2000 (หรือ Windows NT) และ IIS สามารถตอบสนองได้
(การจำลอง). สำหรับข้อมูลเพิ่มเติม โปรดดูที่ IIS Resource Kit นอกจากนี้ยังมีคู่มือผู้ใช้ WCAT แบบยาวที่ไซต์ sorkshop ของ MSDN Online Web พร้อมลิงก์ดาวน์โหลด หากคุณจริงจังกับความสามารถ Asp* ของคุณ อย่าลืมใช้เครื่องมือนี้
มุ่งมั่นที่จะเพิ่มประสิทธิภาพแอปพลิเคชันและแอปพลิเคชันเว็บของคุณจะทำงานได้อย่างราบรื่นยิ่งขึ้น อย่าส่งผลกระทบต่อประสิทธิภาพของเซิร์ฟเวอร์หากคุณไม่ต้องการมันจริงๆ
asp ใช้ขั้นตอนการจัดเก็บเพื่อใช้เพจข้อมูล
1. สร้างตาราง tiku_koushi
ถ้ามี (เลือก * จาก dbo.sysobjects โดยที่ id =
object_id(N'[dbo].[tiku_koushi]') และ OBJECTPROPERTY
(id, N'IsUserTable') = 1)
วางตาราง [dbo].[tiku_koushi]
ไป
สร้างตาราง [dbo].[tiku_koushi] (
[id] [int] ตัวตน (1, 1) ไม่เป็นโมฆะ
[หัวข้อ] [varchar] (250) เรียงกัน
Chinese_PRC_CI_AS NULL ,
[list2_id] [ถ่าน] (10) เรียงกัน
จีน_PRC_CI_AS NULL
) เปิด [หลัก]
ไป
2. ขั้นตอนการจัดเก็บ sp_c
สร้าง proc sp_c
@ชื่อโต๊ะวาร์ชาร์(50)
@title varchar(250)
@list2_id วาชาร์(50)
เช่น
ถ้า @tablename='tiku_koushi'
เลือก count(*) จาก tiku_koushi โดยที่ชื่อเช่น '%'+@title+'%' และ list2_id=@list2_id
ไป
3. ขั้นตอนการจัดเก็บ sp_search_tiku
สร้างขั้นตอน sp_search_tiku
@ชื่อโต๊ะวาร์ชาร์(50)
@title varchar(250)
@list2_id วาร์ชาร์(10),
@ขนาดเพจอินท์
@เพจอินท์
เช่น
ถ้า @tablename='tiku_koushi'
เริ่ม
ประกาศ @ks int
ประกาศ @str varchar (200)
ตั้ง @ks=@pagesize*(@page-1)
หากไม่มี (เลือก * จาก dbo.sysobjects โดยที่ id = object_id(N'[dbo].[temp_table91]') และ OBJECTPROPERTY(id, N'IsUserTable') = 1)
เริ่ม
เลือก * ลงใน temp_table91 จาก tiku_koushi โดยที่
ชื่อเช่น '%'+@title+'%' และลำดับ list2_id=@list2_id
โดยรหัสประจำตัว
ตั้งค่าจำนวนแถว @pagesize
set @str='select * from temp_table91 โดยที่ id ไม่อยู่ในนั้น
(เลือก '+str(@ks)+' id ด้านบนจาก temp_table91)'
ดำเนินการ(@str)
วางตาราง temp_table91
จบ
จบ
ไป
4. search_koushi.asp
<!-- #include file=conn.asp -->
-
เส้น=6
ถ้า request(page)= แล้ว
หน้า=1
อื่น
หน้า=คำขอ(หน้า)
สิ้นสุดถ้า
ถ้าหน้า <1 แล้ว
หน้า=1
สิ้นสุดถ้า
title=trim(คำขอ(ชื่อ))
list2_id=trim (คำขอ (list2_id))
ตั้งค่า rs2=conn.execute(sp_c 'tiku_koushi','&title&','&list2_id&')
จำนวนหน้า=CInt(rs2(0)/บรรทัด)
if(CInt(rs2(0)) mod line)=0 แล้ว
จำนวนหน้า=จำนวนหน้า
อื่น
จำนวนหน้า=จำนวนหน้า+1
สิ้นสุดถ้า
ถ้า CInt(page)>=pagecount แล้ว
หน้า=CInt(จำนวนหน้า)
สิ้นสุดถ้า
STR=
str=str&page=&page&&title=&title&&list2_id=&list2_id
ตั้งค่า rs=conn.execute
(sp_search_tiku 'tiku_koushi','&title&','&list2_id&','&line&','&CInt(page)&')
ถ้า rs.eof แล้ว
การตอบสนองเขียนไม่มีบันทึก
อื่น
-
<html>
<หัว>
<ประเภทสไตล์=ข้อความ/css>
td{ขนาดตัวอักษร:12px;}
ก {การตกแต่งข้อความ: ไม่มี;}
</สไตล์>
<ภาษาสคริปต์=จาวาสคริปต์>
</สคริปต์>
</หัว>
<ร่างกาย>
<ความกว้างของตาราง=518 เส้นขอบ=1 เส้นขอบสี=000000
bordercolordark=#ffffff
align=เซลล์แพดดิ้งตรงกลาง=0 ระยะห่างเซลล์=0>
<!--DWLayoutTable-->
<tr bgcolor=#dfdfdf>
<td width=454 align=center height=24 valign=middle>คำถามตรวจช่องปาก</td>
<td width=63 align=center valign=middle>ลบ</td>
</tr>
<% ทำจนถึง rs.eof %>
<tr ความสูง=22>
<td valign=middle>·<a href=void(0)
onclick=window.open('editkoushi.asp?id=<%=rs(id)%>&page=<%=page%>&title=<%=title%>&list2_id=<%=list2_id%>','' ,'ความกว้าง=518
ความสูง=160 ซ้าย=100')>
<%=rs(หัวข้อ)%></a></td>
<td align=center valign=middle>ลบ</td>
</tr>
-
rs.movenext
วนซ้ำ
-
<tr align=left valign=middle bgcolor=efeff6
ความสูง=22>
<td colspan=2 style=padding-left:6px;>
<a href=search_koushi.asp?page=<%=1%>&title=<%=title%>&list2_id=<%=list2_id%>>หน้าแรก</a> <a
href=search_koushi.asp?page=<%=page-1%>&title=<%=title%>&list2_id=<%=list2_id%>>หน้าก่อนหน้า</a> <a
href=search_koushi.asp?page=<%=page+1%>&title=<%=title%>&list2_id=<%=list2_id%>>หน้าถัดไป</a> <a
href=search_koushi.asp?page=<%=pagecount%>&title=<%=title%>&list2_id=<%=list2_id%>>หน้าสุดท้าย</a>
จำนวนหน้าทั้งหมด <%=pagecount%> หน้า ปัจจุบันคือ: <%=page%>/<%=pagecount%> หน้า
มีทั้งหมด <%=rs2(0)%> บันทึก</td>
</tr>
</ตาราง>
</ร่างกาย>
</html>
-
rs2.ปิด
ตั้งค่า rs2=ไม่มีอะไร
RS.ปิด
ตั้งค่า rs=nothing
สิ้นสุดถ้า
-