หากคุณรู้จัก Response.Flush และ Response.Clear คุณก็ไม่จำเป็นต้องรอเช่นนี้ ทุกครั้งที่มีการสร้างเพจ Html ระบบจะใช้ Response.write เพื่อส่งคืนข้อความทันทีที่ระบุว่าบันทึกฐานข้อมูลได้สร้าง Html แล้ว เมื่อโปรแกรมเมอร์เขียน HTML เพจแบบสแตติกที่สร้างจากเพจ ASP หากมีการสร้างเพจจำนวนมากพร้อมกัน เขาจะต้องพบกับกระบวนการรอที่ยาวนานโดยที่แถบความคืบหน้าที่ด้านล่างของเบราว์เซอร์แสดง 3%, 6 %, 10% ฯลฯ ที่ค่อยๆ เพิ่มขึ้น ในระหว่างกระบวนการรอนี้ คุณไม่ทราบว่าเรกคอร์ดใดที่ถูกสร้างขึ้นบนเพจ ดังนั้นคุณจึงทำได้แค่รอโดยลืมตาขึ้นมา
หากคุณรู้จัก Response.Flush และ Response.Clear คุณก็ไม่จำเป็นต้องรอเช่นนี้ ทุกครั้งที่มีการสร้างเพจ Html ระบบจะใช้ Response.write เพื่อส่งคืนข้อความทันทีที่ระบุว่าบันทึกฐานข้อมูลได้สร้าง Html แล้ว
ด้วยวิธีนี้ เมื่อมีการสร้างเพจจำนวนมากในเวลาเดียวกัน คุณจะไม่ได้ดูหน้าว่างเพียงลำพังอีกต่อไป แต่เพียงแต่สับสนกับแถบความคืบหน้าที่เปลี่ยนแปลงอย่างช้าๆ ที่ด้านล่างของเบราว์เซอร์ คุณสามารถรู้ได้เสมอว่าหน้าไหน สร้างบันทึกฐานข้อมูลแล้ว แม้ว่าจะมีอุบัติเหตุ เช่น ขัดข้อง ไฟฟ้าดับ ฯลฯ คุณจะทราบวันที่ควรบันทึกรุ่นต่อไปและรีสตาร์ทเพื่อสร้าง HTML ไม่ดีเหรอ นี่คือแถบความคืบหน้าและเฉพาะเจาะจงมากขึ้น
ฮ่าๆ ไม่ต้องกังวล เรามาดูความหมายของ Response.Flush และ Response.Clear กันก่อนดีกว่า
วิธีการล้างของวัตถุการตอบสนองจะส่งเอาต์พุตในบัฟเฟอร์ทันที วิธีนี้จะทำให้เกิดข้อผิดพลาดรันไทม์หากไม่ได้ตั้งค่า Response.Buffer เป็น TRUE ไวยากรณ์: Response.Flush; หมายเหตุ: หากเรียกใช้เมธอด Flush บนเพจ ASP เซิร์ฟเวอร์จะตอบสนองต่อคำขอ Keep-alive บนเพจ นำไปใช้กับวัตถุการตอบสนอง
เกี่ยวกับ Buffer นี่คือคำแนะนำ Buffer แปลจากภาษาอังกฤษว่า Buffer Zone ในที่นี้เราเรียกมันว่า Buffer เพราะไม่ใช่แค่คำนามเท่านั้น แต่ยังเป็นคำกริยาด้วย
บัฟเฟอร์เป็นสถานที่ที่ชุดข้อมูลถูกจัดเก็บ ข้อมูลที่ได้รับจากไคลเอ็นต์สามารถส่งออกได้โดยตรงจากผลการดำเนินการของโปรแกรมหรือเอาต์พุตจากบัฟเฟอร์ แต่มีความแตกต่างด้านความเร็วระหว่างสองวิธีนี้: ในเว็บ เมื่อไม่มีการร้องขอโปรแกรม ASP หลายครั้ง โดยพื้นฐานแล้วไม่มีความแตกต่างระหว่างทั้งสอง อย่างน้อยเราก็ไม่รู้สึก แต่เมื่อมีคนขอโปรแกรม asp จำนวนมาก ความเร็วก็ต่างกัน หากไม่มีบัฟเฟอร์ ผลลัพธ์ที่ได้รับจากไคลเอนต์แต่ละรายที่ร้องขอโปรแกรม ASP คือผลลัพธ์ที่ได้รับจากการรันโปรแกรม ASP หนึ่งครั้ง หากโปรแกรม ASP ถูกบัฟเฟอร์ล่วงหน้า ผลลัพธ์ที่ได้รับจากไคลเอนต์แต่ละรายจะเป็นผลลัพธ์ที่ถูกบัฟเฟอร์ ผลลัพธ์ของพื้นที่ไม่ใช่ผลลัพธ์ของการรันโปรแกรมเพียงครั้งเดียว ตัวอย่างเช่น ผู้ใช้ 1,000 รายเข้าถึงเพจ ASP ในเวลาเดียวกัน หากโปรแกรม ASP ไม่ได้รับการบัฟเฟอร์ โปรแกรมจะถูกดำเนินการนับพันครั้ง ซึ่งจะเพิ่มภาระบนเซิร์ฟเวอร์ และทำให้ไคลเอนต์เปิดเพจช้าลง โปรแกรม ASP ถูกบัฟเฟอร์ ดังนั้นผลลัพธ์จะแตกต่างกัน ไคลเอนต์แต่ละรายได้รับข้อมูลโดยตรงจากบัฟเฟอร์ และเซิร์ฟเวอร์จะไม่เพิ่มจำนวนการดำเนินการของโปรแกรมเนื่องจากการเข้าถึงที่เพิ่มขึ้น ดังนั้นความเร็วที่ไคลเอนต์เปิดเพจจะเป็น ช้ากว่ากรณีก่อนหน้าอย่างรวดเร็ว นี่คือประโยชน์ของบัฟเฟอร์
เกี่ยวกับ Response.clear วิธีการ Clear จะลบเอาต์พุต HTML ทั้งหมดในบัฟเฟอร์ แต่วิธีการล้างจะลบเฉพาะเนื้อหาการตอบกลับ ไม่ใช่ส่วนหัวการตอบกลับ คุณสามารถใช้วิธีนี้เพื่อจัดการกับเงื่อนไขข้อผิดพลาด โปรดทราบว่าวิธีนี้จะทำให้เกิดข้อผิดพลาดรันไทม์หากไม่ได้ตั้งค่า Response.Buffer เป็น TRUE ไวยากรณ์: Response.Clear; นำไปใช้กับวัตถุการตอบสนอง
หากคุณต้องการบรรลุผลของเอาต์พุตทันที เพียงเพิ่ม Response.Flush และ Response.Clear หลังจากข้อมูลพร้อมท์เอาต์พุตที่ต้องการในส่วนเนื้อหาของลูป ชอบ:
-
สำหรับ i=1 ถึง 2000
สำหรับ i1=1 ถึง 3000
''วงว่าง ขยายเวลาดำเนินการแต่ละครั้ง
ต่อไป
การตอบกลับเขียน i&)
การตอบสนองฟลัช
การตอบสนองชัดเจน
ต่อไป
-
หลังจากที่คุณรันคำสั่ง asp ข้างต้นแล้ว คุณจะพบว่าเอาท์พุตจะถูกเอาท์พุตทีละตัว หากคุณรันมันหนึ่งครั้ง มันก็จะถูกเอาท์พุตหนึ่งครั้ง
แต่ฉันเห็นคนบนอินเทอร์เน็ตพูดว่า หลายครั้งเราพบว่าแม้ว่าเราจะใช้ Response.Flush() ข้อมูลก่อนหน้านี้จะไม่ถูกส่งไปยังไคลเอนต์เพื่อแสดง เรายังคงนำเสนอด้วยหน้าจอสีขาว หลังจากการทดสอบซ้ำแล้วซ้ำเล่า ฉันก็ได้ข้อสรุป: เนื้อหาฟลัชต้องมีขนาดอย่างน้อย 256 ไบต์ กล่าวคือ เฉพาะในกรณีที่การคอมไพล์สร้างข้อมูลอย่างน้อย 256 ไบต์ ข้อมูลจึงสามารถส่งไปยังไคลเอนต์และแสดงได้หลังจากดำเนินการ Response.Flush()
เป็นเรื่องแปลกที่คำสั่งที่ฉันให้ไว้ข้างต้นบรรลุผลของการแสดงทีละรายการ และไม่แสดงผลล่วงหน้า 256 ไบต์ คุณสามารถบันทึกคำสั่งข้างต้นเป็น Notepad และเรียกใช้เพื่อดูเอฟเฟกต์จะแสดงทีละบรรทัด ความคิดเห็นที่ฉันระบุไว้เป็นเพียงความคิดเห็นส่วนตัวของ Flymorn เท่านั้น และไม่สามารถใช้เพื่อวัตถุประสงค์อื่นได้
หากคุณต้องการเอาต์พุต 256 ไบต์ล่วงหน้าจริงๆ คุณสามารถทำได้:
-
ลี่จิสลัว
สำหรับ i=1 ถึง 256
liji=liji&<!--ขั้นแรกให้สร้างอักขระ 256 ตัว-WWW.PIAOYI.ORG-->
ถ้า len(liji)>=256 ให้ออกเพื่อ
ต่อไป
-
หากคุณมีมุมมองที่แตกต่างหรือผลการทดสอบที่แตกต่างกัน โปรดอย่าลังเลที่จะหารือกับฉัน