Composer 优化级别 1
Composer optimization level 1
关于作曲家的autoload optimization page:
Note: You should not enable any of these optimizations in development as they all will cause various problems when adding/removing classes. The performance gains are not worth the trouble in a development setting.
我在开发环境中肯定能看到2级优化(权威class图)的问题,但我无法确定level 1 optimizations(class地图生成)如果我遵循PSR-4标准。
- 如果我在 class 地图中添加未生成的 class,它将回退到 PSR-4 规则以查找 class。
- 如果我将 class 重构(移动)到不同的命名空间,它也不会在 class 映射中找到它并尝试使用 PSR-4 规则解析它。
在符合 PSR-4 的项目的开发环境中生成的 class 地图有哪些潜在问题?
如果您将 class 移动到不同的目录而不更改命名空间,则 1 级优化可能会产生问题。由于可能有多种方法来解析单个命名空间,此类更改将由 Composer 正确处理,但当您使用过时的 classmap.
时可能会失败
示例:
"autoload": {
"psr-4": {
"app\": "src",
"app\db\": "src/drafts/db"
}
},
Class app\db\Entity
可以放在 src/drafts/db/Entity.php
或 src/db/Entity.php
中,Composer 将按此顺序搜索 class 文件。通常,如果您将文件从 src/drafts/db
移动到 src/db
,Composer 最终会找到这个 class。但是如果你有过时的 classmap,Composer 会盲目地包含不存在的文件,你会得到一个致命的错误。
此外 apcu-autoloader
选项也会缓存未命中。因此,如果您请求不存在的 app/db/NewEntity
class,然后添加此 class,Composer 将不会检测到此更改,因为它已缓存此 class 不存在的信息.
这些通常是边缘情况,通常您永远不会注意到这些细微差别。但这仍然是可能的,并且开发环境中不明显的性能提升不值得冒着浪费几个小时调试 Composer 自动加载器缓存相关问题的风险。
关于作曲家的autoload optimization page:
Note: You should not enable any of these optimizations in development as they all will cause various problems when adding/removing classes. The performance gains are not worth the trouble in a development setting.
我在开发环境中肯定能看到2级优化(权威class图)的问题,但我无法确定level 1 optimizations(class地图生成)如果我遵循PSR-4标准。
- 如果我在 class 地图中添加未生成的 class,它将回退到 PSR-4 规则以查找 class。
- 如果我将 class 重构(移动)到不同的命名空间,它也不会在 class 映射中找到它并尝试使用 PSR-4 规则解析它。
在符合 PSR-4 的项目的开发环境中生成的 class 地图有哪些潜在问题?
如果您将 class 移动到不同的目录而不更改命名空间,则 1 级优化可能会产生问题。由于可能有多种方法来解析单个命名空间,此类更改将由 Composer 正确处理,但当您使用过时的 classmap.
时可能会失败示例:
"autoload": {
"psr-4": {
"app\": "src",
"app\db\": "src/drafts/db"
}
},
Class app\db\Entity
可以放在 src/drafts/db/Entity.php
或 src/db/Entity.php
中,Composer 将按此顺序搜索 class 文件。通常,如果您将文件从 src/drafts/db
移动到 src/db
,Composer 最终会找到这个 class。但是如果你有过时的 classmap,Composer 会盲目地包含不存在的文件,你会得到一个致命的错误。
此外 apcu-autoloader
选项也会缓存未命中。因此,如果您请求不存在的 app/db/NewEntity
class,然后添加此 class,Composer 将不会检测到此更改,因为它已缓存此 class 不存在的信息.
这些通常是边缘情况,通常您永远不会注意到这些细微差别。但这仍然是可能的,并且开发环境中不明显的性能提升不值得冒着浪费几个小时调试 Composer 自动加载器缓存相关问题的风险。