如何测试javascript中是否存在文件

时间:2018-06-05 21:48:31

标签: javascript caching browser-cache p5.js

因此,我的网站依赖于其上的脚本和图像,问题是所有这些都会保存到缓存中,因此用户无法查看我的更新,除非他们清除缓存或打开在隐私浏览模式下。我试图建立一个系统来检查是否需要清除缓存,如果是,则自动清除缓存。

我想到的方法是在html页面中有一个脚本,用于测试是否" sketch1.js"存在,如果不存在,则清除缓存并再次测试。然后每当我更新' sketch.js'文件我将在名称末尾的数字上加1。

请告诉我您对我的理想解决方案的看法,我应该使用其他方法清除我的网站吗?如果没有,我将如何测试该文件是否存在?

1 个答案:

答案 0 :(得分:0)

回答有关文件检查的问题(出于知识目的):

我假设你在使用P5.js作为帖子标签。

确实如此,要测试图像是否存在,您可以使用loadImage功能。这样你可以尝试将图像预加载到变量并测试对象是否存在(检查P5参考以获取有关如何执行此操作的代码)。

至于测试.js(或任何其他)文件的存在,您可以使用loadByteshttpGet尝试将文件加载到变量中,就像在图像示例中一样,test如果对象存在。

现在针对缓存问题:

你在这里想要实现的基本上是"版本化"。就像之前对该帖子的评论所说的那样,为此创建一个完整的检查非常痛苦,在某些情况下可能无法工作,甚至根本无法取消缓存优势。

事实上,直到最近,javascript还没有清除缓存的能力(只有少数浏览器实现了这一点,有些人认为存在安全风险,无法向开发人员公开此级别的浏览器)。因此,即使您检查文件是否存在,您也无法在所有浏览器中保证100%的缓存已清除。

一种方法是对文件的文件夹进行版本控制,而不是文件本身。例如,每个"新版本"您的" script.js"会有这样的网址:

http://yoururl.com/scripts/1.0.0/script.js -> Version 1.0.0
http://yoururl.com/scripts/2.0.0/script.js -> Version 2.0.0
http://yoururl.com/scripts/3.1.0/script.js -> Version 3.1.0

根据浏览器处理.HTML文件缓存的方式,您可以为页面上的资产(js,图像等)提供缓存优势,而基础.HTML文件上的文件夹版本不会更改。

要实现这一点,如果您使用静态HTML页面,Web服务器将自动添加" Last Modified"标题到您的页面,允许浏览器检查上一个缓存的.HTML文件是否仍然相同。如果未检测到任何更改,它将从缓存加载.HTML文件,否则它将从服务器加载新的.HTML。但是,如果您的网页是动态的,那么您必须添加" Last Modified"标题编程。