PHP程序员最常用的两个函数莫过于require_once和include了,通过这两个函数,我们可以使用其他类库中定义的类等对象,但很多人在使用包含相同目录下的其他文件时,仅仅简单使用下面的代码进行文件引用:
include性能:include('include.php');当然这种方式并没有错误,只不过在效率上它比下面的方式要稍稍差些:
include(realpath(dirname(_FILE_)).DIRECTORY_SEPARATOR.'include.php');
这种方式我们可能需要输入更多一些,但相对于前面那种需要PHP引擎去include_path 中迭代查找所有名称为'include.php’才能查找到相应对象来说,dirname(__FILE__)这种绝对路径的指定会让系统迅速定位到相应文件。
在PHP中常量__FILE__ 其实跟C#中的AppDomain.CurrentDomain.BaseDirectory非常类似,它返回的是当前代码正在执行的代码所在文件的绝对路径。而函数dirname()则返回其父文件夹路径。
另外一个更查找效率高,并且书写简单的方式是include('./include.php'),这相当于告诉系统查找当前路径下的'include.php’文件。
在大型系统中我们常常使用另外一个更好的方式,我们常常在路由文件或其他初始化文件中加入如下代码:define('APP_PATH',realpath(dirname(_FILE_)));
这相当于给系统添加了一个全局变量来指出系统根目录,当我们后面需要引用某具体路径下的文件时我们就可以使用如下代码了:
include(APP_PATH.DIRECTORY_SEPARATOR.'models'.'User.php');
autoload与include性能比较,例如有以下四个脚本:
- #file:include1.php
- include 'include2.php';
- //@todo something#file:include2.php
- //@todo something#file:script1.php
- include 'include2.php';
- //@todo something
- #file:script2.php
- include 'include1.php';
- include 'script1.php'
- //@todo something
当执行script1.php时, include ‘include2.php’; 这行代码被执行了一次。而执行script2.php时,这行代码被执行了两次
。这里只是一个简单的例子,在实际的项目中,include2.php被include的次数可能更多。这样反复的include,是否会影响性能呢?为此我写了个脚本来测试。
- #file:SimpleClass.php
- class SimpleClass {
- public function __construct() {
- echo get_time() . "rn";
- }
- }
- #file:php_include.php
- for($i = 0;$i < $loop;$i++) {
- include_once "SimpleClass.php";
- new SimpleClass();
- }
当$loop值为1时,脚本耗时约0.00018906593322754秒,当$loop为1000时,脚本耗时约0.076701879501343秒。
如果我们用autoload实现呢?
- #file:php_autoload.php
- function __autoload($class_name) {
- include_once $class_name . '.php';
- }for($i = 0;$i < $loop;$i++) {
- new SimpleClass();
- }
在这段代码中,我定义了__autoload函数,几乎一样的脚本,当$loop为1时,耗时0.0002131462097168秒,而当$loop为1000时,耗时仅为前面代码的1/7,0.012391805648804秒。
但请注意看SimpleClass的代码,其中输出了一行字符串,如果去掉这行输出后再比较,会是什么样的结果呢?
在$loop同为1000的情况下,前者耗时0.057836055755615秒,而使用了autoload后,仅仅0.00199294090271秒!效率相差近30倍!
从上面的测试可以看出,当文件仅仅被include一次,autoload会消耗稍微多一点的时间,但如果在文件被反复include的情况下,使用autoload则能大大提高系统性能。
至于是否要使用autoload来解放程序员,这就仁者见仁,智者见智了。在我看来,条件允许的前提下,牺牲这一点性能(某些情况下,甚至可能是提升性能)更为便捷的开发,是值得的。
include()和require()性能
对include()来说,在 include()执行时文件每次都要进行读取和评估;而对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句)。
这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。
另一方面,如果每次执行代码时相读取不同的文件,或者有通过一组文件叠代的循环,就使用include(),因为可以给想要包括的文件名设置一个变量,当参数为include()时使用这个变量。
波比源码 » php中 inlcude()性能对比详解
levaquin 500mg oral order levaquin pills
buy avodart 0.5mg without prescription buy celecoxib 100mg generic order zofran 4mg online cheap
order aldactone generic valtrex 500mg pill buy diflucan 200mg for sale
buy ampicillin 500mg pills buy cephalexin 125mg online cheap erythromycin without prescription
sildenafil 50mg us nolvadex 20mg us buy generic robaxin 500mg
suhagra 50mg sale order estrace 2mg pill estrace 1mg generic
buy lamictal 200mg online buy mebendazole 100mg for sale order retin cream for sale
tadalafil online buy diclofenac cheap diclofenac 50mg drug
cheap indomethacin indocin for sale online trimox 500mg sale
tadalafil 20mg oral Pfizer viagra 50 mg online viagra 100mg uk
arimidex uk paypal payment for viagra order sildenafil 100mg without prescription
order deltasone 5mg online canadian pharmacy cialis pfizer viagra pill
generic modafinil 200mg order generic acetazolamide 250 mg order diamox online cheap
brand doxycycline order doxycycline pills furosemide tablet
clonidine generic order spiriva 9 mcg generic buy tiotropium bromide 9 mcg generic
buy terazosin 1mg generic sulfasalazine cheap sulfasalazine ca
fosamax 70mg over the counter order panadol pill pepcid medication
purchase isosorbide pill buy isosorbide 20mg pill order generic micardis 80mg
buy generic molnupiravir lansoprazole brand lansoprazole 30mg cheap
buy salbutamol 100 mcg for sale purchase salbutamol sale sildenafil for sale
cialis from india fluoxetine 20mg without prescription buy viagra 100mg generic
cialis 40mg cost brand cialis 10mg amantadine pills
order avlosulfon 100 mg generic buy nifedipine pill cheap aceon
provera 5mg canada order praziquantel 600 mg pill generic cyproheptadine 4 mg
order provigil 100mg generic legitimate online pharmacy usa ivermectina 6 mg
buy isotretinoin 10mg generic order amoxicillin 250mg online cheap prednisone 40mg us
cheap piracetam 800 mg nootropil 800mg for sale genuine viagra
lasix ca doxycycline 100mg cheap plaquenil 400mg cheap
buy generic itraconazole order generic tinidazole tinidazole 300mg usa
metformin drug buy metformin 1000mg generic cialis 40mg canada
order olanzapine 10mg online valsartan 80mg without prescription purchase diovan for sale
norvasc drug female cialis pill tadalafil 40mg sale
oral clozapine 50mg clozaril medication dexamethasone tablet
zyvox 600mg tablet zyvox 600 mg price online gambling slots games
i need help with my essay research papers writing online casino slots no download
order clomid 50mg free casino slot games ocean casino online
buy cialis 40mg without prescription cialis professional purchase viagra pill
buy triamcinolone 4mg online clarinex 5mg brand buy desloratadine 5mg
buy tadalafil sale buy inderal 10mg generic brand plavix 75mg
order generic zyloprim allopurinol 100mg usa zetia pills
domperidone over the counter tetracycline ca flexeril drug
buy losartan 50mg sale buy cozaar 25mg for sale topiramate online buy
purchase ozobax without prescription tizanidine cost toradol online order
buy imitrex 25mg without prescription sumatriptan 50mg drug oral avodart 0.5mg
generic colchicine 0.5mg roulette casino play blackjack online for real money
cheap zantac 150mg brand zantac order celecoxib 100mg
flomax order online flomax 0.2mg ca buy aldactone 100mg generic
cialis cheap online cialis buy cipro
purchase simvastatin for sale proscar uk proscar 5mg drug
cheap sildenafil tablets cialis online order tadalafil 5mg pills
online casinos for real money casino online gambling order cialis 10mg online cheap
azithromycin 250mg cost gabapentin 100mg for sale gabapentin uk
furosemide usa hydroxychloroquine 400mg oral hydroxychloroquine 400mg over the counter
fildena tablet order sildenafil 100mg sale rhinocort oral
order deltasone 20mg online cheap order mebendazole online vermox online
order tretinoin without prescription order tadalis 20mg pills avana 100mg pill
tadalafil 20mg drug diclofenac 100mg pills order indomethacin 50mg for sale
order terbinafine pill buy amoxicillin 250mg order amoxicillin 250mg generic
biaxin 500mg uk brand clarithromycin order antivert 25mg for sale
order tiotropium bromide 9mcg order spiriva 9mcg generic hytrin 1mg pills
actos 15mg for sale order generic actos 30mg viagra 25mg
buy oral stromectol stromectol 12mg price avlosulfon price
online casinos for usa players online poker real money free spins no deposit usa
free spins no deposit usa roulette online free help writing a paper for college
olmesartan us benicar uk depakote 500mg drug
diamox 250 mg pill order azathioprine 25mg pills buy azathioprine 50mg pill
temovate online order order clobetasol for sale amiodarone 200mg over the counter
purchase amoxicillin for sale purchase amoxil online ivermectin 80 mg
indocin generic cheap indocin 75mg buy cenforce 50mg pill
order pepcid online cheap mirtazapine online buy mirtazapine 15mg cost
buy doxycycline without prescription medrol 16mg for sale buy methylprednisolone
purchase tadacip sale tadalafil order online order trimox without prescription
buy glycomet without prescription metformin 1000mg cost tamoxifen 10mg brand
accutane 10mg ca generic accutane buy ampicillin online
isotretinoin 40mg sale order isotretinoin 20mg generic buy azithromycin