在多平台项目中将用户图像存储为二进制数据与静态文件的性能影响?

时间:2016-01-26 10:44:48

标签: android ios django performance

我有一个项目,其中包含在Django中开发的Web实现以及在Android和iOS中的移动实现。其中一项功能是允许用户上传图像。有关于将它们存储为二进制数组以及将它们存储为由文件服务器提供的静态文件的各种帖子。是否有任何可行的解决方案对所有三个平台都足够有效?

2 个答案:

答案 0 :(得分:1)

Django提供处理图片上传的逻辑,请参阅docs。 根据我自己的经验,我可以说在django环境中让django通过其图像字段完成工作会更方便。 只需创建一个模型:

class UserImage(models.Model):
    image = models.ImageField(upload_to='test')
    user = models.ForeignKey(User)

它为您处理所有逻辑并将新图像文件保存到服务器上的指定目录。优点是您可以通过http://yourdomain.com/media/test/image.png非常直接地访问这些文件。

答案 1 :(得分:1)

绝对是静态文件!

静态文件可以由Web服务器缓存,通过CDN等提供。即使没有它,它们也可以更有效地使Web服务器直接从磁盘提供服务,而不是让数据库从表中加载它们。

用户上传的文件在Django中称为“媒体文件”,以区别于“静态文件”,它们是您网站中不变的部分(即核心设计)。然而,当涉及到为他们服务时,方法是相同的。

文档中有一些细节:
https://docs.djangoproject.com/en/1.9/howto/static-files/#serving-files-uploaded-by-a-user-during-development
你会看到那里的注释你不应该让Django本身服务于静态或媒体文件,除了在开发过程中。这意味着您需要设置Web服务器来提供文件。

这里的文档中的一些细节:
https://docs.djangoproject.com/en/1.9/howto/static-files/deployment/

高效且易于设置(并且似乎与上述建议相矛盾)的替代方案是使用:
https://pypi.python.org/pypi/django-rednoise/

... RedNose旨在与CDN结合使用(例如Amazon Cloudfront,如果您在AWS上托管) - 在这种情况下,Django可以处理静态+媒体文件,因为它们将最终由CDN提供服务。

至于针对移动性能的问题,您应该查看:
https://www.ampproject.org/