dis*_*ive 11 python gzip heroku deflate
谷歌现在因为不那么适合移动设备而受到惩罚.因此,为了使事情变得更好,它建议我使用Gzip或Deflate压缩我的大量Javascript.我已经看到了一些关于堆栈溢出的旧建议,但没有任何开箱即用的东西,我试图搜索附加组件,但到目前为止似乎没有什么可以做到这一点.压缩或启用gzip最不痛苦和最强大的是什么?
以下是Google建议我做的事情:
启用压缩使用gzip或deflate压缩资源可以减少通过网络发送的字节数.为以下资源启用压缩,将传输大小减少420KiB(减少74%).
我正在使用Django,如果这更容易.
bim*_*api 11
底线前线 - 它将取决于您的应用程序的详细信息...... Flask?Django的?uWSGI?whitenoise并且gunicorn似乎是Heroku上的"go to"框架,所以这就是我在下面的例子中使用的.它应该转换为其他框架.
解释 - Google建议的要点是尽量减少从服务器物理传输的字节数.有几种方法可以做到这一点,但影响最大,没有特别的顺序 -
引用的建议涉及最后一点,重要的是要理解压缩响应主体是HTTP规范中"内容协商"的一部分 - 浏览器不仅仅通过URL请求特定资源; 它还提供有关其资源的首选表示的提示,例如,什么内容类型,它如何编码,是否可以在多个"块"中发送,等等.
因此,理想情况下,处理HTTP的应用程序层应该处理此特定任务.在典型的应用程序堆栈中,这意味着像Apache或nginx这样的Web服务器,其中Web服务器将代理对Web框架的特定动态路径的请求,并直接处理"静态"内容.
但是,在Heroku中,HTTP层在平台本身和应用程序之间分配 - "路由网格"充当反向代理,处理基本HTTP和HTTPS,并通过向代码信息注入标头来增强请求,例如; 其他一切都取决于你的应用程序.但是,你的"应用程序"相当受限制,因为你没有自由统治来安装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.
Run Code Online (Sandbox Code Playgroud)
如果客户端发送"Accept-Encoding:gzip"标头,这将为您提供gzip内容.有许多其他杠杆和旋钮可以拉动和调整,但这是一个起点.最终,您会担心CPU开销并希望预压缩文件; 或者您可以决定卸载静态文件是可行的方法.
要验证,请使用cURL之类的工具来获取静态文件:
curl -i -H "Accept-Encoding: gzip" http://yourapp.herokuapp.com/path/to/static
Run Code Online (Sandbox Code Playgroud)
该-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
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助...
| 归档时间: |
|
| 查看次数: |
1616 次 |
| 最近记录: |