Composer 优化级别 1

rin*_*t.6 6 php autoload composer-php psr-4

在 Composer 的自动加载优化页面上:

注意:不应在开发中启用任何这些优化,因为它们在添加/删除类时都会导致各种问题。在开发环境中,性能的提升并不值得。

我绝对可以在开发环境中看到 2 级优化(权威类映射)的问题,但如果我遵循 PSR-4 标准,我无法确定1 级优化(类映射生成)的问题是什么。

  • 如果我添加一个未在类映射中生成的类,它将回退到 PSR-4 规则来查找该类。
  • 如果我将一个类重构(移动)到不同的命名空间,它也不会在类映射中找到它并尝试使用 PSR-4 规则来解析它。

对于符合 PSR-4 的项目,在开发环境中生成的类映射有哪些潜在问题?

rob*_*006 0

如果您将类移动到不同的目录而不更改命名空间,级别 1 优化可能会产生问题。由于可能有多种方法来解析单个名称空间,因此 Composer 将正确处理此类更改,但当您有过时的类映射时可能会失败。

例子:

"autoload": {
    "psr-4": {
        "app\\": "src",
        "app\\db\\": "src/drafts/db"
    }
},
Run Code Online (Sandbox Code Playgroud)

类可以按或app\db\Entity放置,并且 Composer 将按此顺序搜索类文件。通常,如果你将一个文件从Composer中移动,最终会找到这个类。但是如果你有过时的类映射,Composer 会盲目地包含不存在的文件,你会得到一个致命错误。src/drafts/db/Entity.phpsrc/db/Entity.phpsrc/drafts/dbsrc/db

除了这个apcu-autoloader选项还会缓存未命中。因此,如果您请求一个不存在的app/db/NewEntity类,然后添加此类,Composer 将不会检测到此更改,因为它已缓存此类不存在的信息。

这些通常是边缘情况,通常您永远不会注意到这些细微差别。但这仍然是可能的,并且开发环境上不明显的性能提升不值得冒着浪费几个小时来调试 Composer 自动加载器的缓存相关问题的风险。