`
txf2004
  • 浏览: 7041186 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

require() VS require_once() - 马永占 译

阅读更多

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/mayongzhan - 马永占,myz,mayongzhan

require() VS require_once()

刚发现require_once()比require()慢,以前我的项目全是使用的require_once(),郁闷...
> 最好直接使用include或者require,
> 因为*_once()在一个opcode缓存下的调用非常慢.
> #_once()需要额外的去查看系统是否已经调用过这个文件.

译者注:
5.2.X对require_once()和include_once()进行了优化,所以不用担心这个问题了.

摘一段文章如下:
PHP 5.2 以前 require_once() 和 include_once() 的做法是无论某个文件是否已经被缓存或编译过,统统是先 fopen() 再说,打开成功后在查询一下是否已经缓存过。这么处理的原因就是 在 PHP 5.1 以前没有很完美的解决 realpath() 相对路径和符号连接方面的问题。因为若不能唯一地正确地确定某个路径的真实路径表示那么你就无法利用这个路径的唯一性去解决某个问题。而 fopen 则没有这个顾虑。realpath() 的这个问题在 PHP 5.1 中被彻底搞定了,但还没来得及应用到 require_once() 和 include_once() ,结果就拖迟到现在。解决这个问题的好处是在于避免了 fopen 这个 I/O 操作,在很多高负载情形中,通常都是 数据库、网络或者磁盘 I/O 而不是 CPU 成为瓶颈。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics