1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>CodeIgniter User Guide : Benchmarking Class</title>
<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />
</head>
<body>
<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle.jpg" width="153" height="44" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>CodeIgniter User Guide Version 1.6.0.1</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->
<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.com/">CodeIgniter Home</a> ›
<a href="../index.html">User Guide Home</a> ›
Benchmarking Class
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" /> <input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->
<br clear="all" />
<!-- START CONTENT -->
<div id="content">
<h1>Benchmarking Class</h1>
<p>CodeIgniter has a Benchmarking class that is always active, enabling the time difference between any
two marked points to be calculated.</p>
<p class="important"><strong>Note:</strong> This class is initialized automatically by the system so there is no need to do it manually.</p>
<p>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.</p>
<h3>Table of Contents</h3>
<ul>
<li><a href="#using">Using the Benchmark Class</a></li>
<li><a href="#profiler">Profiling Your Benchmark Points</a></li>
<li><a href="#execution">Displaying Total Execution Time</a></li>
<li><a href="#memory">Displaying Memory Consumption</a></li>
</ul>
<a name="using"></a>
<h2>Using the Benchmark Class</h2>
<p>The Benchmark class can be used within your <a href="../general/controllers.html">controllers</a>, <a href="../general/views.html">views</a>, or your <a href="../general/models.html">Models</a>. The process for usage is this:</p>
<ol>
<li>Mark a start point</li>
<li>Mark an end point</li>
<li>Run the "elapsed time" function to view the results</li>
</ol>
<p>Here's an example using real code:</p>
<code>$this->benchmark->mark('code_start');<br />
<br />
// Some code happens here<br />
<br />
$this->benchmark->mark('code_end');<br />
<br />
echo $this->benchmark->elapsed_time('code_start', 'code_end');</code>
<p><strong>Note:</strong> 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:</p>
<code>$this->benchmark->mark('dog');<br />
<br />
// Some code happens here<br />
<br />
$this->benchmark->mark('cat');<br />
<br />
// More code happens here<br />
<br />
$this->benchmark->mark('bird');<br />
<br />
echo $this->benchmark->elapsed_time('dog', 'cat');<br />
echo $this->benchmark->elapsed_time('cat', 'bird');<br />
echo $this->benchmark->elapsed_time('dog', 'bird');</code>
<a name="profiler"></a>
<h2>Profiling Your Benchmark Points</h2>
<p>If you want your benchmark data to be available to the
<a href="../general/profiling.html">Profiler</a> all of your marked points must be set up in pairs, and
each mark point name must end with <kbd>_start</kbd> and <kbd>_end</kbd>.
Each pair of points must otherwise be named identically. Example:</p>
<code>
$this->benchmark->mark('my_mark<kbd>_start</kbd>');<br />
<br />
// Some code happens here...<br />
<br />
$this->benchmark->mark('my_mark<kbd>_end</kbd>');
<br /><br />
$this->benchmark->mark('another_mark<kbd>_start</kbd>');<br />
<br />
// Some more code happens here...<br />
<br />
$this->benchmark->mark('another_mark<kbd>_end</kbd>');
</code>
<p>Please read the <a href="../general/profiling.html">Profiler page</a> for more information.</p>
<a name="execution"></a>
<h2>Displaying Total Execution Time</h2>
<p>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:</p>
<code><?=$this->benchmark->elapsed_time();?></code>
<p>You'll notice that it's the same function used in the examples above to calculate the time between two point, except you are
<strong>not</strong> 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.</p>
<p>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:</p>
<code>{elapsed_time}</code>
<p class="important"><strong>Note:</strong> If you want to benchmark anything within your controller
functions you must set your own start/end points.</p>
<a name="memory"></a>
<h2>Displaying Memory Consumption</h2>
<p>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:</p>
<code><?=$this->benchmark->memory_usage();?></code>
<p>Note: This function can only be used in your view files. The consumption will reflect the total memory used by the entire app.</p>
<p>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:</p>
<code>{memory_usage}</code>
</div>
<!-- END CONTENT -->
<div id="footer">
<p>
Previous Topic: <a href="../general/security.html"> Security</a>
·
<a href="#top">Top of Page</a> ·
<a href="../index.html">User Guide Home</a> ·
Next Topic: <a href="calendar.html">Calendaring Class</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> · Copyright © 2007 · <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
</div>
</body>
</html>
|