课程章节介绍
好,我们来看这一页幻灯片,它讲的是为什么在 Salesforce 里你改了 Lightning Web Components 的代码,有时候不会马上看到效果。
简单来说,,罪魁祸首就是“HTTP 缓存”,。浏览器会把组件文件存下来,这样下次打开更快,但也导致新代码不能立刻呈现。
具体来说,服务器返回的 `Cache-Control` 头里设置了一个 ,`max-age=300`,,也就是 5 分钟的新鲜期。在这 5 分钟之内,浏览器直接用自己的缓存,根本不会去问服务器。
更麻烦的是,后面还跟着一个 ,`stale-while-revalidate=300`,。什么意思呢?就是当那 5 分钟新鲜期过了之后,如果又有请求,浏览器会先返回手里这份“旧”的缓存给用户,同时在后台悄悄去服务器取最新版本。这查询和更新期间,旧内容又被多服务了最多 5 分钟。
所以加起来,你改完代码,最坏的情况下,要等 ,10 分钟, 才会在浏览器里看到效果。这个行为在所有 Salesforce 支持的浏览器上都一样——只有一个例外:Safari。Safari 不吃这一套,它有自己内部的机制。
接下来说说组件是怎么被请求的。流程里,首先会去一个类似 `/components/uid=LATEST` 这样的地址,服务器会返回一个 ,302 重定向,,浏览器再跳转到一个带有具体版本号的 URL 上去拉取文件。这就是为什么每次部署新版本,最后都会指向不同的文件地址。
如果你用 ,收件箱模式,,像在移动端 App 里,那这套缓存机制就完全不生效了,它会直接获取最新内容。
那开发的时候,等 10 分钟太慢了怎么办呢?你可以给自己开调试模式。去 ,“设置”, 里搜索 ,“调试模式用户”,,把你自己的用户加进去,然后点“启用”。启用后,用户旁边会有一个复选标记,代表你已经在调试模式了。调试模式下,很多缓存都会绕开,你的代码修改马上就能看到。
有的人可能会想,那我直接在会话设置里把“持久浏览器缓存”关掉不是更省事?确实,在开发沙箱里,你可以关掉这个选项,但是请注意,,这会严重影响性能,,会让整个页面加载变慢很多。而且,这个设置只对开发环境生效,一旦部署到生产环境,你必须把它重新打开,不然用户会感觉系统很慢。最关键的一点,这个会话设置里的缓存开关,和前面说的组件 HTTP 缓存完全是两码事,它对那个 10 分钟的延迟没有任何影响,别弄混了。
总结就是:开发阶段想立即看到改动,就,用调试模式,;生产环境那 10 分钟延迟是故意的,为了性能,你得心里有数,不要误以为部署没成功。
关键词
LWC
Lightning Web Components
Salesforce