资讯专栏INFORMATION COLUMN

Laravel php artisan optimize 源码解读

brianway / 2298人阅读

摘要:确定的代码位于的中这样一看,其实就是将文件删除,而这个是会自动生成的一个数组文件,这里指定了每个和的位置和命名空间的全路径等,在启动项目的时候,可以直接读取使用。所以这个命令可以拆为两步层面优化加载速度删除很清晰。

原文:https://www.codecasts.com/blo...

在部署 Laravel 项目的时候,我们经常会使用到一个提升性能的命令:

php artisan optimize

本文来看看这个命令执行背后的源码:

首先我们可以使用编辑器搜 OptimizeCommand,应该就可以找到该命令源码的所在:
IlluminateFoundationConsoleOptimizeCommand,我们关注其中的 fire() 方法:

 public function fire()
    {
        $this->info("Generating optimized class loader");

        if ($this->option("psr")) {
            $this->composer->dumpAutoloads();
        } else {
            $this->composer->dumpOptimized();
        }

        $this->call("clear-compiled");
    }

fire() 方法,默认情况下,会执行$this->composer->dumpOptimized(),而这行代码触发的其实就是composer dump-autoload --optimize,源代码可以在IlluminateSupportComposerdumpOptimized() 找到:

public function dumpOptimized()
    {
        $this->dumpAutoloads("--optimize");
    }

最后,optimize 命令还执行了call("clear-compiled"),其实就是触发php artisan clear-compiled,而很巧的是,我们也是可以直接使用编辑器搜ClearCompiledCommand 来找到源码,位于 IlluminateFoundationConsoleClearCompiledCommand 中,这里的 fire() 方法其实关键的一步就是删除了一下 cache 下的文件,我们来看:

public function fire()
    {
        $servicesPath = $this->laravel->getCachedServicesPath();

        if (file_exists($servicesPath)) {
            @unlink($servicesPath);
        }

        $this->info("The compiled services file has been removed.");
    }

通过确定 $servicesPath 的位置,再使用 @unlink($servicesPath); 删除。

确定 $servicesPath 的代码 $this->laravel->getCachedServicesPath() 位于 IlluminateFoundationApplicationgetCachedServicesPath 中:

 public function getCachedServicesPath()
    {
        return $this->bootstrapPath()."/cache/services.php";
    }

这样一看,其实就是将 bootstrap/cache/services.php 文件删除,而这个 services.php 是 Laravel 会自动生成的一个数组文件,这里指定了每个 Providers 和 Facades 的位置和命名空间的全路径等,在启动 Laravel 项目的时候,可以直接读取使用。

所以这个命令可以拆为两步:

1.composer dump-autoload --optimize // composer 层面优化加载速度
2.php artisan clear-compiled // 删除 bootstrap/cache/services.php

很清晰。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23120.html

相关文章

  • 源码解读php artisan serve

    摘要:原文来自在学习的时候,可能很多人接触的第一个的命令就是,这样我们就可以跑起第一个的应用。本文来尝试解读一下这个命令行的源码。 原文来自:https://www.codecasts.com/blo... 在学习 Laravel 的时候,可能很多人接触的第一个 artisan 的命令就是:php artisan serve,这样我们就可以跑起第一个 Laravel 的应用。本文来尝试解读一...

    Loong_T 评论0 收藏0
  • 源码解读Laravel php artisan route:cache

    摘要:然而,本文的讨论重点,还是背后的源码,是怎么做到这一步的。从哪开始看源码位于你还是可以使用编辑器搜,就可以看到源码了。第三步序列化所有路由注册映射关系,还是在的方法中上面的方法位于中的中。所以到这里,的源码解读就完成了。 学 Laravel 和 Vuejs 你真应该来 codecasts.com ! Laravel ​route:cache 可以直接缓存路由文件,这样其实可以在一定程度...

    wangzy2019 评论0 收藏0
  • Laravel Service Provider 开发时设置延迟加载时遇到的问题

    摘要:因实际项目需求,近日在开发包的时候,发现设置属性设置为时,会导致在方法中注册的无效。研究源码在中注册无效,但是在其他中注册有效,说明是其他问题。所以切记如果准备采用延迟加载时,严禁进行注册等系列操作。严禁在延迟加载的注册和。 因实际项目需求,近日在开发 laravel-database-logger 包的时候,发现设置 ServiceProvider defer 属性设置为 true ...

    Zhuxy 评论0 收藏0
  • Laravel 源码解读php artisan make:auth

    摘要:添加路由在方法中,通过下面几行代码添加路由注意这个参数,就是将这个文件的内容附加在原来路由文件的后面,并不会将原来的路由清零。 学 Laravel 和 Vuejs,你真应该来 codecasts.com ,有免费高质量视频! 在 Laravel 5.2 的时候,官方给我们提供了 make:auth 命令,这个命令使得我们在执行一条命令的情况下实现用户注册和登录,忘记密码,找回密码的过程...

    xorpay 评论0 收藏0
  • Laravel 5 程序优化技巧

    摘要:使用即时编译器和都能轻轻松松的让你的应用程序在不用做任何修改的情况下,直接提高或者更高的性能,之前做个一个实验,具体请见使用提升程序性能。 本文经授权转自 PHPHub 社区 说明 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能。 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论。 这里是简单的列表: 配置信...

    habren 评论0 收藏0

发表评论

0条评论

brianway

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<