跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

การวัด Performance: ใช้ Xdebug Profiler

บทความนี้แนะนำ Xdebug Profiler ซึ่งเป็นเครื่องมือสำคัญสำหรับการวัดประสิทธิภาพของโค้ด PHP เพื่อระบุจุดที่ทำให้แอปพลิเคชันทำงานช้า (bottleneck) และปรับปรุงแก้ไขให...

การวัด Performance: ใช้ Xdebug Profiler

ในบทที่แล้ว เราได้เรียนรู้วิธีการใช้ Redis เพื่อ Caching ข้อมูลใน PHP เพื่อเพิ่มความเร็วให้กับ Application ของเรา ในบทนี้ เราจะมาเรียนรู้วิธีการใช้ Xdebug Profiler ซึ่งเป็นเครื่องมือที่ช่วยให้เราสามารถวัด Performance ของ Code PHP ได้อย่างละเอียด เพื่อหาจุดที่ทำให้ Application ของเราทำงานช้า และนำไปปรับปรุงแก้ไขให้มีประสิทธิภาพมากยิ่งขึ้น

ทำไมต้องวัด Performance?

การวัด Performance เป็นสิ่งสำคัญอย่างยิ่งในการพัฒนา Web Application เพราะช่วยให้เรา:

  • ระบุจุดที่ทำให้ Application ทำงานช้า (Bottleneck)
  • เปรียบเทียบ Performance ก่อนและหลังการปรับปรุง Code
  • เข้าใจการทำงานของ Code ในเชิงลึก
  • ปรับปรุง User Experience โดยรวม

Xdebug Profiler เป็นเครื่องมือที่ทรงพลังที่ช่วยให้เราเห็นภาพรวมของ Performance ของ Application ได้อย่างชัดเจน

การติดตั้ง Xdebug

ก่อนที่เราจะเริ่มใช้งาน Xdebug Profiler ได้ เราต้องทำการติดตั้ง Xdebug Extension ก่อน วิธีการติดตั้งจะแตกต่างกันไปขึ้นอยู่กับระบบปฏิบัติการและ PHP Version ที่คุณใช้งาน

สำหรับ Linux (Ubuntu/Debian):

sudo apt-get update
sudo apt-get install php-xdebug

สำหรับ macOS (Homebrew):

brew install php-xdebug

สำหรับ Windows:

สำหรับ Windows คุณจะต้องดาวน์โหลด Xdebug DLL ที่เหมาะสมกับ PHP Version ของคุณจากเว็บไซต์ Xdebug อย่างเป็นทางการ: https://xdebug.org/download

หลังจากดาวน์โหลด DLL แล้ว ให้ทำตามขั้นตอนเหล่านี้:

  1. วาง DLL file ไว้ใน directory ext ของ PHP (เช่น C:\php\ext)
  2. แก้ไข php.ini file และเพิ่มบรรทัดต่อไปนี้:
    zend_extension=php_xdebug-3.2.2-8.1-vs16-x86_64.dll
    xdebug.mode=develop,profile
    xdebug.start_with_request=yes
    xdebug.output_dir="C:\tmp" ; เปลี่ยนเป็น directory ที่คุณต้องการเก็บ Profiler Output
    

    สำคัญ: เปลี่ยน php_xdebug-3.2.2-8.1-vs16-x86_64.dll ให้ตรงกับชื่อไฟล์ที่คุณดาวน์โหลดมา และ C:\tmp เป็น directory ที่คุณต้องการเก็บ Profiler Output

  3. Restart Web Server (เช่น Apache หรือ Nginx)

ตรวจสอบการติดตั้ง:

หลังจากติดตั้ง Xdebug แล้ว ให้ตรวจสอบว่า Xdebug ถูกเปิดใช้งานอย่างถูกต้อง โดยสร้างไฟล์ phpinfo.php ที่มี Code ดังนี้:

<?php
phpinfo();
?>

เปิดไฟล์นี้ผ่าน Web Browser ของคุณ และค้นหาคำว่า "Xdebug" หาก Xdebug ถูกติดตั้งอย่างถูกต้อง คุณจะเห็นข้อมูลเกี่ยวกับ Xdebug Extension

การใช้งาน Xdebug Profiler

เมื่อ Xdebug ถูกติดตั้งและเปิดใช้งานแล้ว เราก็สามารถเริ่มใช้งาน Profiler ได้ โดย Xdebug จะสร้าง Profiler Output File ซึ่งเป็นไฟล์ที่เก็บข้อมูลเกี่ยวกับ Performance ของ Code PHP ในระหว่างการทำงาน

การตั้งค่า Xdebug สำหรับ Profiler:

ตรวจสอบให้แน่ใจว่า xdebug.mode ใน php.ini ถูกตั้งค่าเป็น develop,profile และ xdebug.start_with_request ถูกตั้งค่าเป็น yes ซึ่งจะทำให้ Xdebug เริ่มทำการ Profiling ทุกครั้งที่มี Request เข้ามา

การเรียกใช้งาน Profiler:

เมื่อคุณเรียกใช้งาน PHP Script ผ่าน Web Browser หรือ Command Line Xdebug จะทำการ Profiling และสร้าง Profiler Output File ใน Directory ที่ระบุใน xdebug.output_dir (เช่น C:\tmp ในตัวอย่างก่อนหน้า)

ชื่อไฟล์ Profiler Output:

ชื่อไฟล์ Profiler Output จะมีรูปแบบเป็น cachegrind.out.xxxxxxxxxx โดย xxxxxxxxxx เป็น String ที่ Generate ขึ้นมาแบบสุ่ม

การวิเคราะห์ผลลัพธ์ Profiler

Profiler Output File เป็นไฟล์ Binary ที่เราไม่สามารถอ่านได้โดยตรง เราต้องใช้เครื่องมือพิเศษในการวิเคราะห์ข้อมูลในไฟล์นี้ เครื่องมือที่นิยมใช้กันคือ:

  • KCachegrind (Linux): เป็นเครื่องมือ Open Source สำหรับ Linux
  • Webgrind: เป็น Web Application ที่สามารถแสดงผล Profiler Output ใน Web Browser
  • PhpStorm: เป็น IDE ที่มี Built-in Support สำหรับ Xdebug Profiler

ในบทนี้ เราจะใช้ Webgrind เป็นตัวอย่างในการวิเคราะห์ผลลัพธ์ Profiler

การติดตั้ง Webgrind:

  1. ดาวน์โหลด Webgrind จาก GitHub: https://github.com/jokkedk/webgrind
  2. Extract ไฟล์ที่ดาวน์โหลดมาไว้ใน Web Server Directory (เช่น /var/www/html/webgrind)
  3. แก้ไข config.php ใน Webgrind Directory และกำหนดค่า $dataDir ให้ชี้ไปยัง Directory ที่เก็บ Profiler Output Files (เช่น C:\tmp)
  4. เปิด Webgrind ผ่าน Web Browser (เช่น http://localhost/webgrind)

การวิเคราะห์ข้อมูลด้วย Webgrind:

เมื่อเปิด Webgrind แล้ว คุณจะเห็น List ของ Profiler Output Files ที่สร้างขึ้น เลือกไฟล์ที่คุณต้องการวิเคราะห์

Webgrind จะแสดงข้อมูลต่างๆ เกี่ยวกับ Performance ของ Code PHP ของคุณ เช่น:

  • Call Graph: แสดงภาพรวมของ Function Calls และเวลาที่ใช้ในแต่ละ Function
  • Function List: แสดง List ของ Function ทั้งหมดที่ถูกเรียกใช้งาน พร้อมกับเวลาที่ใช้ในแต่ละ Function
  • Callers/Callees: แสดง Function ที่เรียก Function ปัจจุบัน และ Function ที่ถูกเรียกโดย Function ปัจจุบัน

การหา Bottleneck:

มองหา Function ที่มี "Self Cost" สูง ซึ่งหมายถึง Function ที่ใช้เวลาในการทำงานมากที่สุด โดยไม่รวมเวลาที่ใช้ใน Function ที่ถูกเรียกโดย Function นั้น

ตัวอย่างการใช้งาน:

สมมติว่าเรามี Code PHP ดังนี้:

<?php

function slowFunction() {
  usleep(500000); // Simulate a slow operation
}

function processData($data) {
  for ($i = 0; $i < 1000; $i++) {
    slowFunction();
    // Some other data processing logic
  }
  return $data;
}

$data = ['item1', 'item2', 'item3'];
$result = processData($data);

echo "Result: " . implode(", ", $result);

?>

เมื่อเราเรียกใช้งาน Script นี้ และวิเคราะห์ Profiler Output ด้วย Webgrind เราจะพบว่า Function slowFunction มี Self Cost สูงมาก ซึ่งบ่งชี้ว่า Function นี้เป็น Bottleneck ที่ทำให้ Application ทำงานช้า

การแก้ไข Bottleneck:

หลังจากที่เราพบ Bottleneck แล้ว เราสามารถทำการปรับปรุง Code เพื่อลดเวลาในการทำงานของ Function นั้นได้ ในตัวอย่างนี้ เราสามารถปรับปรุง slowFunction ให้ทำงานได้เร็วขึ้น หรือหลีกเลี่ยงการเรียกใช้งาน Function นี้บ่อยๆ

ข้อผิดพลาดที่พบบ่อย:

  • Profiler Output File ไม่ถูกสร้าง: ตรวจสอบว่า Xdebug ถูกติดตั้งและตั้งค่าอย่างถูกต้อง และ xdebug.mode ถูกตั้งค่าเป็น develop,profile
  • Webgrind ไม่แสดง Profiler Output File: ตรวจสอบว่า $dataDir ใน config.php ของ Webgrind ถูกตั้งค่าให้ชี้ไปยัง Directory ที่เก็บ Profiler Output Files อย่างถูกต้อง

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการใช้ Xdebug Profiler เพื่อวัด Performance ของ Code PHP และวิเคราะห์ผลลัพธ์ด้วย Webgrind การใช้ Xdebug Profiler เป็นทักษะที่สำคัญสำหรับนักพัฒนา PHP ทุกคน เพราะช่วยให้เราสามารถระบุและแก้ไข Bottleneck ที่ทำให้ Application ทำงานช้า และปรับปรุง Performance โดยรวมของ Application ได้

ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับ Refactoring และเทคนิคต่างๆ ในการปรับปรุง Code ให้สะอาดและอ่านง่าย

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务