测试脚本:
#!/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
但是我只需要一个答复,所以这并不重要。
纵观构造的Response
,它几乎没有做任何事情。它只是初始化了一些变量。
2毫秒是我响应时间的重要部分,如果可能的话,我真的很想降低响应时间。
遇到此类问题时,通常应使用XDebug进行剖析:http ://www.xdebug.org/docs/profiler
通过向您显示每种方法花费了多少时间以及调用了多少次,它会告诉您“问题”的确切位置。
在这种情况下,“问题”是第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";
3.57 ms
0.0 KiB
0.32 ms
0.0 KiB
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句