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

如何测试javascript中是否存在文件,javascript,caching,browser-cache,p5.js,Javascript,Caching,Browser Cache,P5.js,因此,我的网站完全取决于其上的脚本和图像,问题是所有这些都保存到缓存中,因此用户无法看到我的更新,除非他们清除缓存,或以私人浏览模式打开。我正在尝试制作一个系统,检查是否需要清除缓存,如果需要,则自动清除缓存 我的想法是在html页面中有一个脚本,测试“sketch1.js”是否存在,如果不存在,清除缓存,然后再次测试。然后每次我更新'sketch.js'文件时,我都会在名称末尾的数字上添加1 请告诉我你认为我的理想解决方案是什么,我是否应该使用不同的方法来清除我的网站cahce?如果没有,我将

因此,我的网站完全取决于其上的脚本和图像,问题是所有这些都保存到缓存中,因此用户无法看到我的更新,除非他们清除缓存,或以私人浏览模式打开。我正在尝试制作一个系统,检查是否需要清除缓存,如果需要,则自动清除缓存

我的想法是在html页面中有一个脚本,测试“sketch1.js”是否存在,如果不存在,清除缓存,然后再次测试。然后每次我更新'sketch.js'文件时,我都会在名称末尾的数字上添加1


请告诉我你认为我的理想解决方案是什么,我是否应该使用不同的方法来清除我的网站cahce?如果没有,我将如何测试文件是否存在?

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

我在这里假设您按照post标记使用P5.js

如果是这样,要测试图像是否存在,可以使用该函数。通过这种方式,您可以尝试将图像预加载到一个变量,并测试对象是否存在(查看P5参考,了解如何执行此操作的代码)

至于测试.js(或任何其他)文件是否存在,您可以使用或尝试将该文件加载到变量中,并像在图像示例中一样,测试对象是否存在

现在讨论缓存问题:

您在这里试图实现的基本上是“版本控制”。正如在文章前面的评论中所说的那样,为此创建一个完整的检查是非常痛苦的,在某些情况下可能不起作用,甚至可能根本就没有缓存的好处

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

一种方法是对文件的文件夹进行版本设置,而不是对文件本身进行版本设置。例如,“script.js”的每个“新版本”都有如下URL:

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文件。但是,如果您的页面是动态的,那么您必须以编程方式添加“上次修改的”标题。

您不能设置服务器提供的文件的缓存策略吗?我真的不知道您的意思,缓存策略是什么?我对这个网站有点陌生hosting@CameronSchoenecker:web服务器的响应包括标题(元数据)。其中一些标题可以告诉浏览器是否应该缓存内容以及缓存多长时间。服务器可以告诉浏览器缓存文件多长时间。如果您想更改缓存内容的方式,通常应该更改服务器上的设置,而不是尝试在客户端使用JavaScript对其进行攻击。我会从谷歌搜索“缓存策略”开始,或者查看服务器主机的设置或文档。我想我明白了,那么这对我的问题意味着什么?这是一个容易解决的问题吗?