ข้ามไปที่เนื้อหาหลัก

บทความ

ออกแบบ Code เพื่อลดภาระของเซิร์ฟเวอร์

แนวคิดนี้เกิดขึ้นในระหว่างที่ผมเรียนรู้การเขียนโปรแกรม PHP โดยเน้นใช้งาน Array เพื่อลดการใช้ทรัพยากรของ MySQL เพราะบางขั้นตอน เราสามารถเก็บข้อมูลไว้ในอาร์เรย์แล้วเรียกใช้งานจะเร็วกว่าการเรียกจากฐานข้อมูลเป็นครั้งๆ เมื่อใช้ Array มากๆ บางครั้งก็เปลืองหน่วยความจำ จึงเป็นเรื่องที่ต้องให้ความสำคัญทีเดียว การเขียนโค๊ด PHP เพื่อสั่ง MySQL คิวรี่หลายๆครั้งจะใช้ CPU มาก แต่การคิวรี่น้อยครั้งแล้วเก็บไว้ใน Array จะใช้หน่วยความจำมากเช่นกัน ดังนั้นคงต้องมองไปที่เซิร์ฟเวอร์ว่า ระหว่าง RAM กับ CPU อันไหนมีจำกัดกว่ากัน  ถ้าสามารถใช้ RAM ได้เหลือเฟือก็คงใช้ Array เก็บข้อมูลมากๆ ได้สบายๆ หรือถ้าไม่จำกัด CPU ปล่อยใช้เต็มที่แล้วล่ะก็จะเขียนโปรแกรมสั่งให้ MySQL คิวรี่กี่ครั้งก็ได้แล้วแต่คุณเลยละกัน แต่โดยส่วนใหญ่ถ้าใช้งานบนเว็บโฮสติ้ง เขาจะจำกัดการใช้งาน CPU ไว้ หากระบบของเราใช้สูงเกินไป ก็จะมีอีเมลมาแจ้งเตือน และถ้าระบบของเราใช้เกินขีดจำกัดก็อาจจะถูกบล็อคการใช้งานไปเลย ต้องเสียเวลาเจรจาต่อรองกันอีกยาว เริ่มจากแนวคิดเรื่อง  "แบ่งภาระงานให้กับสคริปต์แต่ละตัวอย่างไรดี" ...

โค๊ดตัวอย่างการทำ Autocomplete แบบลดจำนวนการคิวรี่ MySQL

จากบทความที่แล้ว  หลักการเขียน PHP Autocomplete ด้วย jQuery ในรูปแบบ JSON  วันนี้จะมานำเสนอวิธีการเขียนโค๊ด Autocomplete ด้วย jQuery เป็นตัวอย่างสำหรับการทำงานด้วยแนวคิดที่ว่านี้ แล้วลองประยุกต์กันดูนะครับ ในบทความนี้จะพูดถึงอะไรบ้าง ก็จะมีการเขียนโค๊ด PHP  เพื่อเรียกข้อมูลจากฐานข้อมูล MySQL แล้วเขียนเป็นไฟล์ JavaScript เพื่อเรียกใช้ด้วย Autocomplete ด้วย jQuery อีกที จากซอร์สโค๊ดจะเห็นว่า PHP จะสั่งคิวรี่เพียงครั้งเดียว และเมื่อพิมพ์รายชื่อ จะสามารถแสดง Autocomplete ขึ้นมาให้เลือกได้โดยไม่ต้องส่งค่าไปมาด้วย Ajax อีก ซึ่งประหยัดทั้งแบนวิธด์ และการทำงานของ MySQL ที่ใช้ CPU ที่เกินจำเป็นได้อีกด้วย แต่ถ้าจะให้ดีก็ไม่ต้องคิวรี่ครับ (ดึงไฟล์ที่ได้สร้างเป็น *.js ไว้แล้วมาใช้เลยจะดีที่สุด ^_^ )

หลักการเขียน PHP Autocomplete ด้วย jQuery ในรูปแบบ JSON

       จากที่เคยนำเสนอบทความเกี่ยวกับการคิวรี่ข้อมูลจากฐานข้อมูลมาเก็บไว้ในตัวแปรอาร์เรย์แบบสองมิติ และเรียกใช้โดยการอ้างอิงคีย์ของแต่ละตารางไปแล้ว วันนี้จะนำเสนอเทคนิคการคิวรี่แบบประหยัดอีกวิธีสำหรับใครที่ชอบใช้ Autocomplete เพื่อเรียกข้อมูลมาแสดงให้ผู้ใช้งานสะดวกในการคีย์ข้อมูล        แต่กรณีผู้ใช้งานในขณะนั้นมีหลายคนทำรายการพร้อมกัน การทำงานของแต่ละคนก็คิวรี่หลายครั้ง ในแต่ละวันลองคิดดูครับว่าเซิร์ฟเวอร์จะทำงานหนักขนาดไหน เช่น พอเราป้อนชื่อลูกค้ามากกว่าสองคำ ก็จะมีการดึงข้อมูลลูกค้าที่คล้ายกันมาแสดง พอพิมพ์ไปอีกเป็นสามคำก็จะเรียกอีกครั้ง พอเพิ่มหรือลบคำออกก็จะคิวรี่ทุกๆ ครั้ง ที่มีการเปลี่ยนแปลงตัวอักษร  

กรณีศึกษา : การโหลดข่าวสารประชาสัมพันธ์ด้วย PHP

       เพื่อให้ได้ข่าวประชาสัมพันธ์ที่ใหม่ และเป็นปัจจุบัน จึงมีการใช้ Ajax ดึงข้อมูลมาแสดงเสมอๆ         แต่การดึงข้อมูลการแสดงนั้น เกิดขึ้นตลอดเวลา ทั้งที่การอัพเดตข่าวสาร อาจจะมีการเปลี่ยนแปลงเพียงสัปดาห์ละครั้ง เดือนละครั้ง         ซึ่งไม่ได้เกิดขึ้นตลอดเวลาเหมือน Facebook ดังนั้น จึงไม่มีความจำเป็นที่จะต้องส่ง Ajax ไปยังไฟล์ PHP เพื่อคิวรี่จากฐานข้อมูล MySQL ในทุกๆครั้งที่ครบรอบ        ดังนั้น การคิวรี่ทุกครั้งที่ครบกำหนดเวลา จะเป็นการดึงข้อมูลเดิมมาแสดงเท่านั้น        เพื่อลดภาระการดึงข้อมูลมาแสดงที่เกินความจำเป็น จะใช้วิธีการเพิ่มไฟล์สำหรับเช็กสถานะการอัพเดตข่าว โดยที่กำหนดเงื่อนไขสถานะไว้ในคอนฟิกไฟล์ แล้วก็ตรวจสอบโดยการอ่านไฟล์นั้นขึ้นมา หากพบว่ามีการอัพเดตใหม่ ถึงจะไปคิวรี่ข้อมูลมาแสดง แต่ถ้าไม่มีการอัพเดต ก็ใช้ ข้อมูลเดิมแสดงไปเรื่อยๆ โดยไม่ต้องไปเรียกมาจากฐานข้อมูล MySQL อีก

ส่วนแสดงผล แบบระบายสีตามช่วงเวลา ระบบจองห้องประชุม

สร้างตารางเรียน ตารางสอนด้วย PHP SQL สำหรับตรวจสอบช่วงเวลาที่ว่าง สำหรับระบบจองห้องประชุม ต่างๆ จากบทความที่ผ่านมา ได้เขียนไว้แบบไม่ได้ผูกเนื้อหาไว้ก่อนหน้า จึงทำให้การทำงานอาจจะข้ามไปมา คงจะเป็นภาระให้ท่านต้องทำการค้นหา และนำมาปรับใช้กันเอง  วันนี้จึงมีบทความใหม่จะมานำเสนอ โดยที่ใช้บทความเดิมมาปรับแต่งให้เข้ากับระบบการจองห้องประชุม โดยระบบนี้จะใช้ตารางเพียง 2 ตารางในการเก็บข้อมูลเท่านั้น และฐานข้อมูลที่เราจะใช้ในการเขียนโปรแกรมร่วมกับ PHP นั้นก็คือ MySQL เหมือนเช่นเคย

สร้างปฏิทิน รายงานยอดที่พนักงานทำได้ในแต่ละเดือนแบบง่ายๆ

ดัดแปลงบทความสร้างปฏิทินนะครับ แต่ในส่วนของการเช็กตรวจสอบว่าครบ 7 คอลัมน์ขึ้นแถวใหม่ ให้ตัดออก เราจะมาสร้างปฏิทินที่แสดงวันที่แถวเดียว เพื่อแสดงยอดของแต่ละวันของเดือนที่เลือกครับ โดยเวลาส่งค่าวันที่เดือนไหนก็ดึงค่าวันที่เริ่มต้น และวันที่สุดท้ายของเดือนออกมาเก็บไว้ และใช้คำสั่งวนลูป for() ให้ครบตั้งแต่วันที่ 1 จนถึงวันที่สุดท้ายของเดือน ก็จะได้หัวตารางที่แสดงวันที่ทั้งหมดของเดือน และเราจะกำหนดให้แสดงข้อมูลแต่ละแถว เป็นรายชื่อพนักงานละกันนะครับ โดยจะดึงข้อมูลมาจากฐานข้อมูลยอดขายของเดือนที่กำหนดนี้ออกมาจัดกลุ่มตามรายชื่อพนักงาน ว่าแต่ละวันพนักงานแต่ละคนมียอดขายเท่าไหร่กันบ้าง

เทคนิคการสร้างหน้าเว็บหน้าเดียว และดึงเนื้อหาจากหน้าอื่นๆมาแสดง

การเขียนโปรแกรมภาษา PHP  มีดีหลายอย่าง ^O^ แรกเริ่มเดิมที ก็ฝึกเขียนเว็บเป็นหน้าๆ ด้วยภาษา HTML เรื่อยไปครับ ถ้าเขียนหน้าใหม่เพิ่มแต่ละที ก็คัดลอกซอร์สโค๊ดของหน้าเดิมเพื่อเอามาแก้ไขใหม่ พอแก้ไขเมนูแต่ละที ถ้ามีสิบหน้ายี่สิบหน้า  ก็ต้องไล่แก้กันไม่หวาดไม่ไหว เลยลองใช้ IFRAME มาช่วยจัดหน้าดู ก็ช่วยได้เยอะครับ  แยกไฟล์เมนู แยกไฟล์เนื้อหา แยกไฟล์ส่วนหัว พอแก้ไขลิงค์เมนู หรือแก้แบนเนอร์ ก็แก้แค่ที่ไฟล์เดียว หน้าอื่นๆ ก็จะเปลี่ยนไปโดยอัตโนมัติ ก็เพราะดึงจากไฟล์เดียวกันนี้นี่เอง แต่พอใช้งานสักพักก็เริ่มขัดใจเรื่องการดีไซน์หน้าเว็บที่ไม่ค่อยยืดหยุ่น เหมือนชีวิตอยู่แต่ในกรอบ  ออกไปไหนอย่างอิสระดั่งใจนึกคิดก็ไม่ได้ จนกระทั่งได้รู้จัก PHP  คำสั่ง include ของ PHP นั้นช่วยให้ชีวิตง่ายขึ้นเยอะทีเดียว สร้างเว็บหน้าหลักหน้าเดียว  แล้วก็ทำการเรียกเนื้อหาจากไฟล์อื่นๆ มาแสดงได้อย่างง่ายๆ หน้าเว็บก็ได้สัดส่วนสวยงามทีเดียว บทความนี้ขอจั่วหัวไว้เพียงเท่านี้ก่อน ไว้จะนำตัวอย่างการออกแบบระบบช่วยงานครู  ที่เขียนขึ้นด้วย PHP แบบทีละขั้นๆ มาให้ได...