【问题标题】:PHP output: file include vs. function (performance)PHP 输出:文件包含与函数(性能)
【发布时间】:2012-10-03 17:45:15
【问题描述】:

这里有两种显示 html 输出的方法:function vs include。访问文件系统而不是访问内存时是否会影响性能?如果每个页面加载有几十个甚至几百个包含,这在什么时候会成为问题?

选项 1:使用 函数

的 Html 显示循环
foreach ($items as $item){
    displayItem($item);
}

function displayItem($item){ ?>
    <html output>
<?php }

选项 2:使用 include

的 Html 显示循环
foreach ($items as $item){
    include $path . 'displayItem.php';
}

//inside displayItem.php:
<html output>

【问题讨论】:

  • 最可靠的方法是在您的设置上自行测试。不过,文件系统通常缓存在内存中,所以重要的是include 机制本身的性能,而不是文件系统的性能。
  • 一般来说,PHP 网站的性能瓶颈不在于包含。一些库有数百个包含并用于非常高流量的站点。您应该组织站点中的代码以正确构建它,而不是专注于速度。如果您担心网站的性能,请运行分析器并找出您的代码中真正的瓶颈。

标签: php html performance include


【解决方案1】:

当然,磁盘访问比内存访问慢得多,这就是为什么磁盘访问通常被操作系统缓存在内存中的原因。即便如此,如果您能以某种方式缓存displayItem()(可能包含文件)的输出,然后使用memcache 之类的内容从内存中保存并加载缓存的输出,您应该会看到性能显着提高。

【讨论】:

  • 好吧,我不想缓存 displayItem 的输出,因为每个 $item 的输出都不同。我想知道这是否是创建所有(动态)输出代码的可接受格式。例如,然后我可以使用文件资源管理器查看我的所有 displaySmallList 与 displaySmallListNoImage 以及所有其他变体。我可以将它们组织在文件夹中。包含的数量会非常高。问题是,文件是否被访问过一次,并且像函数一样,存储在内存中,文件系统不再访问?当我有更多时间时,我将不得不阅读布拉德的链接......
  • @MikeLewis,当然可以,您可以为每个项目创建一个缓存,甚至为每个页面创建一个缓存。这是一种很常见的做法。但是对于访问文件,它取决于文件系统、操作系统、可用内存和物理硬盘(它也自己做一些缓存)。或者,如果可以重新生成信息,您可以将所有内容存储在 ramdisk 中。但是,如果您有很多项目,具体取决于您在页面上显示的数量与总数,最好从单个文件中读取每个项目,而不是为每个项目一次加载 everything 在内存中请求。
  • @MikeLewis,正如您所看到的,这里有很多变量,所以如果可以的话,最好进行基准测试,因为您的情况可能与其他人不同。当磁盘读取成为瓶颈时,我确实遇到过这种情况,但这并不常见。我建议看一下xhprofxdebug,它们都可以生成非常好的和有用的分析数据。
猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 2015-08-02
  • 2013-04-17
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
相关资源
最近更新 更多