繁体   English   中英

不要使用Runserver,django重新加载静态文件

[英]Dont reload static files with runserver, django

我将大的json文件加载为页面的静态文件。 这需要几秒钟。 根据我的经验,经验丰富的Django(从runserver开始)在刷新我的网站时再次加载了这些文件,由于加载时间的缘故,这不是我想要的。

我如何才能最轻松地允许这种行为,以便在服务器启动时仅将文件加载一次?

提前致谢!

首先要注意的是:

  1. 重要的是要了解您要覆盖用户故意做的事情。 点击刷新意味着客户端专门要求服务器再次加载所有内容,这就是重点。
  2. 浏览器通常自己缓存页面,这使您的结果令人怀疑-也许您以某种方式禁用了缓存?

就是说,如果您知道客户端上的大块数据没有变化(即刷新将产生完全相同的页面)并且由于我不熟悉的某些原因而没有缓存,那么在客户端上缓存大块数据可能会很有用。 问题在于,这是我们正在谈论的页面本身,因此您希望防止该页面被下载。 作为纯客户端意味着这必须在JS中完成,您要避免在页面下载后(即使在加载之前)开始运行JS。 因此,实现这一目标的方法可能是:

  1. 该页面本身(例如索引)实际上是仅运行JS的空白页面(可能是加载消息)。
  2. 使用“大” JSON检查是否存在存储的cookie。
  3. 一种。 如果找到它-使用document.write覆盖页面。
  4. 否则,将重定向到true页面以进行完整加载。
  5. 页面加载时,当然应该设置cookie。

实现非常简单:

  1. 使用Django urls文件将大型JSON请求重定向到仅包含JS的所述索引模板。 要传递称为的原始页面的名称,您可以直接在模板的脚本标签中设置一个变量(使用Django {{ }}模板变量)。 请注意,您需要一种跳过此步骤并强制加载的方法,例如POST变量。
  2. 用于创建,编写和阅读Cookie的JS遍布整个互联网。 基本上在纯JS document.cookie="name=stuff"设置一个cookie,然后解析decodeURIComponent(document.cookie)读取它。 签出W3Schools的一些功能来简化此操作,或者使用jquery在google中搜索(如果您喜欢)。
  3. 一种。 解析cookie后,如果存在cookie,write(JSON.parse(json))将立即加载文件。
  4. 否则,只需使用一些POST标志进行标准重定向即可强制加载window.location.replace('path/to/page?force=1')

同样,请确保您需要执行此操作。 如果有人对为什么浏览器不缓存该页面的想法,请发表评论,我将在此处添加。

最后一个警告-如果存在问题,cookie存储限制为4k

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM