bubu Posted October 16, 2007 Report Share Posted October 16, 2007 Uzdūros šādam linkam: 40 Tips for optimizing your php Code. Ir dažas vecas un labas patiesības, taču bija arī šis tas man jauns izlasāms. Varbūt vēl kādam noder ar. Tā beigās ir vēl viens interesants links par php ātrdarbības optimizēšanu: http://phplens.com/lens/php-book/optimizin...bugging-php.php Link to comment Share on other sites More sharing options...
Delfins Posted October 16, 2007 Report Share Posted October 16, 2007 3. un 29. atkārtojās Link to comment Share on other sites More sharing options...
aldis Posted October 16, 2007 Report Share Posted October 16, 2007 Kaarteeja lapinja kas iesliidzees manos bookmaarkos.. :) sameeraa interesantas lietas.. jo nezinaju ka tik smalki - echo ir aatraaks par print.. u.t.t.. :) Link to comment Share on other sites More sharing options...
v3rb0 Posted October 16, 2007 Report Share Posted October 16, 2007 thnx par linku. ir labi šitos zināt, bet pilnīgi visās vietās ievērot visus punktus diez vai atmaksājas, kā tur bija ar to 20/80 likumu? Link to comment Share on other sites More sharing options...
zinatnieks Posted October 16, 2007 Report Share Posted October 16, 2007 Tiešām forši palasīt :) Link to comment Share on other sites More sharing options...
blackhalt Posted October 16, 2007 Report Share Posted October 16, 2007 Intersanti. Vairumā piekrītu :P Link to comment Share on other sites More sharing options...
cucumber Posted October 16, 2007 Report Share Posted October 16, 2007 To Aldis: echo atraks, jo ta ir f-ja, kas neko atgriez void, bet print gan atgriez. ps. palasishu kas tur labs. Link to comment Share on other sites More sharing options...
cucumber Posted October 16, 2007 Report Share Posted October 16, 2007 34. Tik tiesham labs un kaut kas jauns priekshmanis, bus vel parejie ari japateste. speedd test class do{ $x++; }while($x<10000000); //1.43269896507 avr do{ ++$x; }while($x<10000000); //1.19007301331 avr Link to comment Share on other sites More sharing options...
bubu Posted October 16, 2007 Author Report Share Posted October 16, 2007 Man atkal, kā C++ programmētājam, tas ir dabiski un sen zināma lieta, ka otrais ir ātrāks :) Tāpēc, ka $x++ varētu "izteikt" ar šādu funkciju: function ++ ($x) { $y = $x; $x = $x + 1; return $y; } Taču ++$x izsakās šādi: function ++ ($x) { return $x + 1; } Link to comment Share on other sites More sharing options...
marrtins Posted October 17, 2007 Report Share Posted October 17, 2007 Dažas pārdomas. 1. If a method can be static, declare it static. Speed improvement is by a factor of 4. Statisks vai nestatisks ir jāizvēlas konkrētai problēmai, jādomā par progrmamas struktūru nevis par ātrdarbību. Ko vispār nozīmē `by a factor of 4.`? 2. echo is faster than print. Jā, bet ātrdarbības ieguvums ir niecīgs un web aplikāciju izstrādē faktiski ir nulle. 3. Use echo's multiple parameters instead of string concatenation. Tas pats, kas pie 2. 5. Unset your variables to free memory, especially large arrays. `especially large arrays` + objects es piekristu, pasvītrojot `especially large`. Tas ir noderīgi, ja skriptiem uzstādīts memory_limits, stipri apšaubu, ka šādi tiek atbrīvota sistēmas atmiņa, man prātā stāv, ka unset tikai atbrīvo skripta PHP atmiņu, lai vēlāk to izmantotu citiem datiem skripta kontekstā. 7. require_once() is expensive Ja? Liekas, ka tur ir tikai viena papildus pārbaude pirms inclūdot. 8.Use full paths in includes and requires, less time spent on resolving the OS paths. WTF? Gribat, lai es hardkodēju visas inclūdes?? Apšaubu, ka iegūtā "ātrdarbība" ir tā vērta. 16. Close your database connections when you're done with them `when you're done with them` == `kad skripts beidz darbu`. Nekad nav gadījies vajadzība taisīt db_close kaukur pa vidu - lai PHP pats aizver visas figņas pēc skripta darbības beigām. 19. Do not use functions inside of for loop, such as for ($x=0; $x < count($array); $x) The count() function gets called each time. Tas pats, ka 4.? 23. Incrementing an undefined local variable is 9-10 times slower than a pre-initialized one. Vispār tizls stils kautko darīt ar neinicializētiem mainīgajiem. 28. Surrounding your string by ' instead of " will make things interpret a little faster since php looks for variables inside "..." but not inside '...'. Of course you can only do this when you don't need to have variables in the string. Tikai vajadzības gadījumā patērētais laiks, lai pārvērstu ' par ", ir krietni lielāks, nekā ātrdarbības ieguvums. 29. When echoing strings it's faster to separate them by comma instead of dot. Note: This only works with echo, which is a function that can take several strings as arguments. Tas pats, kas pie 2. 33. bla bla bla... if (!isset($foo{5})) { echo "Foo is too short"; } ...bla bla bla... Nu nav tas ātrdarbības ieguvums tik ļoti liels, lai es šādi sačakarētu savu kodu - pēc 1/2gada pamēģini izlasīt, kas te ir domāts. 34. When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i.... Vesels(!!!!) opcods :D :D :D nu i vērts pieminēt pie optimizācijas. Šādu konstrukciju (++$i) ir vērts izmantot kam tā ir paredzēta, nejau katrā vietā lai tikai ietaupītu vienu opcodu :D Link to comment Share on other sites More sharing options...
Joyride Posted October 17, 2007 Report Share Posted October 17, 2007 Par 8. punktu: kapec harkodet? define('SITE_ROOT', str_replace('\\', '/', dirname(__FILE__))); Luk - Tev ir konstante, kura satur absoluto celju lidz lapas rootam. Vel vari uztaisit papildu konstantes: define('INCLUDE_DIR', SITE_ROOT . '/includes'); define('CLASSES_DIR', SITE_ROOT . '/classes'); ... un require_once './classes/Database.php' vieta izmanto require_once CLASSES_DIR . '/Database.php'. Sita pat ir labak, jo bus vieglak atcereties, un, ja sagribesies mapi /classes parsaukt par /lib, tad atliks vien pamainit konstanti. Link to comment Share on other sites More sharing options...
bubu Posted October 17, 2007 Author Report Share Posted October 17, 2007 Statisks vai nestatisks ir jāizvēlas konkrētai problēmai, jādomā par progrmamas struktūru nevis par ātrdarbību. Ko vispār nozīmē `by a factor of 4.`?Tas jau tieši tu rakstīts - "if a method can be static". Ja konkrētā problēma pieļauj statisku metodi!."by a factor of 4" tulkojās kā četras reizes. Tas pats, ka 4.?Manuprāt 4-tajā domāts kautkas šāds for ($x=0; $x<$y; $x++) { .... if ($something) { $y =10; } ... } Vispār tizls stils kautko darīt ar neinicializētiem mainīgajiem.Neesi pamanījis, cik daudz pat šī foruma apmeklētāju lieto neinicializētus mainīgos? :) Un visas tās sīkās lietas saucas par mikro optimizācijām. Varbūt katra atsevišķi neko daudz neietekmē, taču tad, kad projekts ir liels un tiek novērota liela bremze, tad vajag pameklēt vainīgo vietu. Varbūt tas ir neliels cikls, kura iekšienē pielietojot dažas no šīm lietām var panākt vajadzīgo ātruma pieaugumu. Kā jau v3rb0 saka - 20/80 likums. Link to comment Share on other sites More sharing options...
Joyride Posted October 17, 2007 Report Share Posted October 17, 2007 Bet, ja metode var but statiska, labak nav vinu definet ka parastu funkciju...? Link to comment Share on other sites More sharing options...
v3rb0 Posted October 17, 2007 Report Share Posted October 17, 2007 bet tas for ($x=0; $x < count($array); $x) ira slikts stils. piekrītu ka piemērā ar count() un masīvam ar 10mit elementiem ir vienalga, nekas jūtami ātrāk nebūs, bet iedomājies ka count() vietā kāds ielicis f-ju kura prasa kaut ko db, jo nezin ka f-ja tiks izsaukta katrā iterācijā. Link to comment Share on other sites More sharing options...
marrtins Posted October 17, 2007 Report Share Posted October 17, 2007 Par 8. punktu: kapec harkodet? define('SITE_ROOT', str_replace('\\', '/', dirname(__FILE__))); Luk - Tev ir konstante, kura satur absoluto celju lidz lapas rootam. Vel vari uztaisit papildu konstantes: define('INCLUDE_DIR', SITE_ROOT . '/includes'); define('CLASSES_DIR', SITE_ROOT . '/classes'); ... un require_once './classes/Database.php' vieta izmanto require_once CLASSES_DIR . '/Database.php'. Sita pat ir labak, jo bus vieglak atcereties, un, ja sagribesies mapi /classes parsaukt par /lib, tad atliks vien pamainit konstanti. Jā, tas nu toč tad būs ātrāk - visa optimizācija aiziet ar str_replace + define + string concat :D Link to comment Share on other sites More sharing options...
Recommended Posts