2016-02-26 73 views
2

想象一下,您的Web应用程序的静态文件夹中有一个10MB图像文件。从服务器加载低分辨率的高分辨率图像(非javascript解决方案)

如果您将其加载到HTML文件中,如下所示:<img src="static/image.png"></img>,整个10MB会为请求图片的用户加载。

但是如果标签是<img src="static/image.png" height="10" width="10"></img>?即它将图像大小调整为10px×10px(大概小于10MB)。用户端是否会加载整个10MB?就个人而言,我认为用户仍然会加载10MB。如果我错了,请纠正我。这是我的第一个问题。

如果我虽然正确,都有些什么策略来动态缩略图这种这样的图像,在用户端加载文件的大小被缩小过(短的实际存储一个单独的缩略图文件为每个图像在服务器上)。假设它是一个非JavaScript环境,网络服务器是nginx,并且web应用程序是在Django中构建的(如果有的话)。

存储单独的缩略图是唯一的方法吗?

回答

3
  1. 是用户必须下载完整的10Mb。

  2. 有一些很好的django应用程序来处理自动thubmnail一代。我使用django-versatileimagefield。在那里你可以轻松实现不同的缩略图大小。

    from django.db import models 
    
    class ExampleModel(models.Model): 
        image = models.ImageField(
        'Image', 
        upload_to='images/' 
    ) 
    
    >>> from someapp.models import ExampleModel 
    >>> instance = ExampleModel.objects.all()[0] 
    >>> instance.image.thumbnail['200x200'].url 
    '/media/__sized__/images/test-image-thumbnail-200x200.jpg' 
    
    # or in templates: 
    <img src="{{ instance.image.thumbnail.200x200 }}" /> 
    
2

1:是的,用户会下载大量10MB和浏览器将调整(可能使用黑幕大小调整算法,它的选择)

2:我会生成缩略图我自己在上传和存储的时间它。如果你在飞行中产生它,它可能会很慢,你最终会选择一个糟糕的算法,以及使用多CPU服务器端。