Google建议我这样做:
启用压缩 使用gzip或deflate压缩资源可以减少通过网络发送的字节数。 为以下资源启用压缩,将传输大小减少420KiB(减少74%)。
我使用Django,如果这更容易。
答案 0 :(得分:10)
底部排队前线 - 这将取决于您的应用程序的详细信息...... Flask? Django的? uWSGI? whitenoise
和gunicorn
似乎是Heroku上的“go to”框架,所以这就是我在下面的示例中使用的内容。它应该转换为其他框架。
解释 - Google建议的要点是尽量减少从服务器物理传输的字节数。有几种方法可以做到这一点,但影响最大,没有特别的顺序 -
引用的建议涉及最后一点,重要的是要理解压缩响应主体是HTTP规范中“内容协商”的一部分 - 浏览器不仅仅通过URL请求特定资源;它还提供了关于该资源的首选表示的提示,例如,什么内容类型,它如何编码,是否可以在多个“块”中发送等。
因此,理想情况下,处理HTTP的应用程序层应该处理此特定任务。在典型的应用程序堆栈中,这意味着像Apache或nginx这样的Web服务器,其中Web服务器将代理对Web框架的特定动态路径的请求,并直接处理“静态”内容。
然而,在Heroku中,HTTP层在平台本身和应用程序之间分配 - “路由网格”充当反向代理,处理基本HTTP和HTTPS并通过向代码信息注入头来增强请求,例如;其他一切都取决于你的应用程序。但是,你的“app”相当受限制,因为你没有自由统治来安装nginx等。
大多数Web框架(Django,Flask,Rails,Play!等等)都是高度通用的,可以与外部Web服务器(推荐用于生产)一起工作,也可以独立工作,提供自己的,通常轻量级Web服务器(推荐用于开发)。框架还与“容器”很好地配对,“容器”既为应用程序提供运行时环境,又为HTTP层提供繁重的工作(uWSGI,Gunicorn,Rack等)
这是Heroku的选择。虽然我对uWSGI有最丰富的经验,但下面的例子是Flask + Gunicorn + WhiteNoise(用于在Python上用Heroku提供静态文件的首选库)。请注意,WhiteNoise也适用于Django,因此如果Django成为您的首选框架,那么适应这一点应该是微不足道的。所以,所有这些阐述都会导致两个非常简单的步骤:
whitenoise
添加到您的requirements.txt
例如:
from flask import Flask
from whitenoise import WhiteNoise
flapp = Flask(__name__)
#use a subdirectory for root, otherwise, the actual .py files can be served...
app = WhiteNoise(flap, root='./static/')
#define your routes:
@flapp.route('/')
def home_page():
#etc. etc.
如果客户端发送“Accept-Encoding:gzip”标头,这将为您提供gzip内容。有许多其他杠杆和旋钮可以拉动和调整,但这是一个起点。最终,您会担心CPU开销并希望预压缩文件;或者您可以决定卸载静态文件是可行的方法。
要验证,请使用cURL之类的工具来获取静态文件:
curl -i -H "Accept-Encoding: gzip" http://yourapp.herokuapp.com/path/to/static
-i
标记应打印出标题,这将显示请求的提供方式的详细信息。注意`Content-Encoding
HTTP/1.1 200 OK
Connection: keep-alive
Server: gunicorn/19.3.0
Date: Wed, 20 May 2015 15:33:35 GMT
Last-Modified: Wed, 20 May 2015 15:26:06 GMT
Content-Type: text/html; charset="utf-8"
Cache-Control: public, max-age=60
Access-Control-Allow-Origin: *
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 662
Via: 1.1 vegur
希望这会有所帮助......