我有一个Flash项目,它有很多源文件.我有一个相当频繁使用的课程,称之为Jenine.我最近(也许,无情地)将Jenine从一个名称空间重新定位到另一个名称空间.我以为我们已经准备好了 - 我以为是时候了.新Jenine在各方面都做得更好 - 她已经失去了一些代码膨胀,她已经脱离了一些残余的阶级关系,她终于回到了她一直秘密知道的命名空间,这是她真实的那个曾经属于.她是她自己的一员.
不幸的是,Flash没有这个.也许它已经形成了一种依恋.也许它不希望 Jenine脱钩.无论哪种方式,它都坚持在其记忆中的旧的,完美的Jenine版本.它拒绝继续前进.它忽略了她的(函数)调用.它试图忘记她的新的公共界面.相反,它构建的每个Jenine实例始终是旧版本的副本,直到其类路径:
var jenineInstance:Jenine = new Jenine();
trace( getQualifiedClassName(jenineInstance));
// Should print: com.newnamespace.subspace::Jenine
// Prints: com.oldnamespace.subspace::Jenine
// Ah, young love!
Run Code Online (Sandbox Code Playgroud)
我们打了.我对自己所说或做过的一些事情并不感到骄傲.最后,在愤怒的高潮中,我完全删除了所有Jenine的引用.她完全被系统彻底清除了.我的光标落在"清空垃圾"菜单选项上,就像棺材的冷盖一样.
我认为Flash无法恢复.直到今天,它仍然依附于珍妮的记忆.她的旧的,不完美的定义仍然像我被遗弃的幽灵一样漂浮在我的项目中.每当我强迫Flash编译时,它仍然会将她的爱情插入到我的电影中,将她的定义融入其他生活课程中,就像一个小神社.我想知道他们是否能看到她.
Flash和我不再谈论了.我写了我的代码,它编译它.在镇上有一个名叫Summer的新女孩看起来几乎与Jenine完全相同,好像有人刚刚将她的源代码批发复制到一个新的类中,但Flash并没有表现出任何兴趣.大多数时候,当它认为我不看时,它只是在我的评论中徘徊并写下糟糕的诗歌.
我希望没有其他人有类似的经历,这只是一个奇怪的,痛苦的波纹在可怕的黑暗泻湖,即Flash代码库.如果你有一些侥幸的机会,或者你知道如何删除编译器正在使用的任何该死的缓存,请帮助.
我有一个已经初始化的Git存储库,我添加了一个.gitignore文件.如何刷新文件索引以便忽略我想忽略的文件?
我正在修改网站的外观(CSS修改)但由于恼人的持久缓存而无法在Chrome上看到结果.我试过Shift+刷新但它不起作用.
如何暂时禁用缓存或以某种方式刷新页面以便我可以看到更改?
browser caching google-chrome browser-cache google-chrome-devtools
我们的调查向我们表明,并非所有浏览器都以统一的方式尊重http缓存指令.
出于安全原因,我们不希望在我们的应用程序某些网页缓存,有史以来,通过Web浏览器.这必须至少适用于以下浏览器:
我们的要求来自安全测试.从我们的网站注销后,您可以按后退按钮查看缓存页面.
自升级到iOS 6以来,我们看到Safari的Web视图可以自由地缓存$.ajax调用.这是在PhoneGap应用程序的上下文中,因此它使用Safari WebView.我们的$.ajax调用是POST方法,我们将缓存设置为false {cache:false},但仍然会发生这种情况.我们尝试手动添加TimeStamp标题,但它没有帮助.
我们做了更多研究,发现Safari只返回具有静态功能签名并且不会因呼叫而改变的Web服务的缓存结果.例如,想象一个名为:
getNewRecordID(intRecordType)
Run Code Online (Sandbox Code Playgroud)
该函数反复接收相同的输入参数,但每次返回的数据应该不同.
一定是苹果急于让iOS 6拉链令人印象深刻,他们对缓存设置感到满意.还有其他人在iOS 6上看到过这种行为吗?如果是这样,究竟是什么导致了它?
我们发现的解决方法是将函数签名修改为如下所示:
getNewRecordID(intRecordType, strTimestamp)
Run Code Online (Sandbox Code Playgroud)
然后总是传入一个TimeStamp参数,并在服务器端丢弃该值.这解决了这个问题.我希望这能帮助其他一些在这个问题上花费15个小时的穷人,就像我一样!
我注意到一些浏览器(特别是Firefox和Opera)非常热衷于使用.css和.js文件的缓存副本,即使在浏览器会话之间也是如此.当您更新其中一个文件但用户的浏览器继续使用缓存副本时,这会导致问题.
问题是:在更改文件时,强制用户浏览器重新加载文件的最优雅方法是什么?
理想情况下,解决方案不会强制浏览器在每次访问页面时重新加载文件.我会发布自己的解决方案作为答案,但我很好奇,如果有人有更好的解决方案,我会让你的投票决定.
更新:
在这里讨论了一段时间后,我发现John Millikin和da5id的建议很有用.事实证明,有一个术语:自动版本控制.
我在下面发布了一个新的答案,它是我原来的解决方案和John的建议的组合.
SCdF建议的另一个想法是将伪造的查询字符串附加到文件中.(一些Python代码自动使用时间戳作为伪造的查询字符串由pi提交.).但是,有一些关于浏览器是否会使用查询字符串缓存文件的讨论.(请记住,我们希望浏览器缓存文件并在以后的访问中使用它.我们只希望它在更改后再次获取文件.)
由于不清楚伪造的查询字符串会发生什么,我不接受这个答案.
" 缓存不友好代码 "和" 缓存友好 "代码之间有什么区别?
如何确保编写高效缓存代码?
标题Cache-Control: max-age=0意味着内容被认为是陈旧的(并且必须立即重新获取),这实际上与之相同Cache-Control: no-cache.
我们目前正在进行私人测试,因此仍然在进行相当快速的更改,尽管显然随着使用量开始增加,我们将放慢这一过程.话虽这么说,我们遇到的一个问题是,在我们用新的JavaScript文件推出更新之后,客户端浏览器仍然使用文件的缓存版本,但他们看不到更新.显然,在支持调用上,我们可以简单地通知他们进行ctrlF5刷新以确保他们从服务器获取最新文件,但最好在此之前处理它.
我们当前的想法是简单地将版本号附加到JavaScript文件的名称上,然后在进行更改时,增加脚本上的版本并更新所有引用.这绝对可以完成工作,但更新每个版本的引用可能会变得很麻烦.
我确信我们不是第一个处理这个问题的人,我想我会把它扔给社区.在更新代码时,如何确保客户更新缓存?如果您使用上述方法,您是否正在使用简化更改的流程?