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

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

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



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

ถ้าสามารถใช้ RAM ได้เหลือเฟือก็คงใช้ Array เก็บข้อมูลมากๆ ได้สบายๆ หรือถ้าไม่จำกัด CPU ปล่อยใช้เต็มที่แล้วล่ะก็จะเขียนโปรแกรมสั่งให้ MySQL คิวรี่กี่ครั้งก็ได้แล้วแต่คุณเลยละกัน

แต่โดยส่วนใหญ่ถ้าใช้งานบนเว็บโฮสติ้ง เขาจะจำกัดการใช้งาน CPU ไว้ หากระบบของเราใช้สูงเกินไป ก็จะมีอีเมลมาแจ้งเตือน และถ้าระบบของเราใช้เกินขีดจำกัดก็อาจจะถูกบล็อคการใช้งานไปเลย ต้องเสียเวลาเจรจาต่อรองกันอีกยาว



เริ่มจากแนวคิดเรื่อง "แบ่งภาระงานให้กับสคริปต์แต่ละตัวอย่างไรดี"



สคริปต์ที่ผมพูดถึงก็คือภาษาที่ใช้พัฒนาเว็บฯนั่นเอง ที่ใช้เป็นประจำก็คือ HTML, JavaScript, PHP (สำหรับ jQuery นั้นถือว่าเป็น Framework ของ JavaScript อยู่ในส่วนเดียวกัน)

HTML ทำงานบนฝั่งผู้ใช้งานแต่ละคน เป็นสคริปต์ภาษาหลักที่ใช้จัดรูปแบบหน้าเว็บเท่านั้น
JavaScript นั้นทำงานที่ฝั่งของผู้ใช้งานแต่ละคน
PHP จะทำงานอยู่บนเซิร์ฟเวอร์ 



นั่นหมายความว่า...

ถ้าเราใช้คำสั่ง PHP การเรียกใช้ตัวแปร หรือกระบวนการต่างๆ จะใช้ CPU และ RAM ของเครื่อง Server อย่างแน่นอน เช่นใช้ PHP สั่งแสดงข้อมูล HTML ด้วยคำสั่ง 

<?php
echo "<b>Hello World</b>";
?>

การทำงานนี้ก็จะใช้หน่วยความจำ หรือ CPU ของเซิร์ฟเวอร์ใช่หรือไม่??


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

ส่งค่าผ่าน Ajax โดยใช้ jQuery

$.ajax({
url: 'ajax.php',
type: 'get', 
cache: false,
data: 'action=view',
success: displayData
});

คำสั่ง PHP ที่แสดงข้อมูล

<?php
echo "Hello World";
?>

เมื่อส่งค่ากลับมายังจาวาสคริปต์

function displayData(data){
    $('#display").html("<b>" + data + "</b>");
}


นี่เป็นตัวอย่างเล็กๆ ของการใช้จาวาสคริปต์จัดรูปแบบให้ข้อมูลตัวอักษรหนาขึ้น แทนการ echo รูปแบบโดย PHP ซึ่งจะสังเกตได้ว่าการทำงานของ PHP นั้น จะทำหน้าที่ส่งข้อมูลมาแบบเพียวๆ ไม่มีการตกแต่งจัดรูปแบบ HTML แต่อย่างใด


สำหรับบทความต่อไป จะลองหาโค๊ดปฏิทินที่สร้างด้วย PHP มาแยกส่วนของข้อมูล และส่วนของ HTML ออกจากกัน เพื่อให้เห็นภาพชัดขึ้นว่าสิ่งที่บทความนี้พยายามจะชี้ให้เห็นนั้น หมายถึงอะไร



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

ปล2. ผมมักจะแสวงหาเว็บโฮสติ้งฟรีเพื่อทดสอบโค๊ด หรือลอง CMS เล่นๆ แล้วก็มักจะลงเอยด้วยการโดยบล็อคไอดี และลบซอร์สโค๊ดของผม เพราะเจ้าของเขาบอกว่าใช้ CPU เกินขีดจำกัด



PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม

สนใจสั่งซื้อเพียง 4,500 บาท
http://fastcoding.phpcodemania.com/

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย PHP สำหรับนำไปใช้ในงานต่างๆ

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สอนเขียน PHP แสดงการจองห้องประชุมแบบไฮไลท์ตามช่วงเวลา (แบบเชื่อมต่อฐานข้อมูล MySQL)

ตัวอย่าง ผลลัพธ์ที่ได้จากการจองในฐานข้อมูล ตาราง tb_room สร้างตารางรายชื่อห้องประชุม สำหรับ id นั้นเป็น Primarykey จะกำหนดให้สร้างอัตโนมัติ ทุกครั้งที่เราเพิ่มชื่อห้องประชุมใหม่ -- -- Database: `tobedev_example` -- -- -------------------------------------------------------- -- -- Table structure for table `tb_room` -- CREATE TABLE IF NOT EXISTS `tb_room` (   `id` int(11) NOT NULL,   `name` varchar(30) NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- -- Dumping data for table `tb_room` -- INSERT INTO `tb_room` (`id`, `name`) VALUES (1, 'ห้องประชุม 1'), (2, 'ห้องประชุม 2'), (3, 'ห้องประชุม 3'), (4, 'ห้องประชุม 4'), (5, 'ห้องประชุม 5'); -- -- Indexes for dumped tables -- -- -- Indexes for table `tb_room` -- ALTER TABLE `tb_room`   ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tb_room` -- ALTER TABLE `tb_room`   MODIFY `i...

การดึงข้อมูล MySQL มาแสดงในปฏิทิน Fullcalendar ด้วย PHP

หลักการทำงาน เรียกข้อมูลจากตาราง tb_event ด้วยฟังก์ชั่นของ MySQLi ข้อมูลจากฐานข้อมูลจะถูกวนลูปเก็บไว้ใน $data และจะถูกส่งไปที่ Fullcalendar ด้วยการแปลงข้อมูลจาก PHP ให้อยู่ในรูปแบบ JSON อาร์เรย์ด้วยฟังก์ชั่น json_encode() PHP Code <?php //Database $data = array(); $link = mysqli_connect("127.0.0.1", "tobedev", "1234", "tobedev_example"); mysqli_set_charset($link, 'utf8'); if (!$link) {     echo "Error: Unable to connect to MySQL." . PHP_EOL;     echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;     echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;     exit; } $query = "SELECT * FROM tb_event"; if ($result = $link->query($query)) {     /* fetch object array */     while ($obj = $result->fetch_object()) {        $data[] = array(                 ...