PHP 优化请求每个页面上的所有功能?

PHP optimization request all functions on each page?

我有一个 php 网站,我想对其进行优化。我有一个 config.php,它请求所有页面上具有所有功能的所有文件(而且我不需要为每个页面调用该文件)。这是一件坏事吗?如果我调用接口 aly 接口函数而调用 admin 只是 admin 函数,我会看到任何改进吗?

require_once "inc/common.php";
//probabilnu se foloseste ^ jos
require_once "inc/producers_functions.php";

require_once "inc/slider_functions.php";
require_once "inc/static_pages_functions.php";
require_once "inc/products_functions.php";
require_once "inc/interface_functions.php";
require_once "inc/cart_functions.php";
require_once "inc/cart_product_functions.php";
require_once "inc/cart_option_functions.php";
require_once "inc/cart_product_cart_options_functions.php";
require_once "inc/session_functions.php";
require_once "inc/user_information_functions.php";
require_once "inc/invoice_functions.php";
require_once "inc/company_info_functions.php";
require_once "admin/assets/libs/phpmailer/class.phpmailer.php";
require_once "inc/promoted_products_functions.php";
require_once "inc/diagonal_widget_functions.php";
require_once "inc/round_widget_functions.php";
require_once "inc/order_functions.php";
require_once "inc/general_settings_functions.php";
require_once "inc/wishlist_functions.php";
require_once "inc/marquee_widget_functions.php";
require_once "inc/functions_adminac.php";
require_once "inc/show_category.php";
require_once "inc/function_login_reg.php";
require_once "inc/grey_widget_func.php";

Is it a bad thing? If I call for interface an interface function and for admin just admin function, will I see any improvements?

两个问题的答案都是"it depends"。如果文件只声明新的符号和函数,应该没有什么区别。如果您使用例如,甚至更少opcache 在内存中缓存加载文件的模块。

如果文件(或其中一些)执行一些耗时的操作,例如会话管理、数据库连接、日志记录等,是的,这可能是一件坏事,改变它可能是有益的。

有几种方法可以优化这种模式,通常将代码包含在 类 中,然后使用 "autoloader".

您可以在包含 config.php 之前声明特定符号,这样它只包含某些文件:

<?php
    define('NEED_ADMIN', 1);
    define('NEED_MARQUEE', 1);
    include 'config.php';

在配置中,

if (defined('NEED_ADMIN')) {
    ...
}
if (defined('NEED_PANEL')) {
    ...
}

您还可以将所有文件合并到一个文件或多个文件中。然后你需要一些维护脚本知道,例如,"inc/block17.php" 是 inc/wishlist、inc/marquee 和 inc/login 的串联,并检查这些文件是否更新比主文件;如果是,它会将所有组件文件重新连接到主文件中。

$short = array(
    'inc/block1.php' => array(
         "inc/marquee_widget_functions.php",
         "inc/functions_adminac.php",
         "inc/show_category.php",
         "inc/function_login_reg.php",
         "inc/grey_widget_func.php",
    ),
    'inc/block2.php' => array(
         "inc/marquee_widget_functions.php",
         "inc/functions_adminac.php",
         "inc/diagonal_widget_functions.php",
    ),

如您所见,这种方法会导致块内的大量代码重复,但在某些情况下它可能是值得的(只要它被自动处理并且您不需要手动完成)。

还有 static analysis methods (not available for all app architectures) that can allow you 来确定 file1.php 是否确实需要给定的包含,从而允许您删除它。

运行 require_once 花费大约 1-2 微秒。函数声明不应该花费更长的时间,即使是那么多。如果您正在寻找性能优化,这很可能不是可行的方法。相反,您应该从执行外部 i/o 的函数开始,例如访问磁盘、数据库或网络。尝试分析到底是什么导致您的网站速度变慢,然后解决这个问题。