检查服务器端或客户端是否存在某些 Web 资源是否更好
Is it better to check if some web resources exists in the server-side or in the client-side?
假设我想使用数据库中某些行的 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,以便用户看不到损坏的图像。
但还有另一种方法,始终向客户端 Web 浏览器提供生成的 URL 存在或不存在。然后,如果未找到图像(客户端 Web 浏览器收到 404 错误和损坏的图像),请在客户端使用 javascript 替换默认 URL:
Javascript Code
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')" />
那么问题来了:
建议使用哪种方法在我的 Web 服务器中获得更好的性能,这样它就不会因为许多用户将访问该网页而崩溃?(假设列出来自生成的 URL 的图像的网页每天将收到 100,000 个请求)。
最好和最优化的方法是使用异步服务从服务器端执行此作业。
将你的 php 代码放入一个文件中,例如:cronscript.php并每天执行一次或两次克龙工作 . 您的服务器将启动任务,您将避免检查每次客户端访问。
此 cronscript.php 必须激活或停用数据库上图像可用性的标志。
相关文章:
- 是否存在React Native“;WEB代码安全防护”;
- 在chrome web商店中打开时,是否有允许执行内容/后台脚本的解决方案
- 是否有任何开源web应用程序具有良好的QUnit(或JSUnit)测试用例
- Web 工作线程中的同步 XHR 请求是否仍会锁定浏览器
- 是否可以将 ASP.NET Web 应用程序上载到 VMware 上的虚拟 2008 服务器上
- 是否可以在没有 .NET 4.5 主机的情况下使用当前 Web 套接字
- Web视图中的远程网站是否可以与Phonegap结合使用
- 从 Web Worker 执行 AJAX 请求是否可行
- 使用Java脚本跟踪网页中是否有Ajax请求,或者通过Selenium Web驱动程序拦截XMLHttpRequest
- JQuery在执行速度上是否有任何缺点,这些缺点在大规模的web应用程序中可能会很明显
- 是否可以在没有视图状态和回发的情况下使用asp.net web表单
- 使用JSONP内容压缩web服务响应是否有效
- web应用程序是否可以打开客户端上存在的pdf文件
- AngularJS web服务是否应返回响应的深层副本
- HTML5 Metro应用程序是否可能使用PHP中的web服务
- 没有这样的元素:找不到元素:正在验证web元素是否丢失
- 是否有JavaScript或可能的Python/Django web服务来对街道地址进行地理编码
- web js中是否存在等待或睡眠命令
- 无法连接到网络服务器.验证 Web 服务器是否正在运行,并且传入的 http 请求未被防火墙阻止
- JqueryMobile布局是否同时在Web和移动设备上运行