2017-07-18 116 views
0

我将大的json文件加载为我的页面的静态文件。这需要几秒钟。 由于阅读和经验丰富,Django(从runserver开始)在我的网站刷新时再次加载这些文件,这不是我想要的,因为加载时间。不要使用runserver重新加载静态文件,django

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

在此先感谢!

回答

0

首先需要注意的是:

  1. 是要明白,你问到的东西覆盖用户故意这样做是很重要的。点击刷新意味着客户端特别要求服务器再次加载所有内容,这就是整个问题。
  2. 浏览器通常自行缓存页面,这会让您的结果变得可疑 - 也许您以某种方式禁用了缓存?

这就是说,它可能是有用的缓存在客户端上的数据大块的,如果你知道他们不改变(即刷新,将获得完全一样的页面),他们不缓存出于某种原因我不熟悉。问题是因为它是我们正在讨论的页面本身,并且你想阻止它被下载。作为纯粹的客户端意味着这必须在JS中完成,JS在页面下载之后开始运行(即使在加载之前) - 这是你想要阻止的。所以实现这个配方可能是:

  1. 页面本身(说索引)实际上是一个空白页面(也许加载消息),只能运行JS。
  2. 检查是否存在使用'大'JSON存储的cookie。
  3. a。如果你找到它 - 用document.write覆盖页面。
  4. b。否则重定向到真正的页面满载。
  5. 当页面加载时,它当然应该设置cookie。

的实现是很简单的:

  1. 使用Djangourls文件重定向大型JSON请求说,只有含JS指数模板。要传递调用的原始页面的名称,可以直接在模板的脚本标记中设置变量(使用Django {{ }}模板变量)。请注意,您需要一种方法来跳过此操作并强制加载,例如POST变量。
  2. 用于创建,编写和阅读cookie的JS遍布互联网。基本上纯JS设置一个cookie,并解析decodeURIComponent(document.cookie)读取它。结帐W3Schools的一些功能,使这个很容易做,或谷歌与jquery如果这是你的口味等
  3. a。一旦你解析了cookie document.write(JSON.parse(json))将立即加载文件,如果cookie存在。
  4. b。否则,只需使用某个POST标志进行标准重定向即可强制加载 - window.location.replace('path/to/page?force=1')

再次确保您需要这样做。如果有人有一个想法,为什么该网页没有被浏览器缓存请评论,我会在这里添加它。

如果这是个问题,最后一条警告 - Cookie存储限于4k