แอปพลิเคชันหน้าเซิร์ฟเวอร์ที่ใช้งานอยู่ส่วนใหญ่ (ASP) สร้างข้อมูล HTML-Format ที่นำเสนอต่อผู้ใช้ผ่านการเชื่อมต่อสตริง บทความนี้เปรียบเทียบหลายวิธีในการสร้างสตรีมข้อมูล HTML นี้และในบางกรณีวิธีบางวิธีมีประสิทธิภาพสูงกว่าผู้อื่นในประสิทธิภาพ บทความนี้สันนิษฐานว่าคุณมีความรู้เกี่ยวกับ ASP และการเขียนโปรแกรมขั้นพื้นฐานที่มองเห็นแล้ว
เมื่อเขียนหน้า ASP ผู้พัฒนาจริงจะสร้างสตรีมข้อความที่จัดรูปแบบซึ่งเขียนไปยังเว็บไคลเอ็นต์ผ่านวัตถุการตอบสนองที่ ASP จัดทำขึ้น มีหลายวิธีในการสร้างสตรีมข้อความนี้และวิธีการที่คุณเลือกจะมีผลกระทบอย่างมากต่อประสิทธิภาพและความสามารถในการปรับขนาดของเว็บแอปพลิเคชันของคุณ หลายครั้งเมื่อฉันช่วยลูกค้าเพิ่มประสิทธิภาพการทำงานของเว็บแอปพลิเคชันของพวกเขาฉันพบว่าหนึ่งในวิธีที่มีประสิทธิภาพมากขึ้นคือการเปลี่ยนวิธีการสร้างสตรีม HTML บทความนี้จะแนะนำเทคนิคทั่วไปหลายประการและทดสอบผลกระทบต่อประสิทธิภาพของหน้า ASP ที่เรียบง่าย
นักพัฒนา ASP จำนวนมากปฏิบัติตามหลักการวิศวกรรมซอฟต์แวร์ที่ดีและทำให้รหัสของพวกเขาเป็นโมดูลมากที่สุด การออกแบบนี้มักจะใช้รวมถึงไฟล์ที่มีฟังก์ชั่นที่จัดรูปแบบส่วนที่ไม่ต่อเนื่องเฉพาะของหน้า เอาต์พุตสตริงของฟังก์ชั่นเหล่านี้ (โดยปกติแล้วรหัสตาราง HTML) สามารถสร้างหน้าสมบูรณ์ผ่านชุดค่าผสมต่างๆ นักพัฒนาบางคนได้ปรับปรุงวิธีการนี้โดยการย้ายฟังก์ชั่น HTML เหล่านี้ไปยังส่วนประกอบของ Visual Basic COM โดยหวังว่าจะใช้ประโยชน์จากประสิทธิภาพเพิ่มเติมที่ได้รับจากรหัสที่รวบรวม
แม้ว่าวิธีการออกแบบนี้จะดี แต่วิธีการที่ใช้ในการสร้างสตริงที่ประกอบขึ้นเป็นส่วนประกอบของรหัส HTML ที่ไม่ต่อเนื่องเหล่านี้จะมีผลกระทบอย่างมากต่อประสิทธิภาพและความสามารถในการปรับขนาดของเว็บไซต์ไม่ว่าการดำเนินการจริงจะดำเนินการใน ASP รวมถึงไฟล์หรือในส่วนประกอบ COM พื้นฐาน
โปรดดูตัวอย่างโค้ดต่อไปนี้ของฟังก์ชั่น writehtml พารามิเตอร์ชื่อข้อมูลเป็นเพียงอาร์เรย์ของสตริงที่มีข้อมูลบางอย่างที่จะจัดรูปแบบลงในโครงสร้างแบบตาราง (ตัวอย่างเช่นข้อมูลที่ส่งคืนจากฐานข้อมูล)
ฟังก์ชั่น writehtml (data) dim nrepfor nrep = 0 ถึง 99 shtml = shtml & vbcrlf _ & "<tr> <td>" & (nrep + 1) & "</td> <td> ข้อมูล (2, nrep) & "</td> <td>" _ & data (2, nrep) & "</td> <td>" _ & data (3, nrep) & "</td> <td>" & data (4, nRep) & "</td> <td> "</td> </tr>" NextWriteHtml = ฟังก์ชั่น shtmlend
นี่เป็นวิธีการทั่วไปที่ใช้โดย ASP และนักพัฒนา Basic Visual จำนวนมากเมื่อสร้างรหัส HTML ข้อความที่มีอยู่ในตัวแปร SHTML จะถูกส่งกลับไปยังรหัสการโทรและเขียนไปยังไคลเอนต์โดยใช้ Response.write แน่นอนว่าสิ่งนี้สามารถแสดงเป็นรหัสที่คล้ายกันที่ฝังหน้าเว็บที่ไม่มีฟังก์ชัน writehtml โดยตรง ปัญหาเกี่ยวกับรหัสนี้คือประเภทข้อมูลสตริง (BSTR หรือสตริงพื้นฐาน) ที่ใช้โดย ASP และ Visual Basic ไม่สามารถเปลี่ยนความยาวได้ ซึ่งหมายความว่าเมื่อใดก็ตามที่ความยาวสตริงเปลี่ยนแปลงการแสดงต้นฉบับของสตริงในหน่วยความจำจะเสียหายและการเป็นตัวแทนใหม่ที่มีข้อมูลสตริงใหม่จะถูกสร้างขึ้น: สิ่งนี้จะเพิ่มการทำงานของการจัดสรรหน่วยความจำและการจัดการหน่วยความจำ แน่นอน ASP และ Visual Basic ได้แก้ไขสิ่งนี้ให้คุณดังนั้นค่าใช้จ่ายที่เกิดขึ้นจริงจะไม่ปรากฏขึ้นทันที การจัดสรรและหน่วยความจำที่ไม่ได้ตั้งค่าต้องการรหัสรันไทม์พื้นฐานปลดล็อคล็อคเฉพาะแต่ละรายการดังนั้นจึงต้องใช้ค่าใช้จ่ายจำนวนมาก ปัญหานี้เห็นได้ชัดโดยเฉพาะอย่างยิ่งเมื่อสตริงกลายเป็นหน่วยความจำขนาดใหญ่และมีขนาดใหญ่จะได้รับการจัดสรรและจัดการในลักษณะที่รวดเร็วและต่อเนื่องเนื่องจากมันเกิดขึ้นในระหว่างการเชื่อมต่อสายขนาดใหญ่ แม้ว่าปัญหานี้จะมีผลกระทบเพียงเล็กน้อยต่อสภาพแวดล้อมของผู้ใช้เดี่ยว แต่อาจทำให้เกิดปัญหาประสิทธิภาพและความสามารถในการปรับขนาดได้อย่างจริงจังในสภาพแวดล้อมเซิร์ฟเวอร์ (เช่นแอปพลิเคชัน ASP ที่ทำงานบนเว็บเซิร์ฟเวอร์)