การทำโปรไฟล์ php.ini การทำโปรไฟล์และการดีบักแอปพลิเคชัน PHP ด้วย xhprof & FirePHP

โดยจะแสดงวิธีการติดตั้งและกำหนดค่า xdebug และครอบคลุมคุณสมบัติพื้นฐานบางอย่าง เช่น การปรับปรุงเอาต์พุตของฟังก์ชัน var_dump() หรือการพิมพ์การติดตามสแต็กการเรียกเมื่อได้รับข้อความแสดงข้อผิดพลาด ในส่วนที่สอง เราพิจารณาฟีเจอร์ xdebug นี้ว่าเป็นการติดตาม การติดตามประกอบด้วยการเรียกฟังก์ชันและวิธีการทั้งหมดในโปรแกรม เวลาเริ่มต้น ขนาดหน่วยความจำเสริม พารามิเตอร์ที่ส่งและส่งคืน บันทึกการติดตามสามารถช่วยให้คุณเข้าใจเส้นทางการดำเนินการของโปรแกรมที่ซับซ้อนได้ แทนที่จะแทรกโค้ดแก้ไขจุดบกพร่องภายในโปรแกรม คุณสามารถเปิดหรือปิดการติดตามเมื่อจำเป็น จากนั้นใช้โปรแกรมอรรถประโยชน์ เช่น grep หรือแอปพลิเคชัน PHP ของคุณเองเพื่อวิเคราะห์ไฟล์บันทึก

ในบทความนี้เราจะดูที่การทำโปรไฟล์ เมื่อมองแวบแรก การทำโปรไฟล์จะคล้ายกับการติดตาม บันทึกการทำโปรไฟล์ไม่ได้มีไว้สำหรับมนุษย์ แต่ไม่ได้มีไว้เพื่อแสดงภาพการไหลของโปรแกรม แต่ให้ข้อมูลสำหรับการวิเคราะห์ทางสถิติของโปรแกรมที่กำลังทำงานอยู่

การสร้างบันทึกการทำโปรไฟล์

ด้านล่างนี้เป็นข้อความที่ตัดตอนมาสั้นๆ จากบันทึกการทำโปรไฟล์ที่สร้างโดย xdebug:

fl=php:ภายใน
fn=php::define
106 3

Fl=C:\www\drupal\includes\bootstrap.inc
fn=require_once::C:\www\drupal\includes\bootstrap.inc
1 648
cfn=php::define
โทร=1 0 0
13 6
cfn=php::define
โทร=1 0 0
18 4
cfn=php::define
โทร=1 0 0
23 2


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

โปรดทราบว่าคุณไม่สามารถรันการสร้างโปรไฟล์ในเวลาเริ่มต้นโดยการรันคำสั่งได้
เนื่องจากโปรแกรมวิเคราะห์ตั้งใจให้อ่านบันทึกโปรไฟล์ จึงไม่มีการตั้งค่าเพิ่มเติมที่อนุญาตให้คุณแสดงข้อมูลเพิ่มเติมได้ เช่นเดียวกับในกรณีของบันทึกการติดตาม อย่างไรก็ตาม มีการตั้งค่าบางอย่างที่อนุญาตให้คุณกำหนดค่าโปรไฟล์ได้ คล้ายกับที่เราใช้เมื่อตั้งค่าการติดตาม
ประการแรก xdebug เขียนบันทึกการทำโปรไฟล์ไปยังไดเร็กทอรี /tmp ตามค่าเริ่มต้น หากคุณใช้ Windows คุณจะต้องแก้ไข php.ini ดังนี้:
xdebug.profiler_output_dir = "c: \ ร่องรอย"

ตามค่าเริ่มต้น xdebug จะเขียนทับบันทึกการทำโปรไฟล์ที่มีอยู่ คุณสามารถกำหนดค่าให้เสริมกับที่มีอยู่ได้โดยเพิ่มคำสั่งต่อไปนี้

ใน php.ini มีหลายกรณีที่คุณไม่ต้องการสร้างบันทึกการทำโปรไฟล์สำหรับไฟล์ทั้งหมด แต่ในขณะเดียวกันการเปิดใช้งานการทำโปรไฟล์ขณะรันไทม์ก็เป็นปัญหา แทนที่จะเปิดและปิดโปรไฟล์เป็นระยะๆ ให้เพิ่มคำสั่ง
xdebug.profiler_enable_trigger=เปิด

ใน php.ini ตอนนี้คุณสามารถเปิดและปิดการทำโปรไฟล์ได้โดยส่งพารามิเตอร์ GET หรือ POST พิเศษ XDEBUG_PROFILE ไปยังสคริปต์ PHP สิ่งนี้จะเปิดใช้งานการสร้างโปรไฟล์สำหรับสคริปต์ PHP นี้เท่านั้น ไม่จำเป็นต้องตั้งค่าของพารามิเตอร์นี้ เพียงอย่าลืมเพิ่มพารามิเตอร์นี้ไปยังที่อยู่ test.php?XDEBUG_PROFILE

ชื่อบันทึกการทำโปรไฟล์

ชื่อที่ xdebug กำหนดให้กับบันทึกโปรไฟล์ตามค่าเริ่มต้นคือ “cachegrind.out” บวกกับตัวระบุกระบวนการ เช่นเดียวกับในกรณีของบันทึกการติดตาม คุณสามารถเปลี่ยนชื่อของบันทึกได้โดยเพิ่มการตั้งค่าที่เหมาะสมให้กับ php.ini ชื่อพารามิเตอร์ xdebug.profiler_output_name อาร์กิวเมนต์เป็นสตริง ซึ่งอาจมีตัวดัดแปลงต่างๆ สิ่งที่สำคัญที่สุดอยู่ด้านล่าง:

  • %p – ตัวระบุกระบวนการ
  • %r – ตัวเลขสุ่ม
  • %u - เวลา
  • %H – ค่าของ $_SERVER["HTTP_HOST"]
  • %R – ค่าของ $_SERVER["REQUEST_URI"]
  • %s – ชื่อรวมถึงเส้นทางแบบเต็ม เครื่องหมายทับจะถูกแปลงเป็นขีดล่าง
โปรดทราบว่าตัวแก้ไข %s ใช้สำหรับ xdebug.profiler_output_name เท่านั้น หากคุณต้องการทราบชื่อของบันทึกการทำโปรไฟล์ คุณสามารถเรียกใช้ฟังก์ชัน xdebug_get_profiler_filename()

การวิเคราะห์บันทึกการทำโปรไฟล์
ตามที่กล่าวไว้ข้างต้น เพื่อวิเคราะห์บันทึกการทำโปรไฟล์ จำเป็นต้องมีโปรแกรมเพิ่มเติมสำหรับการแสดงภาพข้อมูล บันทึกการทำโปรไฟล์ทั้งหมดที่ xdebug สร้างอยู่ในรูปแบบที่คล้ายกับรูปแบบ Cachegrind Cachegrind เป็นตัวสร้างโปรไฟล์ที่เป็นส่วนหนึ่งของโปรแกรมที่ทรงพลังกว่าชื่อ Valgrind ซึ่งเป็นโปรแกรมแก้ไขจุดบกพร่องซอฟต์แวร์และจัดทำโปรไฟล์สำหรับ Linux Cachegrind ได้รับการออกแบบมาเพื่อวิเคราะห์สถิติของแคช การใช้หน่วยความจำ และคำสั่งของโปรแกรม เครื่องมือ Valgrind อีกตัวหนึ่งคือ Callgrind ดึงกราฟการโทร เกี่ยวกับ PHP เราสามารถใช้แอปพลิเคชันนี้เพื่อแสดงภาพและวิเคราะห์บันทึกการทำโปรไฟล์
เครื่องมือที่ใช้กันทั่วไปในการวิเคราะห์บันทึกการทำโปรไฟล์ที่สร้างโดย xdebug เรียกว่า KCachegrind เป็นซอฟต์แวร์ฟรีที่ได้รับอนุญาตภายใต้ GPL (ใช้ได้กับระบบ Unix เท่านั้น) อย่างไรก็ตาม มีโปรแกรมง่ายๆ สำหรับ Windows ซึ่งให้บริการฟรีเช่นกัน มาดูเวอร์ชั่นของ Windows กันก่อน

WinCacheGrind: การวิเคราะห์บันทึกการทำโปรไฟล์ใน Windows

เวอร์ชันปัจจุบัน (ณ เวลาที่เขียนโดยผู้เขียนบทความนี้) ของ WinCachegrind คือ 1.0.0.12 เวอร์ชันนี้ย้อนกลับไปในปี 2548 ซึ่งหมายความว่า WinCachegrind ไม่ได้รับการพัฒนามาเป็นเวลานาน หากคุณดูบันทึกประจำรุ่น ผู้เขียนเขียนว่าโปรแกรมมีข้อบกพร่องซึ่งบางครั้งทำให้มีพฤติกรรมแปลกๆ
ดังนั้น ฉันขอแนะนำให้ใช้ KCachegrind ซึ่งเปิดตัวบนพื้นฐานของเครื่องเสมือนบนการกระจาย Linux ล่าสุด เช่น Ubuntu (หมายเหตุของนักแปล โดยทั่วไปแล้ว เป็นคำแนะนำที่แปลก ในกรณีนี้ ฉันขอแนะนำให้ติดตั้ง Linux เพียงอย่างเดียว ไม่ใช่รั้วใน สวนของเครื่องเสมือน) มีเครื่องเสมือนจำนวนมากใน Windows หากไม่สามารถใช้ Unix หรือเครื่องเสมือนได้ด้วยเหตุผลบางประการ คุณสามารถใช้ WinCachegrind ต่อไปเพื่อวิเคราะห์บันทึกการทำโปรไฟล์อย่างง่ายได้ WinCachegrind ไม่ได้วาดกราฟการโทร ต่างจาก KCachegrind
การติดตั้ง Wincachegrind นั้นง่ายมาก เรียกใช้โปรแกรมติดตั้ง คลิกที่ปุ่มเพื่อยอมรับใบอนุญาตและการติดตั้งเสร็จสมบูรณ์ ตอนนี้คุณสามารถรันโปรแกรมและเปิดหนึ่งในบันทึกโปรไฟล์ cachegrind ที่สร้างโดย xdebug

เมื่อคลิกที่นาฬิกาหรือไอคอนซิกมา คุณสามารถสลับระหว่างการแสดงข้อมูลเป็นค่าสัมบูรณ์และเปอร์เซ็นต์ได้ การแสดงเปอร์เซ็นต์จะแสดงระยะเวลาเป็นเปอร์เซ็นต์ของเวลาทั้งหมดที่ใช้ในการเรียกใช้ฟังก์ชันในบล็อกที่กำหนด
การตั้งค่าที่มีประโยชน์สองประการคือ Profiler -> ซ่อนฟังก์ชั่นที่รวดเร็ว และ Profiler -> ซ่อนฟังก์ชั่นไลบรารี สวิตช์ตัวแรกจะซ่อนฟังก์ชันที่เวลาในการดำเนินการของโปรแกรมโดยรวมไม่มีนัยสำคัญ
การตั้งค่าที่สอง Profiler -> ซ่อนฟังก์ชันไลบรารี จะซ่อนฟังก์ชันที่สร้างใน PHP จากการวิเคราะห์ทั่วไป เมื่อเปิดใช้งานการตั้งค่าทั้งสองนี้ คุณจะเห็นข้อมูลน้อยลง ทำให้คุณสามารถมุ่งเน้นไปที่ส่วนต่างๆ ของโค้ดที่จำเป็นต้องมีการปรับให้เหมาะสม
หน้าต่างหลักประกอบด้วยสองแท็บ: ทีละบรรทัดและโดยรวม ทั้งสองแท็บแสดงข้อมูลเดียวกัน แต่แท็บโดยรวมจะรวบรวมข้อมูลเพื่อการนำเสนอที่ดีขึ้น เวลาตัวเองจะแสดงเวลาทำงานของโค้ดในบล็อกปัจจุบัน ในขณะที่เวลาสะสม (Cum.) แสดงเวลาทำงานรวมของฟังก์ชันในบล็อกที่กำหนด

KCacheGrind: การวิเคราะห์บันทึกการทำโปรไฟล์ใน Unix

KCachegrind เวอร์ชัน Unix มีฟังก์ชันการทำงานมากกว่า WinCachegrind KCachegrind แสดงภาพข้อมูลและสร้างกราฟการโทร
หากต้องการเริ่มใช้งาน คุณต้องติดตั้ง KCachegrind รุ่นปัจจุบัน. มีเวอร์ชันใหม่กว่า (0.10.1) แต่เป็นส่วนหนึ่งของแพ็คเกจ Valgrind
หากเป็นไปได้ ให้ใช้ตัวจัดการแพ็คเกจเพื่อติดตั้งแพ็คเกจ KCachegrind KCachegrind ใช้ GraphViz เพื่อวาดกราฟการโทร ดังนั้นคุณต้องติดตั้งแพ็คเกจ GraphViz ด้วย หากตัวจัดการแพ็คเกจของคุณไม่ได้ติดตั้งแพ็คเกจที่ขึ้นอยู่กับโดยอัตโนมัติ
หากคุณไม่พบแพ็คเกจไบนารี KCachegrind คุณจะต้องคอมไพล์ KCachegrind ด้วยตัวเอง หลังจากดาวน์โหลดซอร์สแล้วให้รัน

./configure --prefix=/opt/kde3
ทำ
ทำการติดตั้ง

ดังที่คุณทราบ คุณจะต้องระบุเส้นทางไปยังการติดตั้งไลบรารี KDE ปัจจุบัน หากคุณไม่ทราบว่าไลบรารี KDE อยู่ที่ไหนในระบบของคุณ ให้ใช้

เพื่อแสดงเส้นทางไปยังไลบรารี KDE
เมื่อติดตั้งแล้ว คุณสามารถเรียกใช้ KCacheGrind จากบรรทัดคำสั่งได้

การแสดงข้อมูลแบบตารางใน KCachegrind นั้นคล้ายกับ WinCachegrind มาก คุณยังสามารถสลับระหว่างค่าสัมบูรณ์และค่าเปอร์เซ็นต์ได้ คุณสมบัติ KCachegrind บางอย่างไม่ได้ออกแบบมาสำหรับ PHP ภาพด้านล่างแสดงกราฟการโทรของโปรแกรม phpMyAdmin:


อย่างที่คุณเห็น เวลาเริ่มต้นส่วนใหญ่ใช้เวลาอยู่ใน common.inc.php ภาพหน้าจอต่อไปนี้แสดงภาพการเรียกใช้ฟังก์ชันภายใน common.inc.php:

บล็อกของโค้ดนี้รันสองครั้ง need_onces ซึ่งเป็นครึ่งหนึ่งของเวลาที่ใช้ในการรัน common.inc.php การดับเบิลคลิกที่สี่เหลี่ยมใดๆ จะนำคุณเข้าสู่การวิเคราะห์ข้อมูลเชิงลึกมากขึ้น

การเพิ่มประสิทธิภาพโค้ดตามข้อมูลโปรไฟล์

สร้างโปรไฟล์แอปพลิเคชันของคุณก่อนทำการเพิ่มประสิทธิภาพเสมอ คุณสามารถเริ่มการเพิ่มประสิทธิภาพได้ด้วยตัวเองในตำแหน่งที่คุณคิดว่าการเพิ่มประสิทธิภาพนี้จะทำให้เกิดผล แต่ก็ไม่เป็นความจริงเสมอไป การเพิ่มประสิทธิภาพส่วนใหญ่จะมีผลเฉพาะในส่วนที่ใช้เวลามากที่สุดในกระบวนการดำเนินการเท่านั้น
หากคุณรันโปรแกรมหลายชุดพร้อมกัน คุณอาจยังจำเป็นต้องปรับส่วนของโปรแกรมที่ใช้เวลาดำเนินการส่วนใหญ่ให้เหมาะสม ในกรณีนี้ การเพิ่มประสิทธิภาพจะไม่ทำให้การให้บริการคำขอแต่ละรายการเร็วขึ้น แต่จะช่วยให้เซิร์ฟเวอร์ของคุณจัดการกับโหลดสูงในขณะที่ใช้ทรัพยากรน้อยลงในการให้บริการคำขอเหล่านั้น
เมื่อดูระยะเวลาการทำงานของตัวสร้างโปรไฟล์ โปรดทราบว่าค่าสัมบูรณ์มีความสำคัญน้อยกว่าค่าสัมพัทธ์ เมื่อวัดบนระบบต่างๆ ค่าสัมบูรณ์อาจแตกต่างกันไป อย่างไรก็ตาม ก่อนที่คุณจะเริ่มเพิ่มประสิทธิภาพโค้ดของคุณ ให้พิจารณาสิ่งต่อไปนี้
กฎสำคัญในการออปติไมซ์คือการลดจำนวนการดำเนินการ I/O การดำเนินการ I/O บางอย่างใช้เวลานานมากเมื่อเทียบกับการคำนวณ การลดการดำเนินการดังกล่าวอาจเป็นวิธีที่มีประสิทธิภาพมากในการเร่งโปรแกรมของคุณ การลบการเรียก I/O หนึ่งครั้งสามารถให้การปรับปรุงที่มีประสิทธิภาพมากกว่าการใช้เวลาหลายชั่วโมงในการเพิ่มประสิทธิภาพโค้ด ดังนั้น คุณควรเน้นไปที่การดำเนินการ I/O ก่อนจึงจะเริ่มเขียนโค้ด
คุณยังสามารถเพิ่มจำนวนเซิร์ฟเวอร์ของคุณก่อนที่จะเพิ่มประสิทธิภาพได้ คุณสามารถซื้อได้มากซึ่งจะทำให้ประสิทธิภาพการผลิตเพิ่มขึ้นเล็กน้อย เวลาในการพัฒนามีราคาแพงกว่าราคาของเซิร์ฟเวอร์ใหม่ และหากคุณเพิ่มจำนวนฮาร์ดแวร์ คุณจะมั่นใจได้ว่าคุณจะได้รับการเพิ่มขึ้นทันทีโดยไม่มีผลกระทบต่อโค้ด PHP เมื่อนักพัฒนาใช้เวลาหนึ่งหรือสองวันในการปรับแต่งโค้ดให้เหมาะสม คุณจะไม่มีทางบอกได้ว่าประสิทธิภาพการทำงานจะเพิ่มขึ้นเท่าใด และท้ายที่สุดแล้ว คุณไม่สามารถแน่ใจได้อีกต่อไปว่าการปรับให้เหมาะสมจะไม่ทำให้เกิดข้อผิดพลาดใดๆ
การแปลงเพจบางเพจเป็นเพจสแตติกเป็นวิธีหนึ่งในการบรรลุประสิทธิภาพที่ดีขึ้น สมมติว่ามีไซต์ที่มีการเข้าชมจำนวนมาก โดยสคริปต์ PHP จะสร้างหน้าแรกสำหรับแต่ละคำขอ โดยเลือกข้อมูลจากฐานข้อมูลหรือไฟล์ XML หากข้อมูลบนเพจเปลี่ยนแปลงบ่อยเพียงพอ คุณสามารถสร้างสำเนาคงที่ของข้อมูลนั้นขึ้นมาใหม่ได้ หากไม่สามารถแปลงเป็นมุมมองคงที่สำหรับเพจ (ข้อมูลส่วนบุคคลบางอย่างแสดงบนเพจ) คุณสามารถแปลงบางบล็อกเป็นมุมมองคงที่ได้
การเพิ่มประสิทธิภาพอีกระดับหนึ่งไม่จำเป็นต้องเปลี่ยนโค้ด PHP อย่างที่เราทราบ PHP เป็นภาษาที่ตีความ ซึ่งหมายความว่าคำสั่งต่างๆ จะถูกแปลขณะรันไทม์เป็นโค้ดระดับกลาง การออกอากาศซ้ำทุกครั้งที่เรียกใช้สคริปต์ สิ่งนี้ทำให้ PHP ทำงานช้าลงเมื่อเทียบกับภาษาอย่าง C หรือ Java ซึ่งไม่จำเป็นต้องแยกวิเคราะห์โค้ดทุกครั้งที่คุณเรียกใช้ สำหรับ PHP คุณสามารถใช้แคชการแสดงระดับกลาง (ดูการแปลของฉัน....) เพื่อบันทึกและนำโค้ดระดับกลางมาใช้ซ้ำ ซึ่งจะทำให้การเริ่มต้นและดำเนินการเร็วขึ้น
ทั้งหมดนี้ไม่ได้หมายความว่าไม่มีเวลาหรือสถานที่ในการเพิ่มประสิทธิภาพโค้ด PHP การปรับปรุงโค้ดบางอย่างสามารถปรับปรุงประสิทธิภาพได้อย่างมาก อย่างไรก็ตาม โปรดจำไว้เสมอว่าการเปลี่ยนแปลงโค้ดมักมีความเสี่ยงที่จะทำให้เกิดข้อบกพร่องและปัญหาด้านความปลอดภัยเพิ่มเติมเสมอ นอกจากนี้ โปรดจำไว้ว่าการเพิ่มประสิทธิภาพโค้ดของคุณจะทำให้อ่านได้น้อยลง

บทสรุป

การสร้างและการแสดงบันทึกโปรไฟล์เป็นเงื่อนไขสำคัญประการหนึ่งในการเพิ่มประสิทธิภาพโค้ด PHP คุณจำเป็นต้องรู้ว่าจุดใดในโปรแกรมที่ใช้เวลามากที่สุด และนั่นคือจุดที่คุณควรเริ่มเพิ่มประสิทธิภาพ
ในบทความถัดไป เราจะดูการดีบักโดยใช้ xdebug xdebug สามารถให้ความสามารถในการดีบักแบบรีโมตแก่คุณได้ การใช้ไคลเอ็นต์ที่มีความสามารถนี้ เช่น Eclipse PDT คุณสามารถดีบักโค้ดของคุณโดยไม่ต้องเปลี่ยนแปลง ตั้งค่าเบรกพอยต์ ข้ามผ่านส่วนของโค้ด และดูว่าตัวแปรเปลี่ยนค่าอย่างไรและที่ไหน


บางครั้ง ViewProfile.swf และข้อผิดพลาดของระบบ SWF อื่น ๆ อาจเกี่ยวข้องกับปัญหาในรีจิสทรีของ Windows หลายโปรแกรมสามารถใช้ไฟล์ ViewProfile.swf ได้ แต่เมื่อโปรแกรมเหล่านั้นถูกถอนการติดตั้งหรือแก้ไข บางครั้งรายการรีจิสทรี SWF ที่ "ถูกละเลย" (ไม่ถูกต้อง) จะถูกทิ้งไว้ข้างหลัง

โดยพื้นฐานแล้ว หมายความว่าแม้ว่าเส้นทางที่แท้จริงของไฟล์อาจเปลี่ยนแปลงไป แต่ตำแหน่งเดิมที่ไม่ถูกต้องของไฟล์ยังคงถูกบันทึกไว้ใน Windows Registry เมื่อ Windows พยายามค้นหาการอ้างอิงไฟล์ที่ไม่ถูกต้องเหล่านี้ (ตำแหน่งไฟล์บนพีซีของคุณ) ข้อผิดพลาด ViewProfile.swf อาจเกิดขึ้นได้ นอกจากนี้ การติดมัลแวร์อาจทำให้รายการรีจิสทรีที่เกี่ยวข้องกับ Bioshock 2 เสียหาย ดังนั้น รายการรีจิสทรี SWF ที่เสียหายเหล่านี้จำเป็นต้องได้รับการแก้ไขเพื่อแก้ไขปัญหาที่ต้นตอ

ไม่แนะนำให้ทำการแก้ไขรีจิสทรีของ Windows ด้วยตนเองเพื่อลบคีย์ ViewProfile.swf ที่ไม่ถูกต้อง เว้นแต่คุณจะเป็นผู้เชี่ยวชาญด้านบริการพีซี ข้อผิดพลาดที่เกิดขึ้นเมื่อแก้ไขรีจิสทรีอาจทำให้พีซีของคุณไม่สามารถใช้งานได้ และทำให้ระบบปฏิบัติการของคุณเสียหายอย่างไม่สามารถแก้ไขได้ ในความเป็นจริงแม้แต่ลูกน้ำเพียงตัวเดียวที่วางผิดตำแหน่งก็สามารถป้องกันไม่ให้คอมพิวเตอร์ของคุณบูทได้!

เนื่องจากความเสี่ยงนี้ เราขอแนะนำอย่างยิ่งให้ใช้ตัวล้างรีจิสทรีที่เชื่อถือได้ เช่น WinThruster (พัฒนาโดย Microsoft Gold Certified Partner) เพื่อสแกนและแก้ไขปัญหารีจิสทรีที่เกี่ยวข้องกับ ViewProfile.swf เมื่อใช้ตัวล้างรีจิสทรี คุณสามารถทำให้กระบวนการค้นหารายการรีจิสทรีที่เสียหาย การอ้างอิงไฟล์หายไป (เช่นที่ทำให้เกิดข้อผิดพลาด ViewProfile.swf) และลิงก์ที่เสียหายภายในรีจิสทรีได้โดยอัตโนมัติ ก่อนการสแกนแต่ละครั้ง สำเนาสำรองจะถูกสร้างขึ้นโดยอัตโนมัติ ช่วยให้คุณสามารถยกเลิกการเปลี่ยนแปลงใดๆ ได้ด้วยคลิกเดียว และปกป้องคุณจากความเสียหายที่อาจเกิดขึ้นกับคอมพิวเตอร์ของคุณ ส่วนที่ดีที่สุดคือการขจัดข้อผิดพลาดของรีจิสทรีสามารถปรับปรุงความเร็วและประสิทธิภาพของระบบได้อย่างมาก


คำเตือน:เราไม่แนะนำให้แก้ไขรีจิสทรีของ Windows ด้วยตนเอง เว้นแต่คุณจะเป็นผู้ใช้พีซีที่มีประสบการณ์ การใช้ Registry Editor ไม่ถูกต้องอาจทำให้เกิดปัญหาร้ายแรงซึ่งอาจทำให้คุณต้องติดตั้ง Windows ใหม่ เราไม่รับประกันว่าปัญหาที่เกิดจากการใช้ Registry Editor ไม่ถูกต้องจะสามารถแก้ไขได้ คุณใช้ Registry Editor โดยยอมรับความเสี่ยงเอง

ก่อนที่คุณจะซ่อมแซมรีจิสทรีของ Windows ด้วยตนเอง คุณต้องสร้างการสำรองข้อมูลโดยส่งออกส่วนหนึ่งของรีจิสทรีที่เกี่ยวข้องกับ ViewProfile.swf (เช่น Bioshock 2):

  1. คลิกที่ปุ่ม เริ่ม.
  2. เข้า " สั่งการ"วี แถบค้นหา... อย่าเพิ่งคลิก เข้า!
  3. ขณะที่กดปุ่มค้างไว้ CTRL-Shiftบนแป้นพิมพ์ของคุณ ให้กด เข้า.
  4. กล่องโต้ตอบสำหรับการเข้าถึงจะปรากฏขึ้น
  5. คลิก ใช่.
  6. กล่องดำเปิดขึ้นพร้อมกับเคอร์เซอร์กะพริบ
  7. เข้า " ลงทะเบียนใหม่" และกด เข้า.
  8. ใน Registry Editor ให้เลือกคีย์ที่เกี่ยวข้องกับ ViewProfile.swf (เช่น Bioshock 2) ที่คุณต้องการสำรองข้อมูล
  9. ในเมนู ไฟล์เลือก ส่งออก.
  10. ในรายการ บันทึกที่เลือกโฟลเดอร์ที่คุณต้องการบันทึกคีย์สำรอง Bioshock 2
  11. ในสนาม ชื่อไฟล์ป้อนชื่อไฟล์สำรองข้อมูล เช่น "Bioshock 2 backup"
  12. ให้แน่ใจว่าสนาม ช่วงการส่งออกค่าที่เลือกไว้ สาขาที่เลือก.
  13. คลิก บันทึก.
  14. ไฟล์จะถูกบันทึก มีนามสกุล .reg.
  15. ขณะนี้คุณมีข้อมูลสำรองของรายการรีจิสทรีที่เกี่ยวข้องกับ ViewProfile.swf แล้ว

ขั้นตอนต่อไปนี้สำหรับการแก้ไขรีจิสทรีด้วยตนเองจะไม่ได้อธิบายไว้ในบทความนี้ เนื่องจากอาจสร้างความเสียหายให้กับระบบของคุณได้ หากคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไขรีจิสทรีด้วยตนเอง โปรดดูลิงก์ด้านล่าง

FirePHP เป็นส่วนขยายสำหรับ firebug ซึ่งเมื่อใช้ร่วมกับคลาส php ขนาดเล็ก จะทำให้คุณสามารถถ่ายทอดข้อมูลจาก php เช่น var_dump และข้อมูลการดีบักอื่นๆ ไปยังคอนโซล firebug ได้ ข้อมูลการดีบักทั้งหมดจะถูกถ่ายทอดผ่านส่วนหัวและไม่ทิ้งขยะบนหน้าและไม่ทำลายตรรกะของแอปพลิเคชัน แต่อย่างใด

แนวคิดหลัก

อัลกอริธึมการทำโปรไฟล์ทั่วไปมีดังนี้:
  1. ในตอนต้นของหน้า เราเปิดใช้งานการสร้างโปรไฟล์โดยใช้ xhprof_enable()
  2. ในตอนท้ายของหน้า ให้ปิดโปรไฟล์โดยใช้ xhprof_disable() และบันทึกข้อมูลที่รวบรวมโดยใช้ save_run()
  3. ต่อไป เมื่อใช้คลาส firephp php เราจะส่งลิงก์ไปยังข้อมูลโปรไฟล์ไปยังส่วนของไคลเอ็นต์
  4. ในคอนโซล firebug เราเปิดข้อมูลที่เราต้องการ
  5. เรายินดี :)
ฉันอยากจะบอกว่าแน่นอนว่าการเพิ่มฟังก์ชันเหล่านี้ลงในสคริปต์ PHP ของคุณด้วยตนเองนั้นยอดเยี่ยมมาก แต่ฉันต้องการให้ข้อมูลนี้อยู่ในมือเสมอในระหว่างการพัฒนา และไม่จบลงที่เซิร์ฟเวอร์ที่ใช้งานจริง เราแก้ไขปัญหานี้ดังนี้:

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

// ค่าคงที่ต่อไปนี้ถูกเขียนลงในไฟล์กำหนดค่าแอปพลิเคชัน

/** โหมดการทำงานของสภาพแวดล้อม * */
กำหนด("APPLICATION_ENV" , "dev" ); // dev - การดีบัก | โปร - การผลิต
/** เส้นทางสู่ผู้สร้างโปรไฟล์ */
กำหนด("XHPROF_ROOT" , __DIR__ . "/ExtProcs/debug/xhprof-0.9.2");

/***************************************************************************************
* ต่อไป เราจะเปิดตัวการสร้างโปรไฟล์ในไฟล์ที่โหลดตอนเริ่มต้นของแต่ละสคริปต์
* DEV_START และ DEV_END คือเมตาแท็กของเรา ทุกอย่างที่อยู่ระหว่างทั้งสองจะถูกตัดออกระหว่างการประกอบ
***************************************************************************************/

//--DEV_START
//-- ในโหมดแก้ไขข้อบกพร่อง เราเชื่อมต่อไลบรารีการแก้ไขข้อบกพร่อง

// โหลด firephp
need_once(__DIR__ . "/includes/ExtProcs/debug/firephp/FirePHP.class.php");
//-- โหลดโปรไฟล์
"/xhprof_lib/utils/xhprof_lib.php");
need_once(XHPROF_ROOT. "/xhprof_lib/utils/xhprof_runs.php");
// เริ่มต้นการสร้างโปรไฟล์ด้วยแฟล็กที่จำเป็น คำอธิบายโดยละเอียดของธง
// สามารถพบได้ที่ php.net/manual/ru/xhprof.constants.php
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
//--DEV_END

// ฟังก์ชันนี้ถูกเรียกที่ส่วนท้ายของแต่ละสคริปต์
// การเรียกของมันถูกรวมไว้ใน DEV_START และ DEV_END ด้วย

/**
* สร้างลิงก์ไปยังผลลัพธ์การทำโปรไฟล์และแสดงในคอนโซล
*/
ฟังก์ชั่น dev_boot_Down() (
ถ้า (APPLICATION_ENV === "dev" ) (
// เริ่มต้นอินสแตนซ์ firephp
$firephp = FirePHP::getInstance(จริง);
// ปิดการทำโปรไฟล์และบันทึกข้อมูล
$xhprof_data = xhprof_disable();
$xhprof_runs = XHProfRuns_Default(); ใหม่
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing" );
// สร้างลิงก์ไปยังข้อมูลโปรไฟล์และเขียนลงในคอนโซล
$link = "http://" . $_SERVER["HTTP_HOST" ] . "/includes/ExtProcs/debug/xhprof-0.9.2/xhprof_html/index.php?run=($run_id)&source=xhprof_testing\n";
$firephp->info($link, "ข้อมูลโปรไฟล์" );
}
}


* ซอร์สโค้ดนี้ถูกเน้นด้วย Source Code Highlighter

ฉันจะไม่ลงรายละเอียดการติดตั้งส่วนขยายเหล่านี้ เพราะที่นี่ทุกอย่างเรียบง่าย ฉันจะพูดเกี่ยวกับการตั้งค่าบางส่วนเท่านั้น xhproof มีตัวแปรการกำหนดค่าเพียงตัวเดียว - xhprof.output_dir ซึ่งชี้ไปยังโฟลเดอร์ที่จะบันทึกข้อมูลโปรไฟล์ ดังนั้นตรวจสอบให้แน่ใจว่าผู้ใช้ที่รันสคริปต์ PHP มีสิทธิ์ในการเขียนไปยังไดเร็กทอรีที่ระบุ ดังนั้นเขียนสิ่งนี้ใน php.ini ของคุณ:


extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"

เป็นความคิดที่ดีที่จะติดตั้งบางอย่างเช่น dot หรือ Graphviz เพื่อวาดกราฟการโทร ฉันมี Graphviz บน MacOS X

หลังจากทำตามขั้นตอนที่อธิบายไว้ข้างต้นเสร็จสิ้นแล้ว เราก็สามารถเปิดและดูโปรไฟล์ของสคริปต์ใดๆ ของเราได้โดยตรงในเบราว์เซอร์ได้ตลอดเวลา

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

หากต้องการเปิดใช้งานการทำโปรไฟล์ ให้ติดตั้งส่วนขยายและปรับการตั้งค่า php.ini Linux บางตัวมาพร้อมกับแพ็คเกจมาตรฐาน (เช่น แพ็คเกจ php-xdebug ของ Ubuntu) ในตัวอย่างของเรา เราจะเรียกใช้โปรไฟล์โดยยึดตามพารามิเตอร์คำขอ ซึ่งช่วยให้เราสามารถคงการตั้งค่าไว้และเปิดโปรไฟล์ได้เมื่อจำเป็นเท่านั้น

# การตั้งค่า php.ini # ตั้งค่าเป็น 1 เพื่อเปิดสำหรับทุกคำขอ xdebug.profiler_enable = 0 # ลองใช้พารามิเตอร์ GET/POST เพื่อเปิดprofiler xdebug.profiler_enable_trigger = 1 # ค่า GET/POST ที่เราจะส่งต่อนั้นว่างเปล่า สำหรับค่าใดๆ xdebug.profiler_enable_trigger_value = "" # เอาท์พุตไฟล์ cachegrind ไปที่ /tmp เพื่อให้ระบบของเราทำความสะอาดมันในภายหลัง xdebug.profiler_output_dir = "/tmp" xdebug.profiler_output_name = "cachegrind.out.%p"

จากนั้นใช้เว็บไคลเอ็นต์เพื่อส่งคำขอไปยัง URL ของแอปพลิเคชันของคุณที่คุณต้องการสร้างโปรไฟล์ เช่น

Http://example.com/article/1?XDEBUG_PROFILE=1

ขณะที่เพจประมวลผล หน้าจะเขียนลงในไฟล์ที่มีชื่อคล้ายกัน

/tmp/cachegrind.out.12345

โดยค่าเริ่มต้น หมายเลขในชื่อไฟล์จะเป็นรหัสกระบวนการที่เขียนไว้ สามารถกำหนดคอนฟิกได้ด้วยการตั้งค่า xdebug.profiler_output_name

โปรดทราบว่ามันจะเขียนหนึ่งไฟล์สำหรับแต่ละคำขอ / กระบวนการ PHP ที่ถูกดำเนินการ ตัวอย่างเช่น หากคุณต้องการวิเคราะห์การโพสต์แบบฟอร์ม จะมีการเขียนโปรไฟล์หนึ่งสำหรับคำขอ GET เพื่อแสดงแบบฟอร์ม HTML พารามิเตอร์ XDEBUG_PROFILE จะต้องถูกส่งผ่านไปยังคำขอ POST ที่ตามมาเพื่อวิเคราะห์คำขอที่สองซึ่งประมวลผลแบบฟอร์ม ดังนั้นเมื่อทำการโปรไฟล์ บางครั้งการรัน curl เพื่อ POST แบบฟอร์มโดยตรงจะง่ายกว่า

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

เมื่อเขียนแล้ว แอปพลิเคชันเช่นหรือ Webgrind จะสามารถอ่านแคชโปรไฟล์ได้ PHPStorm ซึ่งเป็น PHP IDE ยอดนิยมสามารถแสดงข้อมูลโปรไฟล์นี้ได้

ตัวอย่างเช่น KCachegrind จะแสดงข้อมูล ได้แก่:

  • ฟังก์ชั่นที่ดำเนินการ
  • เวลาการโทรทั้งในตัวมันเองและรวมถึงการเรียกใช้ฟังก์ชันที่ตามมา
  • จำนวนครั้งที่แต่ละฟังก์ชันถูกเรียกใช้
  • เรียกกราฟ
  • ลิงก์ไปยังซอร์สโค้ด

สิ่งที่ต้องมองหา

เห็นได้ชัดว่าการปรับประสิทธิภาพนั้นมีความเฉพาะเจาะจงมากกับกรณีการใช้งานของแต่ละแอปพลิเคชัน โดยทั่วไปแล้ว ควรมองหา:

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

บันทึก: Xdebug และโดยเฉพาะอย่างยิ่งคุณสมบัติการทำโปรไฟล์นั้นใช้ทรัพยากรมากและทำให้การดำเนินการ PHP ช้าลง ขอแนะนำไม่ให้รันสิ่งเหล่านี้ในสภาพแวดล้อมเซิร์ฟเวอร์ที่ใช้งานจริง

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

xhprof

XHProf - เครื่องมือสร้างโปรไฟล์ PHP พัฒนาโดย Facebook

การติดตั้ง:

ความถนัดในการติดตั้ง php-pear pecl ติดตั้ง xhprof-0.9.4 echo "extension=xhprof.so"> /etc/php5/mods-available/xhprof.ini ln -s /etc/php5/mods-available/xhprof.ini /etc /php5/conf.d/xhprof.ini apachectl รีสตาร์ท

ไฟล์ที่จำเป็นสำหรับการทำงานอยู่ในไดเร็กทอรี /usr/share/php.php- อย่างไรก็ตาม ไม่ใช่ทุกอย่าง แต่มีเฉพาะโค้ด PHP เท่านั้น สำหรับการแสดงรายงานตามปกติ จำเป็นต้องมี jquery และ css สามารถรับได้จากที่เก็บ GitHub:

โคลน Git https://github.com/facebook/xhprof.git

หลังจากนั้น ให้เพิ่มบรรทัดในโค้ดสคริปต์ PHP ตรงตำแหน่งที่ควรเริ่มการรวบรวมข้อมูล:

Xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

พารามิเตอร์สำหรับการรวบรวมข้อมูลจะแสดงอยู่ในวงเล็บ ในกรณีนี้ ข้อมูลจะถูกเก็บรวบรวมเกี่ยวกับโหลดของโปรเซสเซอร์และการใช้งาน RAM เป็นไปได้อีกทางเลือกหนึ่ง XHPROF_FLAGS_NO_BUILTINSเมื่อใช้แล้ว ระบบจะไม่รวบรวมข้อมูลเกี่ยวกับฟังก์ชันในตัว

$xhprof_data = xhprof_disable(); include_once "xhprof_lib/utils/xhprof_lib.php"; include_once "xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = XHProfRuns_Default(); ใหม่ $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_test"); echo "รายงาน: http://domain.tld/xhprof_html/index.php?run=$run_id&source=xhprof_test"; เสียงสะท้อน "\n";

ในบรรทัด $run_idเครื่องหมายคำพูดระบุชื่อของโปรไฟล์ซึ่งสามารถตั้งค่าได้ตามใจชอบ

ผลลัพธ์ที่ประมวลผลมีลักษณะดังนี้:

หากคุณระบุพารามิเตอร์ XHPROF_FLAGS_NO_BUILTINSเห็นได้ชัดว่าจำนวนการเรียกใช้ฟังก์ชันลดลงอย่างมาก:

ตารางให้ข้อมูลต่อไปนี้:

โทร- จำนวนการเรียกใช้ฟังก์ชัน
วอลล์ไทม์- เวลาทำงานทั้งหมดของฟังก์ชัน รวมถึงเวลาที่ใช้ในการรอการตอบกลับจากแหล่งข้อมูลภายนอก
ซีพียู- ใช้เวลาในการประมวลผลฟังก์ชันนานเท่าใด
MemUse- ใช้ RAM เท่าไหร่
พีคเมมยูส- การใช้หน่วยความจำสูงสุด

ตัวแก้ไขคือ:

รวม- รวม - โดยคำนึงถึงการเรียกใช้ฟังก์ชันอื่น ๆ จากฟังก์ชันนี้
ไม่รวม- พิเศษ - ไม่รวมการเรียกใช้ฟังก์ชัน

นอกจากนี้ เหนือตารางยังมีข้อมูลเกี่ยวกับเวลาการประมวลผลทั้งหมด หน่วยความจำที่ใช้ และจำนวนการเรียกใช้ฟังก์ชัน

อีกด้วย XHProfช่วยให้คุณสร้างรายงานที่แตกต่างกันระหว่างการวิ่งสองครั้ง ซึ่งระบุด้วยสีแดงและสีเขียว ด้วยรายงานเหล่านี้ คุณจะเห็นภาพการปรับปรุงที่ชัดเจนหลังจากการเปลี่ยนแปลงโค้ดแต่ละครั้ง

หากต้องการรับรายงานดังกล่าว คุณต้องใช้ลิงก์ดังนี้:

http://domain.tld/xhprof_html/index.php?run1=run_id1&run2=run_id2&source=xhprof_test

ที่ไหน run_id1และ run_id2- ตัวระบุการเปิดตัว

หากคุณติดตั้ง กราฟวิซ:

ความถนัดติดตั้ง Graphviz

นอกจากนี้ยังมีเว็บอินเตอร์เฟสของบุคคลที่สามสำหรับ phpprofiler xhprof ที่ใช้ฐานข้อมูล:

xDebug

xDebug- ดีบักเกอร์โค้ด PHP พร้อมความสามารถในการสร้างโปรไฟล์ เขียนโดย Derick Rethans

การติดตั้ง:

ยำติดตั้ง php5-xdebug

จากนั้นเราแก้ไขการกำหนดค่า:

นาโน /etc/php5/mods-available/xdebug.ini

เพิ่มบรรทัดเข้าไป:

Xdebug.profiler_enable = 1 xdebug.profiler_aggregate = เปิด xdebug.profiler_output_dir = /tmp

ที่นี่เราเปิดใช้งานตัวสร้างโปรไฟล์ PHP และระบุไดเร็กทอรีที่จะจัดเก็บโปรไฟล์ โปรไฟล์ถูกสร้างขึ้นด้วยชื่อเช่น cachegrind.out.*

มีเว็บไคลเอ็นต์ webgrind: https://github.com/jokkedk/webgrind มันไม่ได้ทำงานเร็วมาก แต่ช่วยให้คุณดูโปรไฟล์ขนาดเล็กได้อย่างรวดเร็ว อันที่จริง นี่คือโค้ด PHP ที่ต้องโคลนจาก github:

Git โคลน https://github.com/jokkedk/webgrind.git

ไดเร็กทอรีจะถูกสร้างขึ้น บดเว็บซึ่งคุณต้องคัดลอกไปยังไดเร็กทอรีของเว็บไซต์ใด ๆ และเข้าถึงได้จากเบราว์เซอร์ ถัดไป เพื่อให้การลงจุดในไฟล์กำหนดค่าทำงานใน Debian config.phpคุณต้องแก้ไขเส้นทางไปยังไฟล์ปฏิบัติการ กราฟวิซ- มันควรมีลักษณะเช่นนี้:

$dotExecutable แบบคงที่ = "/usr/bin/dot";

นอกจากนี้ คุณยังสามารถปรับเขตเวลาได้:

$defaultTimezone แบบคงที่ = "ยุโรป/มอสโก";

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

กราฟอาจมีลักษณะดังนี้:

โปรดทราบว่า บดเว็บไม่ควรใช้บนเซิร์ฟเวอร์ที่ใช้งานจริง เนื่องจากไม่มีการอนุญาต แต่มีการเข้าถึงโค้ดไฟล์ php หากจำเป็น ให้ใช้การอนุญาต Apache ขั้นพื้นฐานเป็นอย่างน้อย

นอกจากนี้ยังมีโปรแกรมสำหรับวิเคราะห์โปรไฟล์สำหรับ Linux:

เกี่ยวกับการทำโปรไฟล์

ข้อมูลโปรไฟล์สามารถช่วยคุณปรับปรุงแอปพลิเคชันของคุณ กล่าวคือ บรรลุเป้าหมายบางอย่าง เช่น ลดการใช้หน่วยความจำ ลดเวลาการสร้างเพจ และอื่นๆ

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

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

ตัวสร้างโปรไฟล์ยังสามารถช่วยให้คุณเข้าใจว่าจะใช้การแคชโค้ด PHP ได้ที่ไหน เช่น การใช้ เอพีคิวหรือ เมคแคช.

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

หากคุณพบสถานการณ์ต่อไปนี้ คุณควรพิจารณาแคช:

  • ฟังก์ชันที่ไม่เปลี่ยนรูปถูกเรียกภายในลูป
  • เนื้อหาบางส่วนถูกสร้างขึ้นสองครั้ง
  • เนื้อหาที่ไม่เปลี่ยนแปลงถูกสร้างขึ้นทุกครั้ง
  • เนื้อหาถูกสร้างขึ้นแม้ว่าจะไม่ได้ใช้ก็ตาม

คุณไม่ควรแคชทุกอย่าง เนื่องจากหน่วยความจำก็เป็นทรัพยากรที่มีค่าเช่นกัน แคชข้อมูลที่คุณเข้าถึงอย่างต่อเนื่อง นอกจากนี้ การแคชไม่สมเหตุสมผลเลยหากการแคชทำให้สิ้นเปลืองทรัพยากรมากกว่าที่จะประหยัดได้

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