`

Django站点静态文件缓存相关问题

阅读更多

高性能网站建设指南》中有一条建议,为网站的页面、文件“添加 Expires 头”。这么做的好处就不多说了,实现方式也比较简单,不过,真的实施这条建议时,还是有许多问题需要考虑。

通常情况下,我们需要将图片、js、css 等不会经常更新的文件缓存起来,一般来说,配置服务器,为它们设置一个较远的未来的 Expires 时间就可以了(比如 1 年后)。不过,在一个经常会更改的网站中,某些 js/css 文件可能并不是一成不变的,虽然它们的更新频率比较低,但还是会不时地更新,我们希望在它们被更新后客户端也能及时更新,而不是依旧使用老的缓存。

解决这个问题的办法有很多,常用的一种是在这些 js/css 后面加上一个版本号或最后修改时间,比如:

 

 

如上所示,文件地址后面跟了一个 v 参数,如果文件版本更新了,我们也只需要更改这个参数的值,用户的浏览器就会重新下载新的版本。

不过同时我们又遇到了新的问题:js/css 文件与上面的 HTML 通常是在两个文件中,有时一个 js/css 在很多 HTML 或模板中都有引用,如果一个 js/css 更新了,我们不得不手动更改这些 HTML 模板文件,这是一个很枯燥的工作,而且一不小心就会有遗漏。

好在我们使用的是 Django,我们可以有一些“Djangoly”的解决方法。前不久,我就看到一个很有创意的写法,类似于这样:

 

 

熟悉 Django 的朋友应该能立即明白,这儿自定义了一个 filterfile_time_stamp ,将 js/css 文件地址作为参数,读取相应文件的最后修改时间,附加到文件地址后面。最终生成的 HTML 形如:

 

 

这样,当 js/css 文件发生变化时,最后修改时间也会发生变化,相应的参数也会变化

这个 filter 的实现很简单。不过我又想到另一个问题:如果页面访问量比较大,这个 filter 是否会导致硬盘的频繁读操作?如果使用缓存将文件的最后修改时间记住一小段时间会不会更好?于是有了下面的我的实现代码:

 

 

你可以在 settings.py 中指定使用哪种缓存,我使用的是内存缓存(CACHE_BACKEND = “locmem:///”)。

我也对使用缓存和直接用 os 模块读取文件最后修改时间两种方式的效率进行了简单的测试。不过,使用缓存并没有带来我原来预期的性能上的提高,相反,似乎比直接用 os 模块读取文件最后修改时间的性能还有略低一点。我将读取缓存与读取文件最后修改时间的操作各执行了 10 万次,在我的本本上(Ubuntu 10.04 系统),前者花费的时间约为 2.9 秒,后者约为 2.5 秒,不知道在使用 os 模块读取文件最后修改时间时,这个值是不是会在系统级别上缓存起来。

 

reference:http://oldj.net/article/django-site-static-file-cache/

 
分享到:
评论

相关推荐

    解决Django中修改js css文件但浏览器无法及时与之改变的问题

    通常,清除“缓存图片和文件”及“cookies和其它站点数据”等与缓存相关的数据即可。 操作完成后,当再次访问网站时,浏览器将会加载最新的资源文件。对于web开发中修改JavaScript不生效的情况,这通常是由于浏览器...

    django-bakery:一组用于将Django站点烘焙为平面文件的助手

    5. **缓存策略**:django-bakery 可以配置缓存策略,使得在多次烘焙之间能够重用已生成的静态文件,减少不必要的重复工作。 **应用场景**: 1. **静态博客**:对于内容相对固定的博客,可以使用 django-bakery 将...

    Django 2.2 官方文档中文版.pdf

    Django的部署章节提供了如何使用WSGI协议进行部署的指导,同时也包括了升级Django、为模型提供初始化数据、集成遗留数据库和管理静态文件等部署相关的话题。例如,在部署静态文件部分,文档会指导开发者如何配置静态...

    基于Django开发的企业站点.zip

    8. 静态文件与媒体文件:学习如何配置Django处理静态文件(如CSS、JavaScript、图片)和用户上传的媒体文件,确保在部署时能正确引用。 9. 管理后台:Django的内置Admin界面可以帮助开发者轻松管理数据库模型实例。...

    Django视频学习资源

    - **缓存机制**:Django支持多种缓存后端,如文件缓存、数据库缓存、Memcached等。 - **异步处理**:利用Channels或Celery等工具实现异步任务处理和WebSocket通信。 - **测试**:Django自带测试框架,可以方便地编写...

    Django官方文档.pdf

    根据文件内容提供的信息,这是一份Django官方文档的简要概述,下面我将根据这些信息详细解释Django框架的相关知识点。 首先,文档的标题“Django官方文档”表明了这是关于Django这一Python Web框架的权威指南。...

    Python库 | django_collect_offline-0.2.39-py3-none-any.whl

    1. **自动缓存处理**:在离线模式下,`django_collect_offline`会自动检测并缓存静态文件的变化,这样即使在没有网络连接的情况下,也能确保应用能正常运行并显示最新的静态内容。 2. **性能提升**:相比默认的...

    Python库 | django-bakery-0.11.1.tar.gz

    5. **缓存策略**:`django-bakery`支持基于HTTP缓存头的策略,这使得静态文件在客户端的缓存控制更加智能,减少不必要的网络请求。 6. **与CDN友好**:生成的静态文件可以直接上传到CDN,以实现全球范围内的快速...

    Django后台开发演示案例

    在本示例中,我们将深入探讨使用Python的Django框架进行后台开发的相关知识点。Django是一个强大且高效的Web开发框架,它遵循模型-视图-控制器(MVC)设计模式,帮助开发者快速构建高质量的Web应用程序,包括后台...

    django 1.11 官方说明文档.pdf 电子书

    这部分介绍了如何使用 Django 的静态文件管理功能。 ##### 2.9 编写第一个 Django 应用(第七部分) 讲述了如何将 Django 应用部署到生产环境中。 ##### 2.10 高级教程:如何编写可重用的应用 这部分针对有经验...

    django开发速记手册,将django官方文档进行精简,方便开发快速查阅,适用于有一定django基础的coder.zip

    11. **缓存系统**:为了提高性能,Django支持多种缓存策略,包括内存缓存、数据库缓存、文件系统缓存等,可以对整个站点或特定视图进行缓存。 12. **国际化与本地化**:Django提供了强大的国际化和本地化功能,允许...

    Django1.0以上版本的教材-DjangoBook2.0中文版.pdf

    探讨了如何将Django应用部署到生产环境中,包括服务器配置、静态文件处理等内容。 13. **输出非HTML内容(第十三章)** 介绍了除了HTML之外的其他类型的内容输出,如JSON、PDF等格式。 14. **会话、用户和注册...

    Django使用指南

    在Common Web application tools(CommonWebapplicationtools)部分,Django提供了一些通用的工具和实用功能,比如生成静态文件的散列名称,以便于长期缓存。 Other core functionalities...

    Django-1.5.1 官方文档

    - **管理静态文件**(4.13):讲解了如何处理CSS、JavaScript、图片等静态资源。 - **其他指南**(4.14):涵盖了更多的特定应用场景和技术细节。 以上内容覆盖了Django-1.5.1官方文档的主要章节和知识点,为开发者...

    django1.11英文手册

    Django 提供了许多内置工具和技术来帮助开发者优化应用程序的性能,比如缓存机制、数据库查询优化、静态文件处理等。这部分内容深入探讨了如何利用这些工具和技术来提高 Django 应用的响应速度和资源利用率。 #####...

    Django 中文文档 1.8.pdf

    6. **静态文件和媒体处理**:静态文件是网站中不经常改变的文件,如CSS,JavaScript和图片,而媒体文件通常指的是用户上传的文件。 7. **中间件**:中间件是一系列的钩子,允许开发者在请求/响应周期的特定阶段插入...

    Django Book 2.0 中文版

    #### 六、Django站点管理 1. **用户认证系统**:学习如何使用Django内置的用户认证系统,实现登录、注销、权限控制等功能。 2. **管理后台**:了解Django Admin的使用方法,包括自定义模型的显示方式、添加搜索功能...

    Django book中文

    12. **部署Django**:这一章讲述了如何将Django应用部署到生产环境中,包括服务器配置、静态文件管理、安全性设置等方面的内容。 13. **输出非HTML内容**:除了HTML页面,Django还可以生成JSON、XML等其他格式的...

    tinymce-django

    4. **媒体管理**:由于 TinyMCE 支持插入图片和其他媒体,所以还需要理解 Django 的媒体处理机制,包括上传路径的设置、静态文件的处理,以及可能需要的第三方库如 django-filebrowser 或 django-medialibrary 来...

    Django-4.0.1.tar.gz

    - **缓存系统**:提供多种缓存策略,如内存缓存、数据库缓存等,提高应用性能。 - **国际化与本地化**:支持多语言,便于全球化部署。 6. **学习与应用** 对于初学者,可以通过官方文档、教程和社区资源来学习...

Global site tag (gtag.js) - Google Analytics