首页 > 代码库 > 静态文件和文件缓存

静态文件和文件缓存

静态文件和文件缓存

  1、在应用配置 settings 中指定 static_path 选项来提供静态文件服务;

    2、在应用配置 settings 中指定 static_url_prefix 选项来提供静态文件前缀服务;

  3、在导入静态文件时用 {{static_url(‘XX.css‘)}} 方式实现主动缓存静态文件

Tornado中, 你可以通过在应用程序中指定特殊的 static_path 来提供静态文 件服务:

技术分享
settings = {    "static_path": os.path.join(os.path.dirname(__file__), "static"),    "cookie_secret": "__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",    "login_url": "/login",    "xsrf_cookies": True,}application = tornado.web.Application([    (r"/", MainHandler),    (r"/login", LoginHandler),    (r"/(apple-touch-icon\.png)", tornado.web.StaticFileHandler,     dict(path=settings[static_path])),], **settings)
View Code

  为了改善性能, 通常情况下, 让浏览器主动缓存静态资源是个好主意, 这样浏览器 就不会发送不必要的可能在渲染页面时阻塞的 If-Modified-Since 或 Etag 请求了. Tornado使用 静态内容版本(static content versioning) 来支持此项功能.

  关于缓存的内容:http://www.cnblogs.com/_franky/archive/2012/07/05/2577141.html

  为了使用这些功能, 在你的模板中使用 static_url 方法 而不是直接在你的HTML中输入静态文件的URL:

技术分享
<html>   <head>      <title>FriendFeed - {{ _("Home") }}</title>   </head>   <body>     <div><img src=http://www.mamicode.com/"{{ static_url("images/logo.png") }}"/></div>   </body> </html>
View Code

  因为参数 v 是基于文件内容的, 如果你更新一个文件并重启服务, 它将发送一个新的 v 值, 所以用户的浏览器将会自动的拉去新的文件. 如果文件的内容没有改变, 浏览器将会继续使用本地缓存的副本, 而不会从服务器检查更新, 显著的提高了渲染性能.

  在生产中, 你可能想提供静态文件通过一个更优的静态服务器, 比如 nginx . 你可以配置任何web服务器识别通过 static_url() 提供的版本标签并相应的设置缓存头. 下面是我们在 FriendFeed 使用的nginx相关配置的一部分:

技术分享
location /static/ {    root /var/friendfeed/static;    if ($query_string) {        expires max;    } }
View Code

 

静态文件和文件缓存