4

我一直在思考最好的解决方案,但随着我阅读的内容越来越多,我越来越困惑。有很多不同的库和助手(其中大多数已经过时或用于 CI 1.x),我真的需要你的帮助。

我有一个基于 CodeIgniter 2.1.3 的自定义 CMS,新闻网站主页上有大约 40-50 张图片,但其中 80% 是 3 种不同尺寸的小缩略图,另外 20% 的图片在主页上当我从一个类别中列出新闻时,页面有 2 种尺寸 + 内页有 1 种尺寸的缩略图。所以总的来说,我需要新闻报道的原始图像,主页的 5-6 个缩略图大小。

处理这个问题的最聪明的方法是什么?假设每天会有 10-50 条新消息。

  1. 在上传过程中为每张图片创建 5-6 个缩略图会更好吗?
  2. “即时”的方法呢?我更喜欢这种方法,正如我所读到的,只有第一个访问者会调用库/助手来生成缩略图,而对于其他人来说,缩略图已经创建好了,这样就不会浪费 CPU。这个方法怎么样?这是好习惯吗?

我应该为这些我需要的缓存技术使用什么?

另外我忘了问,其他 CMS 系统如何处理生成缩略图?我的意思是关于 Wordpress、Drupal、Joomla 等。

他们是存储预定义的尺寸还是动态生成它们?

我想他们的逻辑应该是最好的,或者可能不是,但我想在我的 CodeIgniter CMS 中实现一些智能的东西。

我没有提到,但我认为这并不重要,我使用 Grocery CRUD 作为管理面板。

任何帮助表示赞赏。

4

3 回答 3

2

您最好的选择是动态创建图像 + 使用像 Amazon Cloudfront 这样的 CDN 来缓存源图像的调整大小版本。

多年来,我一直在使用 CodeIgniter 来构建网站,其中在整个网站上使用了许多不同大小的图像。一开始,我曾经在上传过程中从原始图像中创建所需的每个尺寸(很容易最终得到超过 5 个缩略图)。事实证明,这提供了最佳性能 - 每当您需要特定大小的图像时,您只需将其包含在内,无需额外的 PHP 处理。但是我注意到我最终在服务器上获得了大量图像,其中较旧的图像甚至可能不会经常使用(例如:一年以上的文章)。加上这种方式开发需要更长的时间。

然后我开始动态创建图像,首先使用 3rd 方库,后来为 CodeIgniter 开发了我自己的界面。这样可以节省大量时间,因为在上传过程中,您可以保存图像的原始版本,而不必担心调整大小的版本。在前端显示图像时,您通常需要做的就是传递所需图像的某些尺寸。这样做,您不仅可以获得 5-6 个版本的图像,而且可以根据需要获得尽可能多的版本。当您重新设计可能需要不同尺寸图像的网站时,这也是未来的解决方案!当您的 5 个缩略图选项都不再有效并且您需要不同的尺寸时,您会怎么做?

你是对的,动态调整图像大小确实是消耗 CPU 的操作(尤其是在涉及大图像时),因此缓存是必须的。您可以将图像直接缓存在您的服务器上,或者在此基础上获取 CDN。为了保持服务器整洁,我通常运行一个 cron 作业来删除比我们说一周更早的动态图像。节省空间 + 不会造成伤害 - 每当需要显示图像时,它就会被重新创建。

于 2012-11-10T13:40:44.310 回答
2

查看 timthumb,它是一个动态调整图像大小并将它们存储在缓存中的脚本。这很简单,在 URL 中包含带有参数的图像标签。

还要检查这个看起来很有希望的链接http://www.jenssegers.be/blog/31/Codeigniter-resizing-and-cropping-images-on-the-fly-continued

于 2012-11-10T20:36:14.467 回答
0

我喜欢 Drupal 管理这个的方式。在 Drupal 6 中有一个名为 imagecache 的模块(现在是 Drupal 7 的核心,但功能非常相似),它基本上存储图像的预设(图像大小、转换、效果......)以及当访问者请求图像时该模块根据预设生成不同的图像并提供这些图像。这样你上传一张图片,但有不同的图片用于不同的目的。

该模块有一个非常有用的功能,如果您想更改一个预设,您可以“刷新”与该预设相关的所有图像,以便访问者看到更改。

当然,Drupal 中还有许多其他与图像缓存或图像样式相关的模块,它们添加了其他效果,如水印......

更多信息:

于 2012-11-10T12:25:01.843 回答