Het idee van dit topic is om even wat kennis te delen. Zelf ben ik bezig om mijn code wat te optimaliseren en loop zo tegen een aantal dingen aan. Het achterliggende idee is om een stelling neer te zetten waarvan jij denkt dat het sneller/beter is en waarom. Vervolgens kun je dit testen door onderstaand testscript te gebruiken. Het testscript is natuurlijk slechts een template, en zou veel mooier gemaakt kunnen worden, maar het is ook maar een snel in elkaar gezet ding.
Maar goed; de aftrap.
Stelling: (PHP5) Class constants zijn sneller dan de waarde in de klasse via een setter instellen.
Resultaat: Fout. Het is sneller om een variabele te hebben en deze in de constructor in te stellen, dan gebruik te maken van class constants.
Tijd: Testcase één: 4 seconden / Testcase twee: 6 seconden.
Het zou misschien leuk zijn om hier een "performance" topic van te maken. Dus niet direct vragen stellen, maar meer van "doe niet dit, maar dit is beter". Zo kunnen we leren van elkaar..
Maar goed; de aftrap.
Stelling: (PHP5) Class constants zijn sneller dan de waarde in de klasse via een setter instellen.
Resultaat: Fout. Het is sneller om een variabele te hebben en deze in de constructor in te stellen, dan gebruik te maken van class constants.
Tijd: Testcase één: 4 seconden / Testcase twee: 6 seconden.
PHP:
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
| <?php error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING); setlocale(LC_ALL, nl_NL); /** * Test class */ class wuTest { private $strTest; /** * Constructor * @param object */ public function __construct() { $this->setTest(65536); } public function setTest($strValue) { $this->strTest = $strValue; } public function getTest() { return $this->strTest; } } /** * Test class */ class wuTest2 { const TEST = 65536; public function getTest() { return TEST; } } // // Test code $intStart = microtime(true); for ($intCurrent=0; $intCurrent<500000; $intCurrent++) { $objTest = new wuTest(); $objTest->getTest(); unset($objTest); } echo 'Test 1: '.sprintf("%01.4f", (microtime(true) - $intStart)).'<br />'; $intStart = microtime(true); for ($intCurrent=0; $intCurrent<500000; $intCurrent++) { $objTest = new wuTest2(); $objTest->getTest(); unset($objTest); } echo 'Test 2: '.sprintf("%01.4f", (microtime(true) - $intStart)); ?> |
Het zou misschien leuk zijn om hier een "performance" topic van te maken. Dus niet direct vragen stellen, maar meer van "doe niet dit, maar dit is beter". Zo kunnen we leren van elkaar..