2007/11/20

การเก็บค่าแบบ ASP.NET

การเก็บค่าแบบ ASP.NET มีหลายแบบแต่ที่เห็นได้ชัดมีอยู่ 5 แบบ แยกเป็น 2 กลุ่ม

ค่าของตัวแปรเก็บไว้ที่ Server

  1. Application State - ตัวแปรที่ Client ทุกคนสามารถมองเห็นเป็นตัวเดียวกัน ถ้ามีการเปลี่ยนแปลงเกิดขึ้น ก็จะมีผลกับ Client ทุกๆคน โดย Application สามารถเก็บค่าได้เป็นแบบ Object นั่นหมายถึงว่าไม่จำกัดว่าจะต้องเป็น Integer, String, Collection ฯลฯ
    วิธีใช้
    Application("data") = 100
    Response.Write(Application("data").ToString)
  2. Session State - การเก็บค่าจะเก็บเป็น Object เหมือนกับ Application State แต่จะต่างกันตรงที่ตัวแปรชื่อเดียวกัน แต่ Client แต่ละคนจะเก็บค่าเป็นของตัวเอง ถ้า Client คนนึงเปลี่ยนแปลงค่าตัวแปรก็จะมีผลกับ Client คนนั้น เท่านั้น
    วิธีใช้ (เช่นเดียวกับ Application State)
    Session("data") = "Test"
    Response.Write(Session("data").ToString)
  3. Web.Config - คือการประกาศค่าคงที่ของตัวแปรเอาไว้เลย
    ค่าของตัวแปรเก็บไว้ที่ Client แต่ละคน

1. Cookies - จะสร้างเป็น File เก็บไว้ใน Temporary Internet Files เนื่องจากค่าจะเก็บไว้ Client แต่ละคน ฉะนั้น Client แต่ละคนก็จะเห็นค่าเป็นของตัวเอง
วิธีใช้
Request.Cookies.Add("data") = 1000
Response.Write(Request.Cookies("data").ToString)


2. ViewState - จะต่างกันตรงที่ Cookies จะสร้างเป็น File เก็บไว้ใน Temporary Internet Files แต่ ViewState จะเก็บไว้ที่ หน้า Internet Explorer นั้นๆ ถ้าเราปิด Internet Explorer จะทำให้ค่าหายไปด้วย
แต่สำหรับ Cookies ถึงแม้เราจะปิด Internet Explorer ไปถ้า Cookie ยังไม่ครบ Timeout เวลาเราเปิด Internet Explorer อีกครั้งมันจะก็ยังสามารถใช้ตัวแปรตัวนี้ได้อยู่
วิธีใช้ ViewState
ViewState("data") = "Your Name"
Response.Write(ViewState("data").ToString)


เก็บค่าไว้ที่ Server ข้อดีคือ
- การประมวลผลเร็วเพราะค่าถูกเก็บไว้ที่ Server เลย
- สามารถแชร์ตัวแปรได้ (ใช้ Application State) โดยทุก Client สามารถใช้ตัวแปรตัวนี้เป็นตัวเดียวกันได้เลย
ข้อเสีย
- ถ้าเก็บค่าไว้ที่ Server เยอะ ก็จะทำให้ Server ต้องทำงานหนักและเปลืองเนื้อที่ด้วย

เก็บค่าไว้ที่ Client ข้อดีคือ
- ไม่เปลืองเนื้อที่ของ Server
- สามารถแยกการใช้งานของตัวแปร ของแต่ละ Client ได้อย่างชัดเจน
ข้อเสียคือ
- จะช้ากว่าแบบ Server นิดหน่อย เพราะต้องส่งค่าที่เก็บอยู่ที่ Client ไปให้ Server ทำการประมวลผล
- ถ้ามีข้อมูลใหญ่ๆ หรือเยอะๆ จะทำให้ เวปโหลดช้า และทำงานหนัก + เปลือง Traffic ด้วย



onclick ทำงานฝั่ง client
onserverclick ทำงานฝั่ง server

Include รวมไฟล์นอก project เข้ามาใน project
Exclude แยกไฟล์ไว้นอก project (พักไว้ก่อน)

ViewState มีหน้าที่ที่จะเก็บข้อมูลที่ผู้ใช้ได้เคยกรอกไว้แล้ว