【问题标题】:Does including require("db.php") at the top of every php page slow things down?在每个 php 页面的顶部包含 require("db.php") 会减慢速度吗?
【发布时间】:2011-07-05 22:53:32
【问题描述】:

如果数据库和表不存在,我的 db.php 文件会连接、选择和创建它们。当我在每个页面的顶部 require("db.php") 时,它是否每次都重新运行该代码?这最终会导致放缓,尽管是轻微的吗?如果需要查询数据库的每个页面上不存在新表,我真的应该连接到数据库、选择它并检查以创建新表吗?这种情况有最佳实践吗?我是不是在担心什么?

【问题讨论】:

  • “我是不是在担心什么?”也许吧。
  • 从安全的角度来看,允许您的网络应用程序创建表可能不是一个好主意。如果桌子不在那里,我个人只会让它失败并出现错误。 require 本身没什么大不了的。

标签: php mysql performance include require


【解决方案1】:

首先使用 require_once 不仅仅是 require ,基本上 require_once("db.php") 只会复制代码 db.php 的内容并将其粘贴到它被调用的地方。因此开销 = 打开文件 + 读取文件 + 复制文件 + 粘贴文件,最后解释额外的数据。

【讨论】:

    【解决方案2】:

    我将从引导过程中删除的“创建数据库和表(如果它们不存在)”部分:这可能成本很高,并且绝对没有必要在每个请求上运行。如果表不存在,让您的代码优雅地崩溃。

    只是建立数据库连接对于大多数 PHP 应用程序来说是相当标准的,因为它通常在大多数(如果不是全部)上下文中都需要。

    有可能构建一个“延迟连接”的数据库包装器,即仅在实际需要时建立连接,但除非您真的有理由基于性能测量,否则我不会担心这一点。

    【讨论】:

      【解决方案3】:

      我会推荐你​​,:

      1. 在实际查询数据库服务器之前不要建立与它的连接;只需将其置于待机模式并在第一个 Db 查询进入时连接。这就是 Zend Framework 的 Zend_Db 的工作方式,大多数框架都以相同的思想行事:准备好资源,仅在必要时使用它们。

        李>
      2. 让您的代码和项目框架尽可能整洁。慢代码总是比不可读的代码更可取。

      3. 不要将工作程序与诊断混为一谈。检查 Db 及其表的完整性是一项诊断任务,通常由系统管理员定期执行(每周、每月等)。另一方面,工作例程总是假设事情是 honkie dorie,并希望通过设置适当的应急预防措施(这是为最坏的情况而建立的,并挽救一天)获得最佳结果,以防万一。

      【讨论】:

        【解决方案4】:

        可以肯定地说,如果您不需要一段代码,就不要调用它。但是,连接到数据库的文件不会占用太多空间(可能是 5 到 6 行要求不高的代码)。

        无论如何,如果您需要连接到您的数据库,除了包含该文件之外,您别无选择。

        【讨论】:

          【解决方案5】:

          您可以将连接和选择放在该文件中,但如果它们不存在则创建它们对我来说似乎没用。如果您创建它们,它们通常不会迷路。虽然建立连接通常是代码中最慢的部分,但您没有太多选择 - 但是您可以尝试使用 mysql_pconnect ,一旦连接存在,它会更快。检查here
          可以说,在需要文件时使用的额外时间是肉眼看不到的,因此您不必担心。只要不过度使用,使用更多文件更容易管理。

          【讨论】:

            【解决方案6】:

            每次执行 require 时,文件都会添加到脚本代码中。这段代码需要php编译器在运行时进行处理。因此,每次运行脚本时,您可能会添加大约 1kb 的代码,这些代码需要由您的 cpu 处理。所以是的,您正在减慢速度,但速度减慢可以忽略不计,只有当您开始添加超过 1MB 的文件时才会注意到它。 1MB 的代码是很多代码。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-12-14
              • 2011-11-17
              • 2013-07-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多