Actions
PHP Profiling¶
xdebug¶
- Xdebug 3 (youtube)
- PHP and Docker - Xdebug (youtube)
via php¶
No extensions are needed, just use these two functions for simple profiling. (Code will go to class Helper/Profiling - currently only in Branch php-imap)
// Call this at each point of interest, passing a descriptive string function prof_flag($str) { global $prof_timing, $prof_names; $prof_timing[] = microtime(true); $prof_names[] = $str; } // Call this when you're done and want to see the results function prof_print() { global $prof_timing, $prof_names; $size = count($prof_timing); for($i=0;$i<$size - 1; $i++) { echo "<b>{$prof_names[$i]}</b><br>"; echo sprintf(" %f<br>", $prof_timing[$i+1]-$prof_timing[$i]); } echo "<b>{$prof_names[$size-1]}</b><br>"; }
Here is an example, calling prof_flag() with a description at each checkpoint, and prof_print() at the end:
prof_flag("Start"); include '../lib/database.php'; include '../lib/helper_func.php'; prof_flag("Connect to DB"); connect_to_db(); prof_flag("Perform query"); // Get all the data $select_query = "SELECT * FROM data_table"; $result = mysql_query($select_query); prof_flag("Retrieve data"); $rows = array(); $found_data=false; while($r = mysql_fetch_assoc($result)) { $found_data=true; $rows[] = $r; } prof_flag("Close DB"); mysql_close(); //close database connection prof_flag("Done"); prof_print();
Output looks like this:
Start 0.004303 Connect to DB 0.003518 Perform query 0.000308 Retrieve data 0.000009 Close DB 0.000049 Done
Updated by Carsten Rose 6 months ago · 6 revisions