Jump to content
php.lv forumi

40 padomi kā optimizēt PHP kodu


bubu

Recommended Posts

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

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

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

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

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

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

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

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

×
×
  • Create New...