自动加载是当调用了一个类。但是没有显式的require时会自动去目录里找对应的PHP类文件。
请问在我多个FUNCTION或者多个页面中都有用到这个类时是不是每次都会去硬盘上找这一个文件。那这样是不是就加大了硬盘IO的开销?
如果显式require_once是不是就是就一次IO的开销。不知大家开发项目时如何处理?

解决方案 »

  1.   

    是的,多个页面中都有用到这个类时是不是每次都会去硬盘上找这一个文件
    同样的,显式require_once时同样是每次都会去硬盘上找这一个文件于是就有了一些扩展库,用来缓存这些频繁加载的文件
      

  2.   

    autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。  
    通常PHP5在使用一个类时,假如发现这个类没有加载,就会自动运行__autoload()函数,在这个函数中我们可以加载需要使用的类。
    使用autoload机制时,很多人的第一反应就是使用autoload会降低系统效率,甚至有人干脆提议为了效率不要使用autoload。在我们了解了autoload实现的原理后,我们知道autoload机制本身并不是影响系统效率的原因,甚至它还有可能进步系统效率,由于它不会将不需要的类加载到系统中()。 
      那么为什么很多人都有一个使用autoload会降低系统效率的印象呢?实际上,影响autoload机制效率本身恰正是用户设计的自动加载函数。假如它不能高效的将类名与实际的磁盘文件(留意,这里指实际的磁盘文件,而不仅仅是文件名)对应起来,系统将不得不做大量的文件是否存在(需要在每个include path中包含的路径中往寻找)的判定,而判定文件是否存在需要做磁盘I/O操纵,众所周知磁盘I/O操纵的效率很低,因此这才是使得autoload机制效率降低的罪魁罪魁! 
      因此,我们在系统设计时,需要定义一套清楚的将类名与实际磁盘文件映射的机制。这个规则越简单越明确,autoload机制的效率就越高。 
      结论:autoload机制并不是自然的效率低下,只有滥用autoload,设计不好的自动装载函数才会导致其效率的降低。
      

  3.   

    参考文档:
    http://www.cnblogs.com/chenzrm/archive/2011/08/11/2134325.html
      

  4.   

    在我们了解了autoload实现的原理后,我们知道autoload机制本身并不是影响系统效率的原因,甚至它还有可能进步系统效率,由于它不会将不需要的类加载到系统中()。这是相对的.电脑在某些地方再聪明也不能聪明过人.
      

  5.   


    对的,因为后面他也说出了我说的相对的是什么,所以如果这个人不聪明那么他的autoload就会效率低下,这个时候还不如人肉include.那么为什么很多人都有一个使用autoload会降低系统效率的印象呢?实际上,影响autoload机制效率本身恰正是用户设计的自动加载函数。假如它不能高效的将类名与实际的磁盘文件(留意,这里指实际的磁盘文件,而不仅仅是文件名)对应起来,系统将不得不做大量的文件是否存在(需要在每个include path中包含的路径中往寻找)的判定,而判定文件是否存在需要做磁盘I/O操纵,众所周知磁盘I/O操纵的效率很低,因此这才是使得autoload机制效率降低的罪魁罪魁!  
      

  6.   

    你这同学...说话说一半...发现最近csdn删贴特勤,你发言文雅多了....当然,后果是csdn的吸引力大减.....
      

  7.   

    没事, 电视上的她,对我没有吸引力....靠,我是来谈技术问题滴....这个autoload还是应该用的,
    俺们以前一个应用里,那个require_once乱得啊....比苍老师乱多了....
      

  8.   

    好吧.autoload...下个项目开始.
    哈哈哈...