มาทำ Output Caching ใน ASP.NET กันเถอะ
Web Application ที่เราพัฒนากันนั้น จะสังเกตุได้ว่า หน้า Page ต่างๆ ที่ลูกค้าเข้ามาเยี่ยมชมนั้น หากสังเกตุดีๆ บางหน้าไม่มีการเปลี่ยนแปลงใดๆ เลย เป็นหน้าเดิมๆ บางหน้าไปเรียกจากฐานข้อมูลมาโชว์ หรือเรียกจาก Text, XML ไฟล์มาโชว์ แต่ข้อมูลที่มาโชว์นั้น ก็เหมือนเดิม กว่าจะ Update ก็นานๆ ที เอ เราจะมีวิธีไหนได้บ้างที่จะลดการทำงานของ Server ลง ซึ่งหากใครพัฒนาโดยใช้ ASP.NET Pages ผมขอแนะนำเทคนิคเล็กๆ น้อยๆ ครับ ไม่เห็นภาพใช่ไหมครับ มาลองทำกันดูครับ
เปิด Vistual Studio 2008 ครับ เขียน Web App สักตัวครับ

ลาก Button Control และ Label สักตัวมาวางไว้ จุดประสงค์ เมื่อกดปุ่ม Button ก็จะให้แสดงวัน - เวลา ของ Server ออกมาครับ

By kitichon
เขียน Code สั้น ใน Event Button1_click() โดยให้พิมพ์ วัน-เวลา เมื่อกดปุ่ม หลังจากนั้น ไปเพิ่ม Tag ASP ใน Default.aspx เลือก Source ตามภาพทางด้านล่าง
เพิ่ม Tag OutputCache โดยกำหนด Duration=10 ซึ่งจะเป็นการ Cache ไว้ 10 วินาที หลังจากนั้น กลับมาทดสอบที่ Browser โดยกดคลิ๊กไปเรื่อยๆ ดังภาพ
คลิ๊กไปเรื่อย ๆ จะเห็นว่าเวลา ไม่ได้เปลี่ยนไป จนกระทั่งเวลาเลยไป 10 วินาทีถึงจะแสดงเวลาถัดไปให้
ครับ เพียงเพิ่มแค่ 1 บรรทัด เท่านั้น ภายใน 10 วินาทีนั้น ก็ลดภาระของ Web Server ได้ระดับหนึ่ง…
แต่คำถามครับ หากหน้าเว็บเราไปเรียกจาก Text ไฟล์ หรือ XML ไฟล์ขึ้นมาแสดงล่ะ จะมีวิธีการ Cache อย่างไรได้บ้างไหม ซึ่งหากใช้วิธีเดิม จะสังเกตุได้ว่าพอครบ 10 วินาที ก็จะไปอ่านไฟล์มาไหม โอ อันตรายครับ อ่านทุก ๆ 10 วิ ก็เพิ่มงานให้เว็บอีกนะครับ ..เพราะฉะนั้น ลองดูอีกวิธีครับ คือให้ทำ Cache ไปตลอด หากไฟล์ Update ข้อความเมื่อไหร่ให้ทำลาย Cache ตัวเก่าลง และทำการ Cache ตัวใหม่ ลองดูวิธีกันเลยครับ
ผมเขียนไฟล์ mydata.txt ขึ้นมา 1 ไฟล์ โดยใช้ VS 2008 นั่นแหละครับง่ายดี หลักการคือ หน้า Default.aspx เมื่อใครกดปุ่ม จะไปอ่านไฟล์ โดยจะแสดงวันเวลาของ Server และก็แสดงข้อความในไฟล์ ว่ามีข้อความว่าอย่างไร
ก่อนอื่น ขอเพิ่ม Lable2 มาอีกตัวนะครับ เพื่อแสดงข้อความจาก mydata.txt ครับ
เพิ่ม Cache Duration หน่อยนะครับเพิ่มเป็น 10 นาที (600 วินาที) จริงๆ อาจมากกว่านี้ก็ได้นะครับ
กลับมาที่ Code ครับ เพิ่มอีกนิด แบ่งเป็น 3 กล่องนะครับ
- กล่องแดงบน เรียกใช้ Class System.IO เพื่อติดต่อกับไฟล์ และ System.Web.Caching เพื่อกำหนด Cache
- กล่องแดงกลาง กำหนด Cache ว่าให้ขึ้นอยู่กับไฟล์ mydata.txt ใน Directory ปัจจุบัน
- กล่องแดงล่าง ให้พิมพ์ วัน-เวลา ปัจจุบัน และให้เปิดอ่านไฟล์ mydata.txt มาแสดงใน Label2.Text
ในไฟล์ mydata.txt ก็เพิ่มข้อความสั้นๆ เข้าไปครับ
หลังจากนั้นก็ทดสอบครับ คลิ๊ก button ทุกครั้งจะแสดงวัน- เวลา และข้อความที่อยู่ใน MyData.txt ครับ ซึ่งภายใน 10 นาทีนี้ วัน-เวลาจะไม่เปลี่ยนแปลงครับ เนื่องจากเราได้กำหนด Cache Duration ไว้ 10 นาที เมื่อคลิ๊กไปคลิ๊กมา สัก 1 นาที พอเบื่อแล้วให้เข้าไปแก้ไข mydata.txt ครับ
เพิ่ม คำว่า append text เข้าไปครับ แล้วกด Save หลังจากนั้น ลอง Refresh Default.aspx ดูครับ
หลังจาก Refresh จะสังเกตุว่า วัน-เวลา จะเปลี่ยนไป อีกทั้งข้อความที่ดึงจาก mydata.txt ก็จะเปลี่ยนแปลงไปด้วย ทั้งๆ ที่ยังไม่ครบ 10 นาทีที่ได้กำหนด Cache ไว้
พอจะนึกประยุกต์ออกได้แล้วใช่ไหมครับ ในกรณีที่หน้า Web Page ของเราไปดึงเนื้อหามาจาก Text File หรือ XML ก็แล้วแต่ ครับ หากลูกค้ารายแรกเข้ามาเปิด Web ก็อาจช้านิดหน่อย เนื่องจากข้อมูลจะถูกนำไปเก็บใน Cache แต่ลูกค้าหลังจากนั้น ก็จะใช้ข้อมูลใน Cache ก็จะช่วยลดภาระการทำงานของ Server (ไม่ต้องไปอ่าน Text หรือ XML ไฟล์ใหม่) แต่เมื่อใดที่เราแก้ไข Text หรือ XML Cache ตัวเดิมจะตายลงทันที ลูกค้าก็จะเห็นข้อมูลใหม่ทันที และจะ Cache ไปจนกว่าจะมีการแก้ไข Text หรือ XML ใหม่ครับ
ลองนำไปประยุกต์ใช้งานกันดูนะครับ
ขอบพระคุณที่สนใจอ่าน
Reference :
- MSDN Caching ASP.NET Pages : http://msdn.microsoft.com/en-us/library/06bh14hk.aspx
- ที่นี่ละเอียดดีครับ : Data Caching Technique in ASP.NET 1.x and 2.0









