有些页面需要一个简单的重新加载,有时很长(4到45秒)。不幸的是延迟是不可预测的。首先我认为这当然是我做错了什么,但经过进一步的调查,我发现延迟功能。
在vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php
中函数process()
运行这个代码$service->authenticate($request);
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$service = $this->getAuthenticationService($request);
try {
$result = $service->authenticate($request);
^^^^^^^^ This call needs between 0.01 and 45 seconds
} catch (AuthenticationRequiredException $e) {
$body = new Stream('php://memory', 'rw');
以下是我的执行时间测量的一些示例转储:
执行时间较长的/api/shop
的转储;向右滚动以查看每个时间快照之间的增量时间:
[2020-11-01T16:58:02+00:00] /api/shop/ - /vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php :0103 - Delta time:0.04342
[2020-11-01T16:58:14+00:00] /api/shop/ - /vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php :0107 - Delta time:11.81272
[2020-11-01T16:58:14+00:00] /api/shop/ - /vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php :0121 - Delta time:11.81295
然后,17秒后[没有变化,只是重新加载页面],没有延迟:
[2020-11-01T16:58:31+00:00] /api/shop/ - /vendor/cakephp/cakephp/src/Http/Runner.php :0071 - Delta time:0.03756
[2020-11-01T16:58:31+00:00] /api/shop/ - /vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php :0103 - Delta time:0.04211
[2020-11-01T16:58:31+00:00] /api/shop/ - /vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php :0107 - Delta time:0.04506
你知道是什么原因吗?这是非常令人沮丧的,因为它是完全不可预测的。在上面的真实的例子中,在几秒钟内有一个巨大的延迟,然后它工作了3-4次,然后突然它再次延迟。如前所述,我没有做任何事情;正在重新加载页面。
蛋糕PHP 4.1.4
1条答案
按热度按时间j7dteeu81#
我也在CakePHP Github Issues下发布了这个案例。CakePHP的成员othercorey给了我检查
Authentication\Authenticator\SessionAuthenticator
的建议,在这里我找到了原因:以
vendor/cakephp/cakephp/src/Http/Session.php
为单位--〉在函数
start()
中--〉调用
if (!session_start()) {
完整代码:
session_write_close()
后,页面加载〈2秒。当我得到一些时间我会检查如果会话存储在数据库中可能是另一种解决方案。