首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cherrypy提供静态文件需要很长时间,当页面在多个浏览器中打开时,文件永远不会从缓存中加载。

Cherrypy提供静态文件需要很长时间,当页面在多个浏览器中打开时,文件永远不会从缓存中加载。
EN

Stack Overflow用户
提问于 2014-12-22 13:45:49
回答 1查看 1.1K关注 0票数 0

我正在使用Cherrypy3.6.0框架。当我在多个浏览器中打开页面时,加载页面的时间很长(提供静态文件需要很长的时间),我遇到了问题。例如,在这种情况下,120 10的bootstrap.min.css文件可以加载5-10秒。更糟糕的是,静态文件从来不被缓存,所以每次加载页面时,静态文件都会再次加载,页面加载需要几秒钟的时间。当服务器响应304未修改时,在客户端接收此应答之前也需要相同的时间(无论是加载静态文件还是服务器响应304,响应时间都没有差异)。我的服务静态文件配置:

代码语言:javascript
复制
cherrypy.tree.mount(None, '/static', config={
    '/': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': static_dir,
        'tools.sessions.on': False,
        'tools.caching.on': True,
        'tools.caching.force' : True,
        'tools.caching.delay' : 0,
        'tools.expires.on' : True,
        'tools.expires.secs' : 60*24*365
        }
    }
)

我不明白为什么抓取120 so的文件会花费这么多时间.也许有人能给我建议,我能在哪里找出这个问题的原因?

编辑:

标题:

代码语言:javascript
复制
Remote Address:192.168.100.100:80
Request URL:http://192.168.100.100/static/css/bootstrap.min.css
Request Method:GET
Status Code:304 Not Modified
Request Headersview source
Accept:text/css,*/*;q=0.1
Accept-Encoding:gzip, deflate, sdch
Accept-Language:pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Cookie:session_id=.......................................
Host:192.168.100.100
If-Modified-Since:Mon, 22 Dec 2014 12:30:51 GMT
Referer:http://192.168.100.100/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Response Headersview source
Date:Fri, 14 Jan 2000 23:51:25 GMT
Server:CherryPy/3.6.0
Vary:Accept-Encoding

在挖掘重叠时,我有:

代码语言:javascript
复制
Stalled: 9.619ms
Request sent: 0.171ms
Waiting (TTFB): 5.02s
Content download: 1.000ms 

我检查了什么是TTFB,这是从发出HTTP请求的虚拟用户到浏览器接收的页面的第一个字节的持续时间。所以服务器响应有问题..。

EDIT2:

我已经创建了最小的应用程序,它只加载静态文件和问题仍然发生。这是应用程序代码:

服务器:

代码语言:javascript
复制
import cherrypy

def start():

    import app

    app.application()

    cherrypy.config.update({'server.socket_host': '0.0.0.0', 'server.socket_port': 9061 })

    engine = cherrypy.engine

    engine.autoreload.unsubscribe()

    try:

        engine.start()

    except:

        sys.exit(1)

    else:

        engine.block()


if __name__ == '__main__':    

    start()

应用程序:

代码语言:javascript
复制
import cherrypy

from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('/tmp/cherry/'))


static_dir = '/media/vbox_shared/new_web/app/static'

class Test(object):

    @cherrypy.expose

    def index(self):

        template = env.get_template('test.html')

        return template.render()


def application():

    cherrypy.tree.mount(Test(), '/', config = {})

    cherrypy.tree.mount(None, '/static', config={

        '/': {

            'tools.staticdir.on': True,

            'tools.staticdir.dir': static_dir
        }

    })

html:

代码语言:javascript
复制
<html>

<head>

    <meta http-equiv="X-UA-Compatible" content="IE=9"/>

    <link rel="stylesheet" href="/static/css/style.min.css"/>

    <link rel="stylesheet" type="text/css" href="/static/css/bootstrap.min.css"/>

    <link rel="stylesheet" type="text/css" href="/static/css/chosen.min.css"/>

    <link rel="stylesheet" type="text/css" href="/static/css/jquery.jgrowl.min.css"/>

    <link rel="stylesheet" href="/static/css/m-buttons.min.css"/>

    <title>Streams</title>

    <title>test</title>

</head>

<body>

<h1>test</h1>

 <script src="/static/js/jquery-1.11.1.min.js"></script>

    <script src="/static/js/jstree.min.js"></script>

    <script src="/static/js/functions.js"></script>

    <script src="/static/js/stream.js"></script>

    <script src="/static/js/chosen.jquery.min.js"></script>

    <script src="/static/js/chosen.proto.min.js"></script>

    <script src="/static/js/jquery.jgrowl.min.js"></script>

    <script src="/static/js/bootstrap.min.js"></script>

</body>

</html>

指向截图的链接:

http://i58.tinypic.com/21m8ar5.png http://i60.tinypic.com/euh6p0.png

EDIT3:

我已经将我的应用程序简化为:

代码语言:javascript
复制
import cherrypy
class HelloWorld(object):
    def index(self):
        return """
            <html>
            <head>
                <link rel="stylesheet" href="/static/css/style.min.css"/>
                <link rel="stylesheet" type="text/css" href="/static/css/bootstrap.min.css"/>
                <link rel="stylesheet" type="text/css" href="/static/css/chosen.min.css"/>
                <link rel="stylesheet" type="text/css" href="/static/css/jquery.jgrowl.min.css"/>
                <link rel="stylesheet" href="/static/css/m-buttons.min.css"/>
                <title>Streams</title>
                <title>test</title>
            </head>
            <body>
            <h1>test</h1>
                <script src="/static/js/jquery-1.11.1.min.js"></script>
                <script src="/static/js/jstree.min.js"></script>
                <script src="/static/js/chosen.jquery.min.js"></script>
                <script src="/static/js/chosen.proto.min.js"></script>
                <script src="/static/js/jquery.jgrowl.min.js"></script>
                <script src="/static/js/bootstrap.min.js"></script>
            </body>
            </html>"""

    index.exposed = True

conf = {
        '/static':
        {
         'tools.staticdir.on': True,
         'tools.staticdir.dir':'/media/vbox_shared/new_web/app/static'} 

        }

cherrypy.config.update({'server.socket_host': '0.0.0.0', 'server.socket_port': 9066 })
cherrypy.quickstart(HelloWorld(), config=conf)

问题还在发生。当我打开IE,FF,Safari和Chrome的主页-一些静态文件加载超过10秒.

EN

回答 1

Stack Overflow用户

发布于 2014-12-23 10:10:54

您一定遗漏了一些标头和一些配置。CherryPy只为gzipped响应发送Vary: Accept-Encoding。通常它会发送Last-ModifiedContent-TypeContent-Length等。还请注意,Cache-Control: max-age=0意味着您要执行一个请求刷新请求,请求服务器验证资源。

the answer中,我在注释中链接到,通常304不修改只会花费CherryPy一个即时的os.stat调用,除非磁盘坏了。

我建议您在同一个静态目录上运行一个单独的CherryPy应用程序,只打开tools.staticdir,以避免可能出现的错误配置、会话锁定问题等。然后逐步添加配置并测量响应时间,例如使用Apache的ab -c 10 -n 1000 http://192.168.100.100/static/css/bootstrap.min.css

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27603945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档