使用twisted来提供gzip压缩的JavaScript

时间:2013-07-19 12:54:30

标签: python gzip twisted

我尝试使用EncodingResourceWrappper和GzipEncoderFactory来gzip我扭曲的Web服务器响应。

这似乎适用于大多数文件。但我无法提供稍后通过requirejs加载的JavaScript文件。 (浏览器(Chrome或Firefox)只是一直在旋转。

当我输入JavaScript源路径作为URL时,文件很好。 [更新:不,因为它们来自浏览器缓存]

AppEngine(也可以对它们进行gzip压缩)可以很好地处理这些文件。

class SharedRoot(resource.Resource):
"""Root resource that combines the two sites/entry points"""
WSGI = None

def getChild(self, child, request):
    request.prepath.pop()
    request.postpath.insert(0, child)
    return self.WSGI

def render(self, request):
    return self.WSGI.render(request)

def render_POST(self, request):
    logger.debug(pformat(request.__dict__))
    newdata = request.content.getvalue()
    logger.debug(newdata)
    return ''

class WildcardResource(resource.Resource):

def __init__(self, childResource):
    resource.Resource.__init__(self)
    self.childResource=childResource

def getChild(self,child, request):
    return self.childResource


class GzipFileResource(static.File):        
    def getChild(self, path, request):
    child = super(GzipFileResource, self).getChild(path, request)            
    return EncodingResourceWrapper(child, [GzipEncoderFactory()])

class DynamicFile(GzipFileResource):
    def render_GET(self, request):
    request.setHeader("Cache-Control", ["no-cache"])
    request.setHeader("Pragma", ["no-cache"])
    request.setHeader("Expires", ["Sat, 26 Jul 1997 05:00:00 GMT"])

    return super(DynamicFile, self).render_GET(request)



shared=SharedRoot()
shared.WSGI=EncodingResourceWrapper(wsgiResource,[GzipEncoderFactory()]) 
shared.putChild("static",GzipFileResource("static"))
shared.putChild("css", GzipFileResource("static/css"))
shared.putChild("js",WildcardResource(GzipFileResource("source")))

有什么想法吗?

更新:

跟踪和调试显示,脚本文件出现问题> 64 KB,第一次调用gzip压缩对象只返回gzip头(我可以在网络跟踪中看到),第二次调用没有返回任何内容(因为其余的压缩输出会在flush调用时发生(我无法在网络中看到跟踪))。

使用增加的缓冲区大小(abstract.FileDescriptor)进行测试无法解决问题

0 个答案:

没有答案