แนะนำ: ใช้ประโยชน์จาก ASP.NET 2.0 URL Mapping ให้ดี บทนำ: การแมป URL เป็นคุณสมบัติใหม่ที่มีให้ใน ASP.NET 2.0 เทคโนโลยีการทำแผนที่ URL ช่วยให้เราแมป URL เฉพาะกับ URL อื่น เพื่อช่วยให้เข้าใจสมมติว่าคุณมีหน้าชื่อ Homepage.aspx บนเว็บไซต์เพื่อเข้าถึงหน้าแรกและผู้ใช้ทั้งหมดก็ใช้มัน
9.3.5 แคชข้อมูลประการแรกมันเป็นสิ่งสำคัญที่จะต้องทราบว่าแม้ว่าแคชข้อมูลและแคชชุดบันทึกจะใช้เพื่อปรับปรุงประสิทธิภาพ แต่ทั้งสองก็ไม่เกี่ยวข้อง แคชข้อมูลเป็นพื้นที่จัดเก็บข้อมูลชั่วคราวที่อนุญาตให้ใช้ข้อมูลในแคชแทนการสร้างข้อมูลใหม่ใหม่ สิ่งนี้ใช้กับข้อมูลที่ไม่ได้เปลี่ยนแปลงบ่อย แต่เข้าถึงได้หลายครั้ง
หนึ่งในวิธีที่ง่ายที่สุดในการแคชข้อมูลใน ASP คือการใช้แอปพลิเคชันและตัวแปรทั่วทั้งเซสชัน ตัวอย่างเช่นสมมติว่ามีบางหน้าเว็บที่จำเป็นต้องเลือกประเภทหนังสือ ภายใต้สถานการณ์ปกติไฟล์รวมที่มีฟังก์ชั่นต่อไปนี้อาจถูกสร้างขึ้น
-
ฟังก์ชั่น booktypes ()
สลัว rsbooktypes
สลัว
strquote = chr (34)
ตั้งค่า rsbooktypes = server.createObject (adodb.recordset)
'รับประเภทหนังสือ
rsbooktypes.open usp_booktypes, strconn
Response.write <เลือกชื่อ = & strQuote & lstbooktype & strquote &>
ในขณะที่ไม่ใช่ rsbooktypes.eof
response.write & <petion> & rsbookTypes (ประเภท) & </potion>
rsbooktypes.movenext
ใช้
Response.write & </select>
rsbooktypes.close
ตั้งค่า rsbookTypes = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
-
นี่เป็นเพียงการเรียกขั้นตอนที่เก็บไว้เพื่อรับประเภทของหนังสือในขณะที่สร้างรายการเลือก ข้อเสียของรหัสข้างต้นคือทุกครั้งที่เรียกใช้ฟังก์ชันฐานข้อมูลจะต้องเข้าถึง ดังนั้นจึงปรับเปลี่ยนฟังก์ชั่นนี้อีกครั้ง
-
ฟังก์ชั่น booktypes ()
สลัว rsbooktypes
สลัว
สล่องสลัว
'ดูว่ารายการอยู่ในแคชหรือไม่
strlist = แอปพลิเคชัน (BookTypes)
ถ้า strlist = จากนั้น
'ไม่แคชดังนั้นสร้างรายการและแคชไว้
strquote = chr (34)
ตั้งค่า rsbooktypes = server.createObject (adodb.recordset)
'รับประเภทหนังสือ
rsbooktypes.open usp_booktypes, strconn
strlist = <select name = & strQuote & lstbooktype & strquote &>
ในขณะที่ไม่ใช่ rsbooktypes.eof
strlist = strlist & <petion> & rsbookTypes (ประเภท) & </potion>
rsbooktypes.movenext
ใช้
strlist = strlist & </select>
rsbooktypes.close
ตั้งค่า rsbookTypes = ไม่มีอะไร
'ตรวจสอบรายการ
แอปพลิเคชัน (bookTypes) = strlist
สิ้นสุดถ้า
bookTypes = strlist
ฟังก์ชันสิ้นสุด
-
รหัสนี้ไม่เพียง แต่เปิดชุดระเบียนเท่านั้น แต่ยังตรวจสอบว่าค่าของตัวแปรแอปพลิเคชัน BookType ว่างเปล่าหรือไม่ หากไม่ว่างเปล่าจะใช้เนื้อหาของตัวแปร หากว่างเปล่าชุดบันทึกจะถูกเปิดเหมือนก่อน เห็นได้ชัดว่าเมื่อบุคคลแรกเรียกใช้รูทีนนี้ข้อมูลจะถูกแคชดังนั้นนี่จึงเป็นประโยชน์สำหรับข้อมูลเหล่านั้นที่ไม่ได้เปลี่ยนแปลงบ่อยครั้ง
หากคุณต้องการแคชข้อมูลบนพื้นฐานของผู้ใช้คุณสามารถใช้ตัวแปรในขอบเขตเซสชัน แต่คุณต้องทราบว่าเซสชันมีวันหมดอายุ หลังจากหมดอายุตัวแปรเลเยอร์เซสชันจะถูกยกเลิกพร้อมกับเซสชันและรหัสอาจยุติการรัน
การใช้เครื่องมือ Web Application Stress (เป็น) ผลการวิเคราะห์ในตารางที่ 9-4 ได้รับ:
ตารางที่ 9-4 ผลการวิเคราะห์ที่ได้รับคือเครื่องมือ
วิธี
การคลิกหน้า
ไม่มีแคช
190
มีแคช
11000
เห็นได้ชัดว่าประสิทธิภาพดีขึ้น แต่อย่าใช้วิธีการข้างต้นเพื่อแคชทุกอย่าง ท้ายที่สุดวิธีการนี้ใช้ได้เฉพาะกับข้อมูลที่ได้รับการจัดรูปแบบสำหรับการแสดงผล นอกจากนี้ให้พิจารณาว่าหากเว็บเซิร์ฟเวอร์ให้บริการเฉพาะบุคคลที่เฉพาะเจาะจงมันแทบจะไม่สามารถใช้งานเว็บเซิร์ฟเวอร์ทั่วไปได้ การใช้คือช่วยให้คุณสามารถจำลองผู้ใช้หลายคนบนเซิร์ฟเวอร์เดียวซึ่งช่วยให้คุณทดสอบแอปพลิเคชันของคุณได้อย่างสมจริงยิ่งขึ้น
ด้วยการจำลองผู้ใช้จำนวนหนึ่งเครื่องมือความเครียดเว็บแอปพลิเคชันสามารถทดสอบความอดทนของหน้าเว็บ เครื่องมือนี้มีอินเทอร์เฟซกราฟิกที่ใช้งานง่ายซึ่งใช้งานง่ายมาก ข้อมูลเพิ่มเติมสามารถรับได้จาก http://homer.rte.microsoft.com/ หรือดาวน์โหลดเครื่องมือ
วัตถุแคช
ฉันควรทำอย่างไรถ้าฉันต้องการแคชข้อมูลที่ไม่ได้จัดรูปแบบ? สามารถใช้ในรูปแบบที่แตกต่างกันในสถานที่ต่าง ๆ ได้หรือไม่? แน่นอนคุณสามารถทำได้ด้วยแอปพลิเคชันหรือตัวแปรเซสชัน พิจารณาชื่อหนังสือ คุณอาจต้องการใช้ชื่อเรื่องนี้ในหลาย ๆ หน้าอาจแสดงชื่อทั้งหมดในตารางเดียวหรือแสดงในกล่องรายการเพื่อให้ผู้ใช้เลือก ฯลฯ คุณอาจนึกถึงการแคชชุดบันทึกเองโดยไม่ต้องแคชข้อความ HTML ด้วยแท็ก
วัตถุสามารถแคชในแอปพลิเคชันหรือตัวแปรเซสชัน แต่มีสองประเด็นหลักที่จะให้ความสนใจกับ:
·วัตถุที่เก็บไว้ในตัวแปรแอปพลิเคชันจะต้องรองรับเธรดฟรีดังนั้นพวกเขาจึงต้องเป็นวัตถุเธรดฟรีหรือวัตถุเธรดคู่ ซึ่งหมายความว่าส่วนประกอบที่สร้างโดย VB ไม่สามารถแคชในตัวแปรแอปพลิเคชัน
·การจัดเก็บวัตถุเธรดหน่วยในสถานะเซสชันหมายความว่าเธรดที่สร้างวัตถุเป็นเธรดเดียวที่อนุญาตให้เข้าถึงได้ ดังนั้น IIS ไม่สามารถทำให้การจัดการเธรดเสร็จสมบูรณ์ได้ดีขึ้นเพราะหน้าใด ๆ ที่พยายามเข้าถึงวัตถุนี้จะต้องรอให้เธรดต้นฉบับให้บริการหน้า สิ่งนี้จะฆ่าโอกาสในการขยายแอปพลิเคชัน
สำหรับการอภิปรายเกี่ยวกับปัญหาการทำเกลียวดูบทที่ 15
โดยค่าเริ่มต้น ADO จะถูกโหลดเป็นวัตถุเธรดหน่วยส่วนใหญ่เป็นเพราะผู้ให้บริการ OLE DB บางรายไม่ปลอดภัยกับเธรด มีไฟล์รีจิสทรีในไดเรกทอรีการติดตั้ง ADO ที่แปลง ADO เป็นโมเดลสองเธรดซึ่งช่วยให้วัตถุ ADO ถูกจัดเก็บอย่างปลอดภัยในแอปพลิเคชันและวัตถุเซสชัน
คุณอาจคิดว่าปัญหาทั้งหมดได้รับการแก้ไขและการเพิ่มความเร็วที่สำคัญสามารถทำได้โดยการใช้วัตถุประเภทต่าง ๆ แต่ไม่จำเป็นต้องเป็นกรณี หลายคนตระหนักว่าเนื่องจากการเชื่อมต่อกับฐานข้อมูลเป็นการดำเนินการที่ค่อนข้างแพงวัตถุการเชื่อมต่อแคชสามารถประหยัดเวลาได้มากเมื่อเชื่อมต่ออีกครั้ง นี่เป็นความจริง แต่การแคชวัตถุการเชื่อมต่อหมายความว่าการเชื่อมต่อจะไม่ถูกปิดดังนั้นพูลแคชการเชื่อมต่อจึงไม่มีประสิทธิภาพ แนวคิดหนึ่งที่เชื่อมต่อกับพูลแคชคือการลดทรัพยากรที่ใช้บนเซิร์ฟเวอร์และวัตถุแคชในสถานะ ASP เห็นได้ชัดว่าไม่สามารถลดการใช้ทรัพยากรได้อย่างชัดเจน ในความเป็นจริงพวกเขายังเพิ่มขึ้นเนื่องจากแคชวัตถุแต่ละรายการใช้ทรัพยากรของเซิร์ฟเวอร์ซึ่งจะลดประสิทธิภาพของเว็บเซิร์ฟเวอร์สำหรับไซต์ที่ยุ่งมาก
ดังนั้นวัตถุการเชื่อมต่อไม่ควรเก็บไว้ แต่สิ่งที่เกี่ยวกับวัตถุ recordset โดยเฉพาะชุดบันทึกที่เชื่อมต่อ? สมมติว่า ADO เปลี่ยนจากเธรดยูนิตเป็นสองเธรดไม่มีเหตุผลที่จะไม่ทำเช่นนี้ตราบใดที่คุณรู้ว่าคุณกำลังทำอะไรอยู่ อย่าคิดว่าสิ่งนี้จะปรับปรุงประสิทธิภาพของหน้า ASP โดยอัตโนมัติ ชุดระเบียนแคชแต่ละชุดจะใช้ทรัพยากรของเซิร์ฟเวอร์ในแง่ของการจัดการหน่วยความจำและ ASP ดังนั้นอย่าแคชชุดระเบียนขนาดใหญ่
แบ่งปัน: ตารางการลงทะเบียนอ่านและเขียน ASP ตัวอย่าง: ต่อไปนี้เป็นเนื้อหาที่อ้างอิง: <%dim readcomputerName set readComputerName = createObject (wscript.shell) Dim ComputerName, reg