168 lines
5.0 KiB
ReStructuredText
168 lines
5.0 KiB
ReStructuredText
##################
|
|
Benchmarking Class
|
|
##################
|
|
|
|
CodeIgniter has a Benchmarking class that is always active, enabling the
|
|
time difference between any two marked points to be calculated.
|
|
|
|
.. note:: This class is initialized automatically by the system so there
|
|
is no need to do it manually.
|
|
|
|
In addition, the benchmark is always started the moment the framework is
|
|
invoked, and ended by the output class right before sending the final
|
|
view to the browser, enabling a very accurate timing of the entire
|
|
system execution to be shown.
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
.. raw:: html
|
|
|
|
<div class="custom-index container"></div>
|
|
|
|
*************************
|
|
Using the Benchmark Class
|
|
*************************
|
|
|
|
The Benchmark class can be used within your
|
|
:doc:`controllers </general/controllers>`,
|
|
:doc:`views </general/views>`, or your :doc:`models </general/models>`.
|
|
The process for usage is this:
|
|
|
|
#. Mark a start point
|
|
#. Mark an end point
|
|
#. Run the "elapsed time" function to view the results
|
|
|
|
Here's an example using real code::
|
|
|
|
$this->benchmark->mark('code_start');
|
|
|
|
// Some code happens here
|
|
|
|
$this->benchmark->mark('code_end');
|
|
|
|
echo $this->benchmark->elapsed_time('code_start', 'code_end');
|
|
|
|
.. note:: The words "code_start" and "code_end" are arbitrary. They
|
|
are simply words used to set two markers. You can use any words you
|
|
want, and you can set multiple sets of markers. Consider this example::
|
|
|
|
$this->benchmark->mark('dog');
|
|
|
|
// Some code happens here
|
|
|
|
$this->benchmark->mark('cat');
|
|
|
|
// More code happens here
|
|
|
|
$this->benchmark->mark('bird');
|
|
|
|
echo $this->benchmark->elapsed_time('dog', 'cat');
|
|
echo $this->benchmark->elapsed_time('cat', 'bird');
|
|
echo $this->benchmark->elapsed_time('dog', 'bird');
|
|
|
|
|
|
Profiling Your Benchmark Points
|
|
===============================
|
|
|
|
If you want your benchmark data to be available to the
|
|
:doc:`Profiler </general/profiling>` all of your marked points must
|
|
be set up in pairs, and each mark point name must end with _start and
|
|
_end. Each pair of points must otherwise be named identically. Example::
|
|
|
|
$this->benchmark->mark('my_mark_start');
|
|
|
|
// Some code happens here...
|
|
|
|
$this->benchmark->mark('my_mark_end');
|
|
|
|
$this->benchmark->mark('another_mark_start');
|
|
|
|
// Some more code happens here...
|
|
|
|
$this->benchmark->mark('another_mark_end');
|
|
|
|
Please read the :doc:`Profiler page </general/profiling>` for more
|
|
information.
|
|
|
|
Displaying Total Execution Time
|
|
===============================
|
|
|
|
If you would like to display the total elapsed time from the moment
|
|
CodeIgniter starts to the moment the final output is sent to the
|
|
browser, simply place this in one of your view templates::
|
|
|
|
<?php echo $this->benchmark->elapsed_time();?>
|
|
|
|
You'll notice that it's the same function used in the examples above to
|
|
calculate the time between two point, except you are **not** using any
|
|
parameters. When the parameters are absent, CodeIgniter does not stop
|
|
the benchmark until right before the final output is sent to the
|
|
browser. It doesn't matter where you use the function call, the timer
|
|
will continue to run until the very end.
|
|
|
|
An alternate way to show your elapsed time in your view files is to use
|
|
this pseudo-variable, if you prefer not to use the pure PHP::
|
|
|
|
{elapsed_time}
|
|
|
|
.. note:: If you want to benchmark anything within your controller
|
|
functions you must set your own start/end points.
|
|
|
|
Displaying Memory Consumption
|
|
=============================
|
|
|
|
If your PHP installation is configured with --enable-memory-limit, you
|
|
can display the amount of memory consumed by the entire system using the
|
|
following code in one of your view file::
|
|
|
|
<?php echo $this->benchmark->memory_usage();?>
|
|
|
|
.. note:: This function can only be used in your view files. The consumption
|
|
will reflect the total memory used by the entire app.
|
|
|
|
An alternate way to show your memory usage in your view files is to use
|
|
this pseudo-variable, if you prefer not to use the pure PHP::
|
|
|
|
{memory_usage}
|
|
|
|
|
|
***************
|
|
Class Reference
|
|
***************
|
|
|
|
.. php:class:: CI_Benchmark
|
|
|
|
.. php:method:: mark($name)
|
|
|
|
:param string $name: the name you wish to assign to your marker
|
|
:rtype: void
|
|
|
|
Sets a benchmark marker.
|
|
|
|
.. php:method:: elapsed_time([$point1 = ''[, $point2 = ''[, $decimals = 4]]])
|
|
|
|
:param string $point1: a particular marked point
|
|
:param string $point2: a particular marked point
|
|
:param int $decimals: number of decimal places for precision
|
|
:returns: Elapsed time
|
|
:rtype: string
|
|
|
|
Calculates and returns the time difference between two marked points.
|
|
|
|
If the first parameter is empty this function instead returns the
|
|
``{elapsed_time}`` pseudo-variable. This permits the full system
|
|
execution time to be shown in a template. The output class will
|
|
swap the real value for this variable.
|
|
|
|
|
|
.. php:method:: memory_usage()
|
|
|
|
:returns: Memory usage info
|
|
:rtype: string
|
|
|
|
Simply returns the ``{memory_usage}`` marker.
|
|
|
|
This permits it to be put it anywhere in a template without the memory
|
|
being calculated until the end. The :doc:`Output Class <output>` will
|
|
swap the real value for this variable. |