Profiling is the process of collecting information about which functions are called during program execution, and how long these calls take. It can help identify bottlenecks and inefficiencies in the code. Several options are available for profiling VuFind.
XHProf / Tideways
VuFind comes with built-in support for the XHProf family of profilers. Tideways is a later evolution of XHProf, and it is supported in VuFind 4.0 and later (and recommended for those versions, since the original does not support recent PHP releases).
To use one of these profilers:
- Install the necessary PHP extension (“pecl install xhprof-beta” for XHProf, or follow the compilation instructions on the Tideways site for that product).
- Install the XHProf code from GitHub and make sure that xhprof_html is symlinked to somewhere in your web root, while xhprof_lib is symlinked somewhere on PHP's search path. (Note that Tideways uses the XHProf user interface, so this step is the same for both products). Starting with VuFind 4.0, the putting xhprof_lib on the search path is no longer necessary.
- Uncomment the VUFIND_PROFILER_XHPROF setting in your $VUFIND_LOCAL_DIR/httpd-vufind.conf file, changing the value to the URL where you have set up the xhprof_html directory.
- Restart Apache.
If these steps have been completed successfully, you will see a link to profiler results at the bottom of every page in VuFind. Note that the output of this profile link will cause JSON or XML-based AJAX requests to fail since it will make those responses invalid. This should not matter for the purposes of testing individual pages.
A slightly more advanced option is to install the XDebug extension, which allows you to trigger profile data collection in a variety of configurable ways and then analyze the output data using a graphical tool in the CacheGrind family. See the XDebug documentation for more details. No direct changes to VuFind should be necessary to use XDebug profiling; all configuration can take place in your PHP settings.