图像渲染速度优化


Image rendering speed optimization

我有一个应用程序,我正在用PHP从数据库中调用照片,根据许多图像有一个给定的植物物种。我让脚本将原本较大的照片调整为100x100。这个过程真的需要一小部分页面加载时间,我的电脑的CPU达到100%,工作相当努力。

我认为这是因为所有的图像都在一次加载…是否有一种方法,让他们加载只有当前一个完成?或者有没有一种更有效的方式来渲染这样的图像?下面是加载它们的代码片段:

$imagesArray = explode(", ",$images);
unset($imagesArray[count($imagesArray)-1]); // get rid of the last array key which is blank.
echo '<tr><td>Images:</td><td>';
foreach ($imagesArray as $imgloc)
{
  echo '<a target="_blank" href="plant_images/'.$imgloc.'"><img src="plant_images/'.$imgloc.'" width="100" height="100" alt="'.$row[2].'" title="'.$row[2].'" /></a>&nbsp;';
}

这是页面中部分加载图像的截图(这比其他时候发生的要好得多!说真的,有些物种有10-12张图片,我的电脑加载页面大约需要15秒,痛苦)

http://www.captainscall.site11.com/temp_stuff/slow-img.png

我发现这个已经有点帮助了。谢谢你。Khanahk

用户的浏览器通常会缓存图像,这样用户只会在第一次访问页面时体验到缓慢的加载。

但是,您应该考虑使用所有正在显示的图像的缩略图。你不需要自己制作这些缩略图,在2013年,我们有电脑来做这些。

一个快速的谷歌搜索可能会给你一些软件,可以使所有的图片在短时间内调整大小的副本,或者如果你知道一些编码,你可以使自己的脚本到这一点。例如,您可以在PHP中使用Imagick(参见http://php.net/manual/en/imagick.scaleimage.php)。然后只需在服务器上存储两种大小的图像,一种用于缩略图,另一种用于更高分辨率的图像。

这样做的一个好处是,您将减少来自服务器的传出数据(如果您的服务器有很多独立访问者,那么由于图像的大小,将会有很多流量)。而且你的用户也会体验到更少的网站加载时间(就像你说的,等待图片加载是很无聊的)。

你可以用javascript告诉浏览器加载图片的顺序,但这并不能解决你的问题,主要是你的图片太大了。

我认为你应该:

  • 服务器端:你需要缓存一个图像,如果它已经生成,下次你可以使用缓存版本。您可以创建一个物理映像文件,以备下次使用。

  • 客户端:您可以使用库延迟加载您的图像

    • http://www.appelsiini.net/projects/lazyload
    • 你可以实现一个JavaScript函数,在特定的秒后加载图像。