现在很多中小网站(尤其是 Web 2.0 站点) 都允许用户上传图片,如果前期没有很好的规划,那么随着图片文件的增多,无论是管理还是性能上都带来很多问题。就自己的一点理解,抛砖引玉,以期能引出更具价值的信息。
事关图片的存储
把图片存储到什么介质上? 如果有足够的资金购买专用的图片服务器硬件或者 NAS 设备,那么简单的很;如果有能力自己开发单独存储图片的文件系统,那么也不用接着往下看了。
如果上述条件不具备,只想在普通的硬盘上存储,首先还是要考虑一下物理硬盘的实际处理能力。是 7200 转的还是 15000 转的,实际表现差别就很大。是选择 ReiserFS 还是 Ext3 ,怎么也要测试一下吧? 创建文件系统的时候 Inode 问题也要加以考虑,选择合适大小的 inode size ,在空间和速度上做取舍,同时防患于未然,注意单个文件系统下文件个数别达到极限。
独立,独立的服务器
无论从管理上,还是从性能上看,只要有可能,尽量部署独立的图片服务器。这几乎成为常识了(不过在我做过面向 Web 的项目之前就这个问题也被人笑话过)。具备独立的图片服务器或者服务器集群后,在 Web 服务器上就可以有针对性的进行配置优化。比如采用传说中更有效率的 Lighttpd 。
如果不想在几台机器间同步所有图片,只用 NFS 模式共享一下即可。注意软、硬连接可能带来的问题,以及 NFS 特定的传输速度。
独立,独立的域名
如果大部分 Web 页面必须要载入很多图片,那么需要注意 IE 浏览器的连接数问题(参见对该问题的测试)。
前几天有个朋友在线上问我,"一些大网站,图片服务器为什么都用另外一个域名? 比如yahoo.com 图片服务器用了 yimg.com 的域名?" ,粗糙一点的答案:除了管理方便,便于CDN 同步处理,上面说的 IE 连接数限制也是个考虑因素吧(其他原因我也不知,有请 Yahoo!的同学发言) 【还有一个我没考虑到的是 Cookie 的因素,参加楼下高春辉的留言】
雅虎 Web 优化 14 条
关于雅虎 YSlow 工具倡导的 优化 14 条规则,建议每个 Web 维护人员必须倒背如流,当然也应该辩证来看--介绍这 14 条规则的页面本身也只能得到 70 多分...其中的第九条和上面说的独立域名之间多少有些矛盾。实际情况要根据自己的 Benchmark 与具体需求而确定了。
有效利用客户端 Cache
很多网站的 UI 设计人员为了达到某些视觉效果,会在一些用户需要频繁访问的页面模块上应用大量的图片。这样的情况,研究表明,对于用户粘度比较高的站点, 在Web 服务器上对这一类对象设置 Expires Header 就是十分有必要的,大量带宽就这么节省下来,费用也节省了下来。顺便说一下,对于验证码这样的东西,要加个简单的规则过滤掉。
服务器端的 Cache
在国内,CDN 也是有钱才能玩得起。而类似 Amazon S3 这样的一揽子存储服务,国内还没有出现。所以,充分利用服务器端的 Cache 也是有必要的。Squid 作为反向代理服务器,缓冲图片效果应该说尚可,新浪技术团队贡献的 Ncache 据评测,效果更佳。
服务器端做Cache的好处是显而易见的,一个数据对象的请求时间会控制在 100ms 以内,否则的话,至少要几百个 ms 甚至更长。
高解析图片问题
如果网站存在大量高解析度的图片,那么有必要考虑部署 IIPImage 或者类似的软件。
运营问题
很多比较有规模的网站对于用户上传的图片不做任何处理,结果页面上还能看到很多 BMP 格式的图片(个人觉得任何网站出现 BMP 格式的图片都是可耻的)...这完全是运营上的策略之误了。找个程序员投入一点时间写个图片处理模块,对那些"截屏"得来的图片做个转换,投入成本可能远比存储上的开销小,而用户再访问该图片,质量未必能有什么损失,浏览速度无疑好多了。哪种处理方式更让人接受,不言而喻。
--EOF--
图片处理工具的选择
可能大多数网站都是选择 ImageMagick 做为基础库,不过这里也有一篇 GraphicsMagick 1.2 vs ImageMagick 6.3.6 Benchmark Report,如果图片处理量巨大,性能问题又怎能不考虑?
Lighttpd 的 ModCache 模块非常值得推荐。
Updated: 对于创业团队来说,推荐又拍云服务,用了都说好。
相关推荐
在互联网世界中,Web图片服务器扮演着至关重要的角色。它们负责存储、管理和分发网站所需的图像资源,确保用户能够快速、高效地加载和查看图片。本文将深入探讨Web图片服务器的相关知识点,帮助你理解其工作原理、...
在当前的互联网环境中,Web图片服务器扮演着至关重要的角色,特别是在Web 2.0网站上,用户上传图片已经成为常见的互动形式。然而,如果没有充分的规划,随着图片数量的增长,管理和性能问题将日益突出。以下是对Web...
面试中的闲谈技巧,好的闲谈是敲门砖
"JS调用XML的结合的闲谈"这个主题涵盖了JavaScript与XML的集成,以及它们在实际项目中的应用。这篇总结将深入探讨如何通过JavaScript操作XML文档,提取、修改和展示数据。 首先,XML(eXtensible Markup Language)...
SignalR是.NET Framework下的一款库,它使得实时的、双向通信在Web应用中变得轻而易举。在本文中,我们将深入探讨如何使用SignalR来创建一个多人在线聊天室功能。 首先,我们要理解SignalR的核心概念。SignalR提供...
Photoshop调色教程:闲谈LAB模式计算调色详解 Photoshop调色教程:闲谈LAB模式计算调色详解是一篇详细的Photoshop调色教程,旨在帮助读者深入了解LAB模式计算调色的原理和应用。 LAB 模式的概念 LAB 模式是一种...
在IT行业中,面对大规模并发场景,如"百万服务器并发",高效的编程技术和策略至关重要。这里的"百万服务器并发代码实现"通常涉及到分布式系统、网络编程、多线程与异步处理等多个核心领域。以下是对这些知识点的详细...
SEM优化:品牌词管理闲谈(下).doc
### Java设计模式入门详解 #### 一、设计模式概述 设计模式是软件工程领域中一种通用的解决方案,它描述了在特定情况下解决常见问题的方法。《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements ...
这个“Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip”文件是一个示例项目,展示了如何利用Swing构建一个基本的多用户聊天应用。下面将详细阐述其涉及的关键知识点。 1. **Swing组件**:Swing提供了丰富的...
### 闲谈嵌入式编程的复杂性 #### 嵌入式编程的入门与挑战 嵌入式编程是一项技术密集型的工作,它涉及到软件与硬件的紧密结合。文章提到,很多从事嵌入式编程的工程师往往是从自动化或电子等相关专业转型而来,这...
在这个标题为“闲谈工厂模式”的讨论中,博主可能分享了关于工厂模式的一些深入见解、实际应用以及与其他设计模式的对比。 工厂模式的核心思想是提供一个创建对象的接口,但让实现这个接口的具体类决定实例化哪个类...
本文将基于“开发经验,PCB布板闲谈”的主题,详细介绍PCB设计中的关键知识点和技术细节。 #### 二、PCB设计基础 PCB设计是电子产品设计的重要组成部分,涉及到信号完整性、电源完整性、电磁兼容性(EMI)等多个方面...
演讲稿:静坐常思己过,闲谈莫论人非_演讲稿.pdf
此聊天系统使用AJAX更新闲谈对话显示区而无需重新调入页面 The class generates a page with a Web form to submit what each chat line that the users type. 这类产生 Web form形式的网页 The chat ...
闲谈嵌入式编程的复杂性 嵌入式编程是一种复杂的编程技术,需要开发人员具备深入的编程知识和实践经验。文章通过两个实践例子,说明了嵌入式编程中的多个问题,并分析了解决这些问题的方法。 嵌入式编程的复杂性...
《春末闲谈》是鲁迅先生的一篇散文,收录在苏教版高中语文选修教材《现代散文选读》中。这篇文章通过闲谈的形式,深入浅出地探讨了统治者与被统治者之间的矛盾,以及封建统治者所采用的麻痹民众的手段。以下是该文的...
闲谈 我奇妙的Nuxt.js项目 构建设置 # install dependencies $ npm run install # serve with hot reload at localhost:3000 $ npm run dev # build for production and launch server $ npm run build $ npm run ...
【程序设计方法学】是软件开发中的核心概念,它涵盖了如何高效、有序地构建和维护软件系统的一系列原则和技巧。在早期的计算机时代,由于硬件资源有限,程序员需要极其注重程序的运行效率,常常采用各种技巧来节省...
根据提供的文件信息,内容看似是关于宏观经济指标GDP(国内生产总值)的讨论。为了生成相关知识点,以下内容将详细解释GDP的概念、计算方式、相关经济指标和分析方法。 GDP是衡量一个国家或地区在一定时期内生产...