Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP图像动态调整与存储调整大小的图像_Php_Performance_Thumbnails_Image Resizing - Fatal编程技术网

PHP图像动态调整与存储调整大小的图像

PHP图像动态调整与存储调整大小的图像,php,performance,thumbnails,image-resizing,Php,Performance,Thumbnails,Image Resizing,我正在建立一个图像共享网站,希望了解使用PHP动态调整图像大小和存储大小调整后的图像的利弊 哪个更快 哪个更可靠 这两种方法在速度和性能上的差距有多大 请注意,无论哪种方式,图像都会通过PHP脚本进行统计,如视图,或者如果允许热链接等。。。因此,如果我选择存储调整大小的图像,它将不是图像的直接链接 我将感谢您的评论或任何关于这个主题的有用链接 这听起来像是过早的优化。你知道你的网站会有多少用户/你的服务器会有多少计算量吗?使用最简单的(维护方面的)选项,即动态调整大小,直到性能成为一个问题,然后

我正在建立一个图像共享网站,希望了解使用PHP动态调整图像大小和存储大小调整后的图像的利弊

哪个更快

哪个更可靠

这两种方法在速度和性能上的差距有多大

请注意,无论哪种方式,图像都会通过PHP脚本进行统计,如视图,或者如果允许热链接等。。。因此,如果我选择存储调整大小的图像,它将不是图像的直接链接


我将感谢您的评论或任何关于这个主题的有用链接

这听起来像是过早的优化。你知道你的网站会有多少用户/你的服务器会有多少计算量吗?使用最简单的(维护方面的)选项,即动态调整大小,直到性能成为一个问题,然后从中找出要做的事情


如果重新缩放的图像可能会被反复点击,那么对其实施某种服务器端缓存可能是一个不错的主意,但我认为这不需要扩展到显式预渲染。

动态调整大小可能是一个代价高昂的过程(时间方面),具体取决于图像的初始大小。我已经在生产系统中完成了这项工作,但是当我有选择的时候,我非常喜欢缓存到磁盘。毕竟,磁盘空间很便宜,加载时间是网络上的一切。即使您只是将缩略图缓存为特定大小,并在其他任何地方进行动态调整大小,也可以大大缩短库样式图像列表的加载时间

我强烈建议您缓存图像,不要动态调整大小

图像的大小调整对服务器来说是非常CPU密集和内存消耗的

如果你有一个动态缩放的图像库,页面将缓慢加载图像,比如说3-10秒,这取决于原始文件大小

当调整大小时,它需要大约3字节的内存。因此,如果要调整图像1000x1000的大小,则需要大约3MB的内存。如果你的一个网页上有许多这样的动态调整图像,比如说20个,那么你的服务器将需要大约60MB的RAM。 也许不是,因为大多数客户端一次只请求4个图像,但是12MB对于页面负载来说仍然是一个很大的数字。我只会在源图像小于100x100像素时动态缩放


提示:缩放和保存拇指的一个很好的库是

这绝对是无与伦比的事情。

事实上,动态调整图像大小就像在自己的服务器上运行DoS攻击。调整一个普通图像的大小比为php脚本提供一个普通请求需要更多的CPU和RAM。这已经对性能产生了巨大影响。然而,通常的缩略图并不是单独显示的,而是以数字显示的。因此,虽然只显示一个库页面,但您创建了几十个重载进程,将服务器负载增加了十倍或更多

快速肮脏的测试来证明我的话: 让我们尝试调整相对较小的130万像素图像的大小

$ /usr/bin/time --format="%MK mem %Es CPU time" /usr/bin/convert angry_birds_1280x800.jpg -resize 100x100 thumb.jpg
10324K mem 0:00.10s CPU time
我们花了0,1秒,因此,显示10个图像预览将占用整整一秒钟的CPU时间。虽然正确编写PHP库页面将需要大约0,01秒。因此,随着动态调整大小,服务器负载将增加100倍

记忆也是如此。每个调整大小的过程将消耗不少于10M的内存(用于调整100k图像文件的大小!),总计为100M。而PHP脚本通常的内存限制只有8M,而且很少达到

这就是现实生活中的数字

与此问题相关的一件有趣的事情:
完全是同一个PHP用户,他在轻松浪费1000000个CPU周期的同时,却难以置信地嫉妒自己能拿出1或2个!这不是一个比喻,这里有一个关于我所说的例子:
一个来自某个人的,他的极大的关注,同时也是一件微不足道的事情。而世卫组织最近却认为,这样的灾难还不够

在这个网站上有大量的问题和答案,争论着任何操作的纳秒速度差异,以无穷无尽的尊严回答,运行数百万次迭代的测试,以显示每个CPU周期的一次操作之间的绝对可忽略的差异

同时,也有类似的问题——关于两种方法在性能上的巨大、无与伦比的差异,这看起来与作者的观点完全相同

这就是普通PHP用户和本网站的问题。
前者只是无法区分真实事物和微观事物。

但后者没有对问题进行理智检查的机制——每个人都以同样的热情回答,即使两个问题相互矛盾(而且都是常识性的)。

谢谢你的建议。我目前正在缓存所有缩略图,因为一个页面中会有许多缩略图,并保留图片页面和下载选项的动态大小调整。您可以轻松构建自己的大小调整程序应用程序,请查看此回复:我还想补充一点,可能最好将缩略图缓存在单独的缓存目录中。这样,您就不会将缩略图与原始图像混在一起,并且可以轻松确定要在缓存上花费多少磁盘空间。因此,使用有限缓存动态调整大小将允许您动态调整系统负载和磁盘空间之间的平衡。而且,实现是非常模块化的。你说得对,我的实时主机上有400GB可用空间。我想我将只存储所有调整大小的图像。感谢分享。感谢您的输入,我敢挑战性地将图像存储在文件系统中。OP的问题本身只是问哪种方式更好,当然,事先调整图像大小并将其存储大小是一个巨大的性能提升和无与伦比的问题。不包括这样一个事实:当使用动态方法时,将同一图像调整两次(至少)是最差的性能