gpt4 book ai didi

javascript - 检查某些Web资源是否存在于服务器端或客户端更好?

转载 作者:行者123 更新时间:2023-12-03 11:03:24 25 4
gpt4 key购买 nike

假设我想使用数据库中某些行的 ID 从外部域检索网页中列表的 12 个图像。例如,对于 ID 为 1,2,3,4 的行,呈现的网页中的 HTML 将为:

<img src="https://external.domain.com/images/product/1.jpg" />
<img src="https://external.domain.com/images/product/2.jpg" />
<img src="https://external.domain.com/images/product/3.jpg" />
<img src="https://external.domain.com/images/product/4.jpg" />

但是其中一些图像不可用,因为该站点没有我的数据库中所有行的所有图像。我进行了研究,可以使用如下代码检查服务器端是否有任何请求返回 404 错误:

PHP 代码

public function existeRecurso($url)
{
$recurso = curl_init($url);
curl_setopt($recurso, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($recurso, CURLOPT_NOBODY, TRUE);
// Hacer la petición para obtener los headers y saber si el resultado será un error 404
$respuesta = curl_exec($recurso);
$codigoHTTP = curl_getinfo($recurso, CURLINFO_HTTP_CODE);
curl_close($recurso);
if ($codigoHTTP == 404) {
return false;
} else {
return true;
}
}

之后,我在使用 PHP 渲染 HTML 时使用 PHP 函数,如果图像不存在,我会将 URL 替换为默认 URL,这样用户就看不到损坏的图像。

但还有另一种方法,始终将生成的 URL 存在或不存在提供给客户端 Web 浏览器。然后,如果找不到图像(客户端 Web 浏览器收到 404 错误和损坏的图像),请在客户端使用 javascript 将 URL 替换为默认 URL:

Javascript代码

function repararImgRota(img, recurso) {
img.onerror = '';
img.src = '/images/default/'+recurso;
return true;
}

PHP 生成的 HTML 代码

<img src="https://external.domain.com/images/product/1.jpg" onerror="repararImgRota(this, 'producto.jpg')" />
<img src="https://external.domain.com/images/product/2.jpg" onerror="repararImgRota(this, 'producto.jpg')" />
<img src="https://external.domain.com/images/product/3.jpg" onerror="repararImgRota(this, 'producto.jpg')" />
<img src="https://external.domain.com/images/product/4.jpg" onerror="repararImgRota(this, 'producto.jpg')" />

那么问题来了:

建议使用哪种方法来提高我的网络服务器的性能,使其不会因为许多用户将访问该网页而崩溃?(假设列出来自生成的 URL 的图像的网页将每天收到 100,000 个请求)。

最佳答案

最好、最优化的方法是使用异步服务从服务器端执行此作业。

将您的 php 代码放入文件中,例如:cronscript.php 并每天执行一次或两次 cron jobs 。您的服务器将启动任务,您将避免检查每个客户端访问。

此 cronscript.php 必须激活或停用数据库上图像可用性的标志。

关于javascript - 检查某些Web资源是否存在于服务器端或客户端更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27973262/

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