【问题标题】:Blazor server force a cache reloadBlazor 服务器强制缓存重新加载
【发布时间】:2021-04-12 06:17:51
【问题描述】:

我有一个网页,最初是作为 Blazor WASM 项目启动的,并检查了 PWA,由于初始加载时间,我决定将其更改为 Blazor 服务器项目。现在一切正常,除了在 WASM 项目时打开页面的桌面。他们完全忽略服务器并只运行原始网页,如果我执行 shift-control-r 显示新网页但无论何时我返回它都会显示原始 WASM 页面。

有谁知道让原始wasm更新到新版本客户端的方法。我什至关闭了网络服务器,网页仍然在本地运行,就像它甚至从未与服务器进行过检查一样。

谢谢, 蒂姆

【问题讨论】:

    标签: blazor blazor-server-side blazor-webassembly


    【解决方案1】:

    您可以尝试将server pre-rendering 用于 PWA,这可能有助于解决最初的速度问题,同时让已经拥有 PWA 的用户继续使用它。

    在 Service Worker 中更新 PWA 版本并处理一些事件可以让您提示用户进行更新。坦率地说,如果他们有旧版本 - 我不确定如果他们不下载新的 service worker,你可以做些什么。我可以建议您查看this sample app 以了解执行此类自定义提示的一种方法。我有一个朋友不得不放弃整个应用程序并开始使用不同的主页,正是因为他们无法让老服务人员放弃客户端设备上的缓存。

    【讨论】:

    • 我喜欢 PWA 的想法,并查看了预渲染以帮助提高速度,但没有一个独立于用户工作的良好更新机制,我决定回到服务器 blazor。希望除了移动到另一个主页之外还有另一种解决方案。
    • 尝试更新worker以包含新版本的事件处理,也许那些缓存它的人会得到提示并重新加载
    • 感谢您的建议,现在我刚刚更改了域并从 Blazor 服务器开始,它似乎按预期工作。我已经尝试了我在互联网上可以找到的所有内容,除非用户进行硬刷新,否则 WASM 不会更新。它需要一种更好的方法来从主机端触发更新。
    【解决方案2】:

    我终于找到了一个对我有帮助的答案。如果您不需要 PWA,则可以将其删除,即使在删除缓存并完全重新加载后,Chrome(可能还有其他浏览器)也应该停止依赖旧客户端。因为完成此操作后,我的 Chrome 仍然重新加载它。对于我的应用,我不需要使用此缓存功能或将其安装为应用。

    我在这里找到了答案: Blazor Chrome caching issues

    如何移除 PWA:

    1. 从 wwwroot 中删除以下文件:
    /wwwroot/manifest.json
    /wwwroot/service-worker.js
    /wwwroot/service-worker.published.js
    
    1. 从 /wwwroot/index.html 中删除这一行
    <script>navigator.serviceWorker.register('service-worker.js');</script>
    
    1. 从您的 csproj 文件中删除这些行
    <ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
    <ServiceWorker Include="wwwroot\service-worker.js" PublishedContent="wwwroot\service-worker.published.js" />
    

    另外...要真正摆脱 Chrome 中的应用程序,因为我已经以这种方式加载了它,我将它作为应用程序安装,然后卸载该应用程序并将其从 Chrome 中删除。这终于让我摆脱了 Chrome 保留应用程序的整个循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 2021-10-08
      • 2012-06-13
      相关资源
      最近更新 更多