swof代码中的首页代码来示范

2021-10-08 15:25:57 浏览数 (1)

swof代码中的首页代码来示范

代码语言:javascript复制
 */public function index(): Response{    /** @var Renderer $renderer */    $renderer = Swoft::getBean('view');    $content  = $renderer->render('home/index');    $end_time = microtime(true);    return context()->getResponse()->withContentType(ContentType::HTML)->withContent($content);}

当我们想对上边的代码加一个运行时间是,按照之前的写法,我们可能会写成这样:

代码语言:javascript复制
/** * @RequestMapping("/") * @throws Throwable */public function index(): Response{    $begin_time = microtime(true); // 获取一个毫秒时间    /** @var Renderer $renderer */    $renderer = Swoft::getBean('view');    $content  = $renderer->render('home/index');    $end_time = microtime(true); // 在获取一个毫秒时间    vdump("运行时间为:", round(($end_time - $begin_time) * 1000, 3)); // 拿开始时间减去结束时间 乘以1000 得到一个描述,在保留3位小数    return context()->getResponse()->withContentType(ContentType::HTML)->withContent($content);}

运行结果是这样的:(在控制台中查看结果)

代码语言:javascript复制
PRINT ON AppHttpControllerHomeController(41):string(16) "运行时间为:"float(2.058)

这样有个缺点就是,只是计算了当前$bengin_time$end_time之间代码的运算时间,并且我们修改了原方法,那么我们如何才能不通过修改源代码的方式,也能得到运算时间呢?

我们首先先顶一个切面类,类似于这样:

代码语言:javascript复制
<?php declare(strict_types=1); namespace AppAspect; use AppHttpControllerHomeController;use SwoftAopAnnotationMappingAfter;use SwoftAopAnnotationMappingAspect;use SwoftAopAnnotationMappingBefore;use SwoftAopAnnotationMappingPointBean;use SwoftAopPointJoinPoint; /** * @Aspect(order=1) # 优先级, 数字越小则优先执行。 * * @PointBean(include={HomeController::class}) # 这里指的是定义切入目标。注意需要use引入一下这个类 */class YingxiaozhuAspect {     /** @var float 执行开始 */    private $time_begin;     /**     * 前置通知     *     * @Before()     */    public function beforeAdvice()    {        // 起点时间        $this->time_begin = microtime(true);    }     /**     * 后置通知     *     * @After()     *     * @param JoinPoint $joinPoint     */    public function afterAdvice(JoinPoint $joinPoint)    {        /** @var float 执行结束 */        $timeFinish = microtime(true);        $method = $joinPoint->getMethod();        $runtime = round(($timeFinish - $this->time_begin) * 1000, 3);        echo "{$method} 方法,本次执行时间为: {$runtime}ms n";    }}

重启服务,访问首页查看一下结果:

代码语言:javascript复制
index 方法,本次执行时间为: 4.072ms 

0 人点赞