gpt4 book ai didi

php - Symfony - 图像响应 - 速度,优化

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:21 24 4
gpt4 key购买 nike

我在我的 Controller 中生成动态图形:

  1. 如果文件不存在(唯一文件名)则生成图形并保存

  2. 返回 RedirectResponse($url)

(3.我也试过:

    $fp = fopen($url, "rb");
$str = stream_get_contents($fp);
fclose($fp);

$response = new Response($str, 200);
$response->headers->set('Content-Type', 'image/png');
return $response;

)

我需要它为用户动态生成用户栏 [在此图形上,如果我的网站上进行了一些更改,一些文本将自动更新]。

所以对我来说重要的是这个脚本可以快速运行并且不会杀死我的服务器/带宽。为了实现这一点,我在存储所有生成的图形的地方做了缓存。但是我遇到了速度问题,我上面描述的解决方案非常慢,当我用开发人员工具 (F12) 在 chrome 中测试它时,它告诉我这两个解决方案 (2. 和 3.) 都需要大约 1 秒(当相同的图形 [没有 Controller 等。只需将 url 指向 .png] 加载 44 毫秒)。

因此,如果仅对我而言,每个图形大约需要 1 秒,那么如果例如 1000 个用户将同时生成此图形,我认为它会减慢我的网站。

请帮忙,你知道有什么更快的方法吗?

附言。重定向不是我最想要的东西,因为我更愿意保留 url 原样,例如 smth/username/userbar/insted of smth/img/userbars/cache/blabla.png。但如果它会快得多,那么我可以忍受 :)。

编辑:要明确:我不是在寻找缓存图像的解决方案,我的问题是通过 Controller 返回图像(已经生成的图像,仅来自 ftp)大约需要 1 秒,而通常情况下,例如

           <img src="direct_url_to_png"> 

大约需要 44 毫秒。

最佳答案

您可以使用 Varnish为了缓存图像,Varnish 是一个位于网络服务器前面的 HTTP 代理。配置它需要一些时间和知识,但它是一个非常的好软件。

或者,您可以使用 shared memory 在内存中缓存图像, memcache , 或 redis .这可能不如 Varnish 有效,但它会节省文件系统 IO。

您应该测试花费最多时间的地方,我希望它是文件 I/O 和 PHP 解析时间的组合,但正如我们用荷兰语所说的那样,“测量就是知道”;)

这里有一个简单的例子,可以让您大致了解如何做到这一点:

<?php
class MyClass
{
function __construct()
{
$this->timer = array(
'start' => microtime(True);
);
}

function myAction()
{
$this->timer['startaction'] = microtime(True);

$fp = fopen($url, "rb");
$this->timer['startstream'] = microtime(True);
$str = stream_get_contents($fp);
fclose($fp);
$this->timer['endstream'] = microtime(True);

$response = new Response($str, 200);
$response->headers->set('Content-Type', 'image/png');

$this->timer['endaction'] = microtime(True);
print_r($this->timer)
return $response;
}
}

另一个可能的选择是使用 HTML/CSS 来显示图表。这可能有效也可能无效,具体取决于您的图表的外观,但我过去使用过它并且效果很好。

关于php - Symfony - 图像响应 - 速度,优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149418/

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