php: require vs require_once
iinuu, 09.07.2009., 11:25Esot 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?
- izmantot
include()
(vairequire()
) tikai vienreiz; __autoload()
funkcijas izmantošana;class_exists('myClass') || require('path/to/myClass.class.php');
function_exists('functionInFile') && return;
vaiclass_exists('ClassInFile') && return;
@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.
web.hc.lv ir vortāls, kurā tiek aplūkoti mājaslapu veidošanas un mārketinga aspekti, no idejas līdz gandarījumam.