1

EncodingResourceWrappper と GzipEncoderFactory を使用して、ねじれた Web サーバーの応答を gzip しようとしました。

これは、ほとんどのファイルで機能するようです。しかし、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 ヘッダーが返されるだけで (ネットワーク トレースで確認できます)、2 回目の呼び出しでは何も返されません (残りの圧縮された出力は、フラッシュ呼び出しで発生します (ネットワーク トレースでは確認できません)。

(abstract.FileDescriptor の) バッファー サイズを増やしてテストしても問題は解決しませんでした。

4

0 に答える 0