3

我正在建立一个PHP网站,但目前PHP我唯一使用的是某些页面上的六个左右。(我最终可能会使用一些数据库查询。)

与 static 相比,简单include()语句是否关注速度或缩放HTML?什么样的事情往往会导致网站陷入困境?

4

7 回答 7

5

当然 include() 比静态页面慢。但是,对于现代系统,您不太可能在很长一段时间内将其视为瓶颈——如果有的话。在我看来,使用的好处包括使您网站的公共部分保持最新而不是对性能的微小影响(在一个页面上有不同的导航,因为您忘记更新它会导致糟糕的用户体验,从而对您的网站/公司/任何)。

使用缓存也无济于事 - 缓存代码将比仅包含()慢。缓存对您有益的唯一时间是,如果您正在执行计算密集型计算(非常罕见,在网页上),或者从数据库中获取数据。

于 2008-09-22T01:45:33.903 回答
4

听起来您正在参与一些过早的优化。如果未构建应用程序,虽然需要注意性能问题,但您的主要关注点应该是编写应用程序。

包括是生活中的事实。不用担心数量,担心保持代码井井有条(PEAR 文件夹结构是一个可爱的东西,如果您不知道我在说什么,请查看 Zend Framework 类文件的结构)。

专注于以合理的抽象量编写应用程序。将所有数据库调用分组到一个类(或多个类)中,以便最大限度地减少代码重复(KISS 原则和所有),当需要重构和优化查询时,它们位于中心位置。还要开始进行一些单元测试以防止回归。

一旦应用程序启动并运行,不要问我们什么更快或更好,因为这取决于每个应用程序你的瓶颈是什么。事实证明,即使你有很多包含,你的循环也会占用你的时间,或者其他什么。使用XDebug在代码启动并运行后对其进行分析。查找占用过多时间的代码段,然后进行重构。如果你现在过于关注 include 和 include_once 之间的性能影响,那么当同步运行的 curl 请求正在吃你的早餐时,你最终会陷入困境。

尽管与此同时,最好的建议是查看 php.net 手册,并确保是否有内置函数可以做您想做的事情,请使用它!PHP 的基于 C 的扩展总是比您可以编写的任何 PHP 代码更快,并且您会惊讶于您尝试做的很多事情已经完成。

但同样,我不能强调这一点,过早的优化是不好的!!!只需以良好的抽象级别启动您的应用程序,对其进行分析,然后修复实际占用您时间的内容,而不是修复您认为可能占用您时间的内容。

于 2008-09-22T07:36:47.773 回答
3

严格来说,直接的 HTML 总是比服务器端方法更快,因为服务器不需要对代码进行任何解释。

要回答更大的问题,有很多事情会导致您的网站陷入困境;当您的代码与 PHP 相比时,没有具体的阈值。(请记住,雅虎的许多网站都是 PHP 驱动的,所以不要认为 PHP 无法扩展)。

我注意到的一件事是,最慢的 PHP 驱动站点包含的内容超出了显示特定页面所需的内容。OSCommerce (oscommerce.com) 是最受欢迎的 PHP 驱动的购物车之一。但是,它有一个坏习惯,即在每个页面上都包含所有核心功能(以防万一)。因此,即使您不需要显示“信息框”,也会加载该功能。另一方面,有许多 PHP 框架(例如 CakePHP、Symfony 和 CodeIgniter)采用“按需加载”的方法。

我会建议以下几点:

  1. 不要包含超出特定页面所需的功能
  2. 保持基本功能分开(尽可能使用 MVC 方法)
  3. 如果您认为您将嵌套包含,请使用 require_once 而不是 include(例如,页面 A 包含包含文件 C 的文件 B)。这将避免多次包含同一个文件。如果找不到文件,它也会停止该过程;从而帮助您的故障排除过程;)
  4. 如果可能,将静态页面缓存为 HTML - 避免在事情没有变化时重新解析
于 2008-09-22T02:01:21.340 回答
2

不包括很好,​​没有什么可担心的。

您可能想考虑在某个时候稍微调整一下您的缓存标头,但除非您获得重大点击,否则应该没问题。假设这都是静态数据,您甚至可以考虑将整个站点转换为静态 HTML(最简单的方法:编写一个脚本,通过网络服务器抓取每个页面并将其转储到匹配的 dir 结构中)

大多数 Web 应用程序都受到其数据库速度的限制(或者无论它们的外部存储是什么,但 9/10 倍将是数据库),应用程序代码很少引起关注,而且听起来不像你重新做任何你需要担心的事情。

于 2008-09-22T01:48:51.433 回答
1

在您对如何为您的网站构建代码做出任何长期决定之前,我建议您阅读一下模型-视图-控制器设计模式。虽然还有其他一些,但这个似乎在 Web 开发圈中获得了很大的进展,并且肯定会存在一段时间。在对哪种设计最适合您的需求做出任何最终决定之前,您可能想看看 Martin Fowler 在他的企业应用程序架构模式中建议的其他一些设计模式。

根据项目的大小和范围,您可能希望使用现成的 PHP 框架,例如 Zend Framework 或 PHP On Trax,或者您可能决定构建自己的解决方案。

特别是关于 HTML 内容的呈现,我强烈建议您使用某种形式的模板,以使您的业务逻辑与显示逻辑分开。我发现在我的开发过程中,这一简单的规则在需要更改其中一项时为我节省了数小时的工作时间。我使用过 http://www.smarty.net/">Smarty,我知道大多数框架要么有自己的模板系统,要么提供插件架构,让您可以使用自己喜欢的方法。当您查看可能的解决方案时,我建议您寻找一种能够创建缓存版本的解决方案。

最后,如果您担心后端的速度,那么我强烈建议您研究如何最大限度地减少对后端数据存储(无论是数据库还是系统文件)的调用。尽量避免一次加载和呈现过多的内容(例如存储在包含数百条记录的表中的大型报告)。如果可能,请寻找使用户界面一次加载较小数据位的方法。如果您特别关心 html 内容及其 CSS、Javascript 或其他依赖项的实际加载时间,我建议您查看Yahoo! 人员的这些建议。

于 2008-09-22T03:59:18.607 回答
0

添加 JayTee 提到的内容 - 在需要时加载功能。如果您没有使用任何自动执行此操作的框架,您可能需要查看 PHP5 中引入的 __autoload() 功能 - 基本上,您自己的逻辑可以在您实例化特定类时调用,如果它还没有加载。这使您有机会包含()按需定义该类的文件。

于 2008-09-22T03:39:01.637 回答
0

加快应用程序速度的最重要的事情是使用 Opcode 缓存,例如APC维基百科上有一个很好的列表和描述。

就简单的包含而言,请注意不要在每个请求中包含太多文件,因为磁盘 I/O 会导致您的应用程序无法很好地扩展。几十个包含应该没问题,但通常最好将最常包含的文件打包到一个脚本中,这样您就只有一个包含。在这里和那里不需要加载一些类的内存成本将比包含数百个较小文件的磁盘 I/O 成本要好。

于 2008-09-22T04:33:40.507 回答