composer autoload 自动加载性能优化指南

在LangChain中使用DashVector进行高效向量检索 DashVector为需要处理高维向量数据的开发者提供了一种便捷且高效的解决方案。通过将其集成到LangChain生态系统中,您可以轻松实现复杂的语义搜索和数据分析功能。DashVector官方文档LangChain GitHub仓库有关DashVector的详细notebook示例。 阅读详情

转自:大后端 » composer autoload 自动加载性能优化指南

 

composer 提供的 autoload 机制使得我们组织代码和引入新类库非常方便,但是也使项目的性能下降了不少 。

composer autoload 慢的主要原因在于来自对 PSR-0 和 PSR-4 的支持,加载器得到一个类名时需要到文件系统里查找对应的类文件位置,这导致了很大的性能损耗,当然这在我们开发时还是有用的,这样我们添加的新的类文件就能即时生效。 但是在生产模式下,我们想要最快的找到这些类文件,并加载他们。

因此 composer 提供了几种优化策略,下面说明下这些优化策略。

第一层级(Level-1)优化: 生成 classmap

如何运行:

执行命令 composer dump-autoload -o (-o 等同于 --optimize)

原理:

这个命令的本质是将 PSR-4/PSR-0 的规则转化为了 classmap 的规则, 因为 classmap 中包含了所有类名与类文件路径的对应关系,所以加载器不再需要到文件系统中查找文件了。可以从 classmap 中直接找到类文件的路径。

注意事项

建议开启 opcache , 这样会极大的加速类的加载。
php5.5 以后的版本中默认自带了 opcache 。

这个命令并没有考虑到当在 classmap 中找不到目标类时的情况,当加载器找不到目标类时,仍旧会根据PSR-4/PSR-0 的规则去文件系统中查找

第二层级(Level-2/A)优化:权威的(Authoritative)classmap

执行命令:

执行命令 composer dump-autoload -a (-a 等同于 --classmap-authoritative)

原理

执行这个命令隐含的也执行了 Level-1 的命令, 即同样也是生成了 classmap,区别在于当加载器在 classmap 中找不到目标类时,不会再去文件系统中查找(即隐含的认为 classmap 中就是所有合法的类,不会有其他的类了,除非法调用)

注意事项

如果你的项目在运行时会生成类,使用这个优化策略会找不到这些新生成的类。

第二层级(Level-2/B)优化:使用 APCu cache

执行命令:

执行命令 composer dump-autoload --apcu

原理:

使用这个策略需要安装 apcu 扩展。
apcu 可以理解为一块内存,并且可以在多进程中共享。
这种策略是为了在 Level-1 中 classmap 中找不到目标类时,将在文件系统中找到的结果存储到共享内存中, 当下次再查找时就可以从内存中直接返回,不用再去文件系统中再次查找。

在生产环境下,这个策略一般也会与 Level-1 一起使用, 执行composer dump-autoload -o --apcu, 这样,即使生产环境下生成了新的类,只需要文件系统中查找一次即可被缓存 , 弥补了Level-2/A 的缺陷。

如何选择优化策略?

要根据自己项目的实际情况来选择策略,如果你的项目在运行时不会生成类文件并且需要 composer 的 autoload 去加载,那么使用 Level-2/A 即可,否则使用 Level-1 及 Level-2/B是比较好的选择。

几个提示

  • Level-2的优化基本都是 Level-1 优化的补充,Level-2/A 主要是决定在 classmap 中找不到目标类时是否继续找下去的问题,Level-2/B 主要是在提供了一个缓存机制,将在 classmap 中找不到时,将从文件系统中找到的文件路径缓存起来,加速后续查找的速度。
  • 在执行了 Level-2/A 时,表示在 classmap 中找不到不会继续找,此时 Level-2/B 是不会生效的。
  • 不论那种情况都建议要开启 opcache, 这会极大的提高类的加载速度,我目测有性能提升至少 10倍。
游戏经济数值模型的搭建过程——以标准卡牌游戏为例 一、总体规划 1.玩家分类 首先我们按照下表对玩家进行分类 付费能力即为充值额度;充值行为比如购买月卡/购买钻石;消费行为比如用钻石抽卡 在这里我们假设玩家是理性的,即玩家会以追求更高的性价比为目标进行充值与消费(即小R会优先买首冲+月卡,而不是买一个无用的无属性皮肤) 不同类型玩家之间的差异,实际上就主要由这些行为的差异而决定。 注:早期游戏制作的时候,活跃程度也是区分玩家类型的一个重要依据。不过目前现在游戏中有各种手段抹平了不同活跃玩家的差异(体力限制,活跃时间长的收益递减).. 阅读详情

相关推荐

爬虫实战:抖音视频搜索数据爬虫开发实战(附完整Python源码)

【代码】抖音视频搜索数据爬虫开发实战(附完整Python源码)

weixin_61226361的博客 3597

深入 Composer autoload

这几天看到 phphub 上面有人开始进坑怒看 laravel 源代码,于是我也凑个热闹来看下这个故事。 众所周知 composer 是现代 PHP 项目的基石, 与古老的 pear 不同, composer 并不是一款专注于系统级别 php 管理的包管理系统,而是基于项目的一个库管理系统。这就好比 npm install -g 和 npm install 的区别。而且最主要

secret 7209

手把手教你用STM32H743+FreeRTOS+LWIP搭建物联网网关(附完整工程)

本文详细介绍了如何使用STM32H743微控制器结合FreeRTOS实时操作系统和LWIP协议栈构建高性能物联网网关。内容涵盖硬件配置、FreeRTOS任务设计、LWIP协议栈优化及物联网协议集成,提供完整工程示例,助力开发者快速实现稳定可靠的网络通信枢纽。

weixin_42623010的博客 502

什么是Composer的自动加载?

Composer的自动加载(Composer autoloading)是Composer工具的一个重要功能,用于自动加载PHP类和文件,以简化PHP应用程序的依赖管理和代码组织。Composer的自动加载基于PSR-4(PHP-FIG的PHP标准建议之一)规范,它定义了一种规范化的类命名和目录结构,以便Composer可以自动加载类。Composer的自动加载极大地简化了PHP项目的依赖管理,提高了代码的可维护性。只需在需要使用的地方使用类的完整命名空间即可,Composer会自动加载类。

周祥平程序专栏 731

IBTrACS v04r01 数据提取实战:Pandas 筛选 JTWC/CMA/JMA 3机构最佳路径数据

本文详细介绍了如何使用 Pandas 高效提取和处理 IBTrACS v04r01 数据集中的最佳路径数据,特别针对 JTWC、CMA 和 JMA 三家权威机构的数据进行对比分析。通过构建可复用的数据提取函数,解决多机构数据质量差异问题,并提供高级分析与可视化应用示例,助力热带气旋研究。

clijovtbq401783153的博客 516

Qoder Quest 模式实战:从需求到代码的自动化开发

本文深入探讨Qoder Quest模式如何实现从需求到代码的自动化开发。通过编写清晰的Spec规格说明,Qoder能智能分解任务并在后台执行,生成高质量代码,大幅提升开发效率,让开发者专注于架构设计等创造性工作。

herb5的博客 1152

深入理解composer的autoload自动加载原理

转载地址:http://www.toolmao.com/composer-autoload composer的出现真是让人们眼前一亮,web开发从此变成了一件很『好玩』的事情,开发一个CMS就像在搭积木,从packagist中取出『积木』搭建在自己的代码中,一点一点搭建出一个属于自己的王国。 从此以后我基本就抛弃了require和include函数,一个项目中,这两个函数只可能

菜鸟蜗居地 2万+

保姆级教程:用TIA Portal V17给S7-1200 PLC和HMI做个联调仿真(附抢答器完整项目包)

本文提供了一份详细的TIA Portal V17教程,指导如何实现S7-1200 PLC与HMI的联合仿真开发。通过抢答器项目实例,涵盖从环境搭建、PLC编程到HMI设计的全流程,帮助工程师高效完成工业自动化系统的虚拟调试,显著提升开发效率。

weixin_30417487的博客 630

composer autoload自动加载性能优化 dump-autoload

composer 提供的 autoload 机制使得我们组织代码和引入新类库非常方便,但是也使项目的性能下降了不少 。 composer autoload 慢的主要原因在于来自对 PSR-0 和 PSR-4 的支持,加载器得到一个类名时需要到文件系统里查找对应的类文件位置,这导致了很大的性能损耗,当然这在我们开发时还是有用的,这样我们添加的新的类文件就能即时生效。但是在生产模式下,我们想要最快的找到这些类文件,并加载他们。 因此 composer 提供了几种优化策略,下面说明下这些优化策略。 第一层级(Le

猛犸象 5412

2023华为od机试C卷【最富裕的小家庭】Python 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 2043

【LaTex】3.4 立体几何

本文介绍了使用LaTeX的tikz包绘制立体几何图形的两种方法。首先展示了基础立方体的绘制代码,通过定义8个顶点坐标并连接各边完成绘制。接着讲解了scope功能在3D绘图中的应用,包括标准平面(xy、xz、yz)的绘制方法,以及任意平面的定义技巧。重点说明了如何通过定义平面原点、x和y方向单位向量来创建旋转后的绘图平面,并以45°旋转的yz平面为例演示了圆的绘制。文章提供了完整的代码示例和对应的效果图示,展示了tikz在3D绘图中的灵活性和强大功能。

你的指尖有改变世界的力量 2456

composer autoload自动加载性能优化指南

参考:https://www.phpmianshi.com/?id=204 简介 composer 提供的 autoload 机制使得我们组织代码和引入新类库非常方便,但是也使项目的性能下降了不少 。 composer autoload 慢的主要原因在于来自对 PSR-0 和 PSR-4 的支持,加载器得到一个类名时需要到文件系统里查找对应的类文件位置,这导致了很大的性能损耗,当然这在我们开发时还是有用的,这样我们添加的新的类文件就能即时生效。 但是在生产模式下,我们想要最快的找到这些类文件,并加载他

tiancityycf的专栏 391

深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总

本文简要介绍深度学习的前向传播与反向传播,以及前馈神经网络与反馈神经网络。

haopinglianlian的博客 3043

从 __autoload 到 Composer:PHP 自动加载革命,你跟上了吗?

告别手动加载烦恼,详解PHP 5.2 __autoload 的替代方案。通过Composer实现现代化自动加载,支持PSR-4标准,提升项目维护性与扩展性,适用于各类PHP应用开发。高效、灵活、易于集成,现代PHP开发必备技能,值得收藏。

QuickTrans的博客 991

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

突破PHP加载瓶颈:从SPL Autoload到Composer的终极自动加载革命

PHP自动加载机制是现代PHP开发的核心技术之一,它彻底改变了开发者管理类文件的方式。从原始的`require_once`到SPL自动加载,再到Composer的PSR标准,PHP自动加载经历了革命性的演进。本文将深入探讨PHP自动加载机制的演变历程、核心技术原理以及如何优化你的项目加载性能。 ## 🔄 PHP自动加载机制的演进历程 ### 传统require_once的痛点 在PHP早期版

gitblog_00914的博客 879

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

PHP自动加载演进之路(从__autoload到PSR-4的彻底转型)

解决PHP类自动加载难题,本文详解从PHP 5.2 __autoload替代到PSR-4标准的演进路径,涵盖spl_autoload_register用法、命名空间规范与 Composer 集成优势,提升项目结构清晰度与维护效率,值得收藏。

FastCompile的博客 901

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

(__autoload 已死?)PHP 开发者必须掌握的自动加载新标准

告别手动引入类文件烦恼,详解PHP 5.2 __autoload 的替代方案。介绍PSR-4标准与spl_autoload_register实现自动加载,提升项目结构清晰度与维护效率。现代PHP开发必备技能,值得收藏

FuncWander的博客 876

PHP 自动加载混乱终结者:如何用现代方式替代 __autoload?

告别手动引入类文件的繁琐,掌握PHP 5.2 __autoload 的替代方案。本文详解spl_autoload_register的使用场景与优势,支持多自动加载函数注册,提升代码可维护性。现代PHP开发必备技巧,值得收藏。

CompiWander的博客 842

深入理解 PSR-4 自动加载与 Composer 自动加载机制

本文系统梳理了PHP自动加载机制的发展历程,从早期手动引入、__autoload到spl_autoload_register的演进,解析PSR-0与PSR-4的核心差异。重点讲解Composer中psr-4命名空间映射、classmap类映射表及files文件注入等配置方式,揭示vendor/autoload.php生成原理,并提供实用调试方法,助力开发者高效构建可维护的现代PHP项目。

vipxieliang的博客 2057

揭秘PHP Composer自动加载机制:5分钟彻底搞懂PSR-4与类加载原理

快速掌握PHP Composer用法,深入解析PSR-4自动加载机制。涵盖命名空间映射、类文件定位原理及实际项目应用技巧,提升开发效率,避免手动引入文件的繁琐。原理清晰、操作简单,值得收藏。

FastDebug的博客 874

如何实现自动加载(Autoloading)类文件?(使用 spl_autoload_register)

如果你确实需要一个自定义的加载器(例如,用于加载一些不符合任何标准的老旧代码),你仍然可以调用。

破损的天堂鸟博客 886

Composer 生成的 autoload.php 注册了一个 SPL 自动加载函数 的庖丁解牛

并非只注册一个函数,而是根据性能需求注册了。PHP 引擎维护一个全局的。

长风破浪会有时的博客 506

告别手动引入文件:利用__autoload实现全自动加载(稀缺技术揭秘)

解决PHP文件引入繁琐问题,详解PHP 5.2魔术方法__autoload自动加载机制,适用于早期项目类库自动载入场景,提升开发效率,减少重复包含。告别手动引入文件,值得收藏。

StepLens的博客 725

__autoload函数为何被淘汰?,深度解析PHP自动加载机制的现代化实践

解决PHP类自动加载难题,深入解析PHP 5.2 __autoload 替代方案。介绍spl_autoload_register等现代自动加载机制,适用于大型项目与Composer依赖管理,提升性能与可维护性,值得收藏

FastDebug的博客 862

【PHP自动加载权威指南】:彻底告别__autoload的4种高性能替代方案

解决PHP类自动加载难题,提供PHP 5.2 __autoload 替代方案。涵盖spl_autoload_register、命名空间映射、Composer集成与自定义加载器,提升性能与维护性,适用于现代PHP开发。四种方法详解,值得收藏。

ByteVein的博客 661

PHP 5.2 到 PHP 8 的自动加载变迁(__autoload 淘汰真相曝光)

解决PHP自动加载兼容问题,揭秘PHP 5.2 __autoload 的替代方案。适用于PHP 5.2至PHP 8迁移场景,推荐使用spl_autoload_register实现灵活高效的类自动加载,支持多钩子、命名空间,提升代码可维护性,值得收藏。

IterStream的博客 602
上一篇: 开发网址大全
下一篇: win10下python3.7安装virtualenv
love小在在
博客等级 码龄20年 8粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值