如何优化PHP使用模态框时嵌套include重复加载同一文件的性能问题
PHP公共文件重复加载优化方案
当前场景的性能损耗主要来自8次重复的磁盘IO读取、以及公共文件内代码(比如函数、常量定义)重复执行可能带来的额外开销,严重时还会触发函数/常量重定义的致命错误,优化可以从以下几个方向落地:
- 最低成本修改:将8个业务.php文件中引入公共文件的
include/require语句,替换为include_once/require_once
PHP的*_once类引入函数会自动校验目标文件是否已经被加载过,确认已加载则直接跳过后续加载逻辑,无需调整现有文件引入结构,单文件修改仅需替换关键字即可,示例修改如下:// 原业务文件内的公共文件引入语句 require_once $common_path . '公共文件名.php'; - 结构优化:在index.php中提前统一加载公共文件
既然8个业务文件都依赖该公共文件,可以在index.php引入这8个业务文件之前,先一次性加载公共文件,之后直接删除8个业务文件内的公共文件引入语句即可,完全消除重复校验、重复加载的开销,调整后的index.php引入逻辑示例:// 第一步先引入公共依赖 include $common_path . '公共文件名.php'; // 再引入业务文件 include $path_qa . $LTO_settlement_updates . 'add_LTO_settlement_updates.php'; include $path_qa . $LTO_settlement_updates . 'search_LTO_settlement_updates.php'; include $path_qa . $LTO_settlement_updates . 'search_upd_LTO_settlement_updates.php'; include $path_qa . $LTO_settlement_updates . 'search_list_LTO_settlement_updates.php'; include $path_qa . $LTO_settlement_updates . 'action_LTO_settlement_updates.php'; include $path_qa . $LTO_settlement_updates . 'upd_results_LTO_settlement_updates.php'; include $path_qa . $LTO_settlement_updates . 'update_LTO_settlement_updates.php'; include $path_qa . $LTO_settlement_updates . 'list_results_LTO_settlement_updates.php'; - 进阶性能优化:开启Opcache扩展
生产环境开启PHP官方的Opcache扩展后,所有PHP脚本首次执行时的编译结果会缓存到共享内存中,后续不管是首次加载还是重复校验加载,都不需要再读取磁盘文件,也不需要重复编译,能大幅降低文件引入的整体开销。 - 如果公共文件为类定义文件:使用自动加载机制
如果公共文件是类定义文件,可以通过spl_autoload_register注册自动加载规则,不需要在业务代码中手动引入依赖,PHP会在类首次被使用时自动加载对应的文件,完全避免手动引入带来的重复加载问题。
内容的提问来源于stack exchange,提问作者mayales
相关产品推荐
相关产品推荐

