php重启webserver,php内置的webserver缓存问题

博主在使用PHP内置Web服务器进行项目测试时,尝试实现一个资源缓存机制以减轻服务器负载。通过router.php文件处理资源请求,首次加载资源返回HTTP200,后续刷新应返回HTTP304。然而,实际操作中,请求处理时间在5ms到307ms间随机变化,表现出不稳定的行为。问题可能是资源并未正确缓存导致。主机配置为Intel i7 CPU,6GB RAM,Windows系统和SSD驱动器。
摘要由CSDN通过智能技术生成

我正在开发一个涉及

PHP内置Web服务器的测试项目,我正在测试一些想法.

我想为常用资源(png,jpg,json,txt等)实现我自己的缓存机制,以减少php中内置服务器的负载.

我像这样启动内置服务器:

php -S 127.0.0.1:80 -t public router.php

因此,内置服务器的文档根目录设置为public,它运行router.php(因为我正在考虑实现一个简单的重写功能).

这是我的router.php文件的内容:

// Register request uri

$requestUri = isset($_SERVER['REQUEST_URI'])

? $_SERVER['REQUEST_URI']

: '/';

// Handle app resources with caching

if (preg_match('/\.(?:png|jpg|jpeg|gif|xml|json|css|eot|svg|otf|ttf|woff|woff2|scss|less|txt|ico)$/', $requestUri))

{

// Generate file name

$fileName = __DIR__ .'/public'. $requestUri;

// Parse file data

$lastModified = filemtime($fileName);

$etagFile = md5_file($fileName);

$ifModifiedSince = (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);

$etagHeader = (isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);

// Set caching header

header('Last-Modified: '. gmdate('D, d M Y H:i:s', $lastModified) .' GMT');

header('Etag: '. $etagFile);

header('Cache-Control: public');

// Check if the requested resource has changed

if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $lastModified || $etagHeader == $etagFile)

{

// File has not changed

header('HTTP/1.1 304 Not Modified');

exit;

}

else

{

// Parse requested resource's mime type

$finfo = new finfo(FILEINFO_MIME);

$mime_type = $finfo->buffer(

file_get_contents($fileName, false, null, -1, 64),

FILEINFO_MIME_TYPE

);

// Serve requested resource

header('Content-Type: '. $mime_type);

header('Content-Length: '. filesize($fileName));

@readfile($fileName);

$finfo = null;

exit;

}

}

// Parse requested page & action

list ($page, $action) =

array_pad(array_values(array_filter(explode('/', $requestUri, 3), 'strlen')), 2, 'index');

if ($page == 'index') $page = 'server';

// Test - to do rest of routing

var_dump('page = '. $page);

var_dump('action = '. $action);

// include 'app/'. $page .'/'. $action .'.php';

?>

因此,这是资源的第一次加载,因此服务器按预期返回HTTP 200响应的资源,大约需要307ms:

ZgalM.png

现在,如果按F5重新加载页面,服务器将按预期返回HTTP 304(未修改),请求大约需要5ms(非常棒!):

bVXJc.png

如果我第三次按F5,服务器仍会按预期返回HTTP 304(未修改),但是这次请求再次花费大约306ms(就好像资源没有被缓存):

38naF.png

如果我一直按下F5,处理请求的时间会在5米到大约307毫秒之间随机交替.

任何想法为什么它的行为像这样?一旦资源被缓存,它不应该不断返回304并处理请求大约5ms?为什么这种行为是零星的?

我确实看到返回的内容大小是225字节(当它知道数据被加入时),我无法弄清楚瓶颈在哪里与请求处理时间有关.我的主机正在运行带有Intel i7 CPU,6GB RAM和Windows的Windows. SSD驱动器.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值