美文网首页
【Composer】自动加载 autoload

【Composer】自动加载 autoload

作者: 马蹄哒 | 来源:发表于2020-03-09 19:15 被阅读0次

    PHP类库的自动加载主要是由composer来实现的。

    • 项目安装composer之后(composer install),项目根目录会增加一个vendor目录,里面有一个autoload.php文件,接下来在项目入口引入这个文件即可支持自动加载。

    autoload介绍

    Composer支持四种自动加载模式:PSR-4(推荐)、PSR-0、classmap、files

    • 推荐使用PSR-4,此方式无需在每次新增类后手动修改composer.json配置

    本文只讨论PSR-4的加载方式,如下所示psr-4定义了命名空间到项目目录(与vendor目录同级相对路径)的映射,命名空间Foo\\Bar\\Baz对应的文件将从src/Bar/Baz.php加载。

    • 命名空间必须以\\结尾,避免相同前缀的冲突,FooFooBar是有区别的
    #composer.json autoload配置
    {
        "autoload": {
            "psr-4": {
                "Foo\\": "src/"
            }
        }
    }
    
    • 修改完composer.json的autoload字段后,需手动更新自动加载:
    composer dumpautoload -o
    

    autoload优化

    使用自动加载会增加一些开销,一些大型框架每个请求会有50~100ms的延时。

    • 优化策略
      不要在开发环境下使用这些优化策略
    优化方式 等级 说明
    composer dump-autoload -o Level-1 将 PSR-4/PSR-0 的规则转化为了 classmap 的规则;当加载器找不到目标类是,会按照PSR-4/PSR-0去文件系统查找(速度慢)
    composer dump-autoload -a Level-2/A 自动执行Level 1命令,生成classmap;但当找不到目标类时不会去文件系统查找
    composer dump-autoload -apcu Level-2/B 不会自动生成classmap,只是启用APCu缓存来存储文件系统中找到类的结果;生产环境中一般与Level-1结合使用:composer dump-autoload -o --apcu

    参考:
    https://getcomposer.org/doc/04-schema.md#autoload
    https://getcomposer.org/doc/articles/autoloader-optimization.md
    composer autoload 自动加载性能优化指南

    相关文章

      网友评论

          本文标题:【Composer】自动加载 autoload

          本文链接:https://www.haomeiwen.com/subject/lfgpdhtx.html