1

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

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

当我将 JavaScript 源路径作为 URL 输入时,这些文件可以正常运行。[更新:不,因为它们来自浏览器缓存]

这些文件可以从 AppEngine 中正常使用(它也可以压缩它们)。

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 标头(我可以在网络跟踪中看到),第二次调用什么也不返回(因为其余的压缩输出将通过刷新调用发生(我在网络跟踪中看不到)。

增加缓冲区大小(abstract.FileDescriptor)的测试并没有解决问题

4

0 回答 0