php: require vs require_once

09.07.2009. 14:25:49 sagatavoja iinuu

Esot pamanīts, ka require_once ir līdz pat 4 reizēm lēnāks nekā require.

Domājams, agri vai vēlu veidojot PHP programmiņas rodas vēlme daļu koda glabāt citā failā. Šādā veidā rodas gan koda pārskatāmība, gan loģisko struktūra. Labs jautājums cik smalki sadalīt. Un šeit viennozīmīgas atbildes nav.

include('file.php') – php komanda, kas iekļauj failu file.php. Tas nozīmē, ja failā file.php glabāsies funkcija x(), tā būs pieejama un izmantojama pēc šīs komandas izpildes. Ja fails file.php nav atrasts, tik parādīts warning tipa brīdinājums, savukārt, ja šādā gadījumā nepieciešams "lai pasaule apstājas" lietojam require.

Jo sarežģītāks kods, jo lielāka varbūtība, ka esošās funkcijas būs atkarīga no citām funkcijām, kuras visticamāk glabāsies citos failos. Šādiem gadījumiem, php izdomājuši funkciju include_once('file.php').

function A() { 
  return 123; 
} 

require_once('fails_A.php');
function B() { 
  return A(); 
}

Tad nu, lūk, esot pamanīts, ka require_once() ir līdz pat 4 reizēm lēnāks nekā require(). Googlē atrodami dažādi skaitļi un mērījumi, dažkārt arī pretrunīgi. Vairākkārtēja faila iekļaušana pati par sevi nav laba, jo fails tiek nolasīts un tur esošais kods analizēts un izpildīts.

lv.php.net/manual/en/function.require-once.php#62838
peter.mapledesign.co.uk/weblog/archives/writing-faster-php-code-1-require_once

Gan vienu gan otru procesu var paātrināt, ja izmanto absolūto nevis relatīvo adresi. T.i. require('/var/www/user1/file1.php') nevis require('../../file.php'); Nelielos projektiņos atšķirību var arī nepamanīt, jo izrādās relatīvās adreses kešojas:
us2.php.net/manual/en/ini.core.php#ini.realpath-cache-size


Alternatīvas?

  1. izmantot include() (vai require()) tikai vienreiz;
  2. __autoload() funkcijas izmantošana;
  3. class_exists('myClass') || require('path/to/myClass.class.php');
  4. function_exists('functionInFile') && return; vai class_exists('ClassInFile') && return;
  5. @include('file.php');

Pēdējais – kļūdas apspiešana (error suppression), kā zināms, ir salīdzinoši laikietilpīgs process, bet par to kādā citā rakstā.

www.techyouruniverse.com/software/php-performance-tip-require-versus-require_once

P.S. Es pieminēju, ka statiskās metodes izsaukšana ir ātrāka?

 

Raksts pārpublicēts no IINUU bloga ar autoru piekrišanu.


2 komentāri Komentēšana pieejama visiem.
xyzzy komentēja 09.07.2009. 18:09:55 (ip:84.237.143.31)
Komentāra reitings: 0

"Esot pamanīts, ka require_once ir līdz pat 4 reizēm lēnāks nekā require" - benchmark or didn't happen.

deni2s komentēja 21.02.2010. 22:41:32
Komentāra reitings: 0

http://www.techyouruniverse.com/software/php-performance-tip-require-versus-require_once

Komentāra pievienošana

Ar * atzīmētie lauciņi ir jāaizpilda obligāti.





[ uz rakstu sarakstu ]

Reklāma
Par web.hc.lv

web.hc.lv ir vortāls, kurā tiek aplūkoti mājaslapu veidošanas un mārketinga aspekti, no idejas līdz gandarījumam.

[Valid RSS] Valid XHTML 1.0! Valid CSS!

RSS 2.0 ziņu barotne (news feed)  Twitter

reģistrēties