过去几天我一直在进行一个项目,并在网站的一个区域的图库中显示大量图像(总共+ 20gb~1~2gb /目录)。该站点建立在引导框架上。由于组合/图像尺寸的原因,我一直在努力制作最终不能流畅运行的大型旋转木马。
答案 0 :(得分:0)
虽然这个问题有点通用,但这里有一些关于你的两个问题的想法:
A)不,从数据库中提取图像的性能很可能比从文件系统直接拉动更糟糕。一般情况下,将数据或其他二进制数据存储在数据库中并不是一个好主意,除非你绝对不得不这样做,因为数据库不能对这些信息做很多事情而你只是在文件系统之上添加了一个额外的层。不需要在那里。但是,您可能希望将路径存储到数据库中的图像,可能还有其他特征,例如图像尺寸,缩略图路径,关键字等。然后您的应用程序会将图像的条目读取到返回图像的正确路径。
B)如果要显示数百或数千张照片,您几乎肯定会想要实现某种分页。如果最终显示必须是轮播,您将需要调查驱动它的Javascript,以确定如何挂钩一个函数,该函数在到达结束或接近结束时通过AJAX调用从PHP应用程序检索更多结果。当前的图像列表。如果由于图像太多导致浏览器崩溃问题,您还需要在加载新图像时从<li>
列表的第一部分删除图像,以便控制DOM。
答案 1 :(得分:0)
A)将那么多二进制数据存储到数据库中是一个坏主意,即使数据库允许它,你也不应该使用它,它也会给你更多的内存消耗,你的所有数据都将存储在数据库的内存空间中,然后复制到PHP的内存空间供你处理,这会占用内存的两倍,加上运行数据库服务器的开销,以及查询等等。所以不,它是使用数据库速度较慢,直接访问文件系统的速度更快,如果您还使用清漆或其他前端缓存系统,您甚至可以更快地提供内容。
我要做的是在文件系统上存储文件,处理静态服务的最佳服务器是G-WAN或NGINX Source,但要做好自己的阅读并自行决定最适合自己的文件。重点是,远离apache,并且可能将所有这些静态文件托管到运行轻量级http服务器的单独服务器上
ProTip :使用按比例缩小的尺寸保存同一图像的多个副本,例如50%,另一个版本保存原始图像尺寸的25%,这样您就可以发送缩略图首先是快速浏览,然后当用户决定查看您提供50%或100%大小的图像时,这取决于他们的屏幕大小,这样可以节省带宽和内存。您还为移动用户节省了大笔3G费用。
B)这是使用数据库有意义的地方,您可以将所有目录索引到数据库中,并使用它来存储FS中图像的位置,也许一些标签,甚至可能是偶数......等等。
并且在forntend中你将实现一个scipt,例如每页获取50个缩略图然后用户可以使用一些花哨的JQuery滚动,当你需要获取更多时,只需获得一个新的结果集50更多的拇指等..
通过这种方式,您可以节省内存,带宽,甚至用户也会感谢您提供如此轻量级的浏览体验!另一个提示: 如果您希望能够处理更大的流量,您可能需要考虑使用CDN,有许多CDN服务不像Amazon S3那么昂贵,简单的搜索将为您提供大量的资源!
快乐的黑客攻击!