2024-05-23 17:28:10 发布
网友
我正在创建一个基于金字塔框架的移动服务。因为它是移动的一切,以减少带宽使用是有利的。我正在考虑gzip所有的流量,甚至动态HTML页面。在
金字塔框架提供了什么样的钩子?或者是否有针对该任务的WSGI中间件?我希望仍然在Python级别,而不是Nginx/Apache,这样我就可以更好地统计gzip带来了多少好处。在
首先,我要强调的是,您应该在web服务器级别(nginx或apache)上这样做。这有几个原因:
性能-如果你用Python来做这件事,你就在使用一个可以处理请求的线程来进行cpu密集型的压缩。这比允许优化的web服务器处理它的效率要低得多。
阻塞-大多数GZip中间件将阻塞您的响应,缓冲主体,以便它可以压缩整个响应。如果您试图将任何响应流式传输回客户机,这是一个巨大的问题,因为它会被中间件捕获。这实际上违反了WSGI规范PEP333。
考虑到所有这些,使用Python进行测试可能是有意义的,至少在开发过程中出于调试目的。在
因为你已经在使用金字塔,所以你已经安装了粘贴。因此,您只需将paste.gzipper.GzipMiddleware添加到应用程序的管道中,如下所示:
paste.gzipper.GzipMiddleware
[filter:gzip] use = egg:Paste#gzip compress_level = 6 [pipeline:main] pipeline = gzip app
显然,如果您不想将压缩级别从默认值6更改为,您可以简单地将egg:Paste#gzip添加到管道中,而不是配置过滤器并给它一个自定义名称(gzip)。在
egg:Paste#gzip
gzip
以下是WSGI级别的几个选项:
您仍然可以使用Apache获得每个请求的压缩统计信息。我创造了一个放气.log是这样的:
DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio LogFormat '%a %v %{outstream}n/%{instream}n (%{ratio}n%%) "%r"' deflate CustomLog /var/log/httpd/deflate.log deflate
现在我得到的日志条目如下:
我可以尽情分析。在
首先,我要强调的是,您应该在web服务器级别(nginx或apache)上这样做。这有几个原因:
性能-如果你用Python来做这件事,你就在使用一个可以处理请求的线程来进行cpu密集型的压缩。这比允许优化的web服务器处理它的效率要低得多。
阻塞-大多数GZip中间件将阻塞您的响应,缓冲主体,以便它可以压缩整个响应。如果您试图将任何响应流式传输回客户机,这是一个巨大的问题,因为它会被中间件捕获。这实际上违反了WSGI规范PEP333。
考虑到所有这些,使用Python进行测试可能是有意义的,至少在开发过程中出于调试目的。在
因为你已经在使用金字塔,所以你已经安装了粘贴。因此,您只需将
paste.gzipper.GzipMiddleware
添加到应用程序的管道中,如下所示:显然,如果您不想将压缩级别从默认值6更改为,您可以简单地将
egg:Paste#gzip
添加到管道中,而不是配置过滤器并给它一个自定义名称(gzip
)。在以下是WSGI级别的几个选项:
您仍然可以使用Apache获得每个请求的压缩统计信息。我创造了一个放气.log是这样的:
现在我得到的日志条目如下:
^{pr2}$我可以尽情分析。在
相关问题 更多 >
编程相关推荐