【问题标题】:Composer optimization level 1Composer 优化级别 1
【发布时间】:2018-10-06 16:48:45
【问题描述】:

在作曲家的autoload optimization page:

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

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

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

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

【问题讨论】:

    标签: php composer-php autoload psr-4


    【解决方案1】:

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

    例子:

    "autoload": {
        "psr-4": {
            "app\\": "src",
            "app\\db\\": "src/drafts/db"
        }
    },
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 2014-02-22
      相关资源
      最近更新 更多