gpt4 book ai didi

php - 为什么构建 Symfony Response 需要这么长时间,使用这么多内存,我该怎么办?

转载 作者:可可西里 更新时间:2023-10-31 22:54:17 24 4
gpt4 key购买 nike

测试脚本:

#!/usr/bin/php
<?php
require __DIR__.'/../www/autoload.php';

$start = microtime(true);
$mem = memory_get_usage(true);
$resp = new \Symfony\Component\HttpFoundation\Response();
$elapsed = (microtime(true)-$start)*1000;
$used_mem = memory_get_usage(true)-$mem;
echo number_format($elapsed,2)." ms\n";
echo number_format($used_mem/1024,1)." KiB\n";

输出:

2.25 ms
256.0 KiB

有趣的是,如果我把它放在一个循环中,成本并没有增加太多:

$resp = [];
for($i=0; $i<100; ++$i) {
$resp[] = new \Symfony\Component\HttpFoundation\Response();
}

6.73 ms
512.0 KiB

但我只需要一个回应,所以这并不特别重要。

查看the constructor对于 Response,它几乎不做任何事情。它只是初始化了一些变量。

2 毫秒是我响应时间的重要部分,如果可能的话,我真的很想降低它。

最佳答案

当您遇到此类问题时,您通常应该使用 XDebug 进行分析:http://www.xdebug.org/docs/profiler

它会通过显示每个方法花费了多少时间以及它被调用了多少次来准确地告诉您“问题”出在哪里。

在这种情况下,“问题”是 Line 206 , 构造\DateTime 对象,然后构造\DateTimeZone 对象。

要消除所有其他因素,请确保首先不会发生自动加载,因此请将您的测试修改为:

<?php

require 'vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php';
require 'vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/HeaderBag.php';
require 'vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ResponseHeaderBag.php';

$start = microtime(true);
$mem = memory_get_usage(true);
$resp = new \Symfony\Component\HttpFoundation\Response();
$elapsed = (microtime(true)-$start)*1000;
$used_mem = memory_get_usage(true)-$mem;
echo number_format($elapsed,2)." ms\n";
echo number_format($used_mem/1024,1)." KiB\n";

在我的机器上用 206 行测试

3.57 ms
0.0 KiB

在我的机器上用注释掉的 206 行测试

0.32 ms
0.0 KiB

关于php - 为什么构建 Symfony Response 需要这么长时间,使用这么多内存,我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27157675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com