Angular 在生产中禁用缓存的部分

2024-01-10

我正在开发网站,但是每次我将新版本上传到服务器时,用户都需要清理缓存才能看到更改,这个问题的解决方案是什么?

我尝试通过两种方法来解决这个问题:

The first way:

myApp.run(function($rootScope, $templateCache) {
   $rootScope.$on('$viewContentLoaded', function() {
      $templateCache.removeAll();
   });
});

但这种方式有一个问题,比如ui.bootstrap及其抛出错误。

The second way:

$rootScope.$on("$stateChangeStart", function( event, toState, current ) {

    if (typeof(current) !== 'undefined'){
      $templateCache.remove(current.templateUrl);
    }
})

这不会引发错误,但我不知道这个解决方案是否正确,如果它有效,我需要做什么?


这是服务器配置的问题,以及它如何告诉浏览器缓存的问题HTML用作模板部分的文件。

了解浏览器缓存

你正在尝试做$templateCache.remove(..) and $templateCache.removeAll()这是行不通的,因为模板尚未加载,或者浏览器将使用缓存的版本重新加载它们。

您需要检查浏览器中的网络历史记录,以确保服务器正确处理 HTML 请求。发送您期望的缓存标头设置。对于每个部分,应该有一个302(未修改)响应。当 HTML 文件发生更改时,服务器应将新修改的文​​件发送到浏览器。

另一个问题是服务器上的默认缓存持续时间可能太长。这告诉浏览器应该多久检查一次服务器以发送新版本的 HTML 文件。您可能希望将此持续时间缩短至 1 小时。

大多数网络服务器都预先配置为采用扩展名为.html永远不会改变并且是静态的。因此,默认设置是让浏览器尽可能长时间地缓存这些文件。

您可能想将这些文件重命名为类似的名称.ahtml并将其用作部分文件名。不应该有任何预定义的配置来强制兑现这些文件类型。

了解 $templateCache

这是 AngularJS 中一个非常简单的缓存服务。如果在内存中找不到该 URL,则会从服务器加载该 URL。下次当应用程序运行时需要该部分时,将使用内存版本。该服务器的使用与服务器/浏览器缓存无关。

模板的正确方式

最佳实践是创建一个包含应用程序所需的所有部分模板的 JavaScript 文件。该 JS 文件将调用$templateCache服务并添加这些模板。这提高了应用程序的启动性能,并消除了处理服务器/浏览器缓存的问题。

有几个 grunt 任务可以做到这一点。

https://www.npmjs.com/package/grunt-angular-templates https://www.npmjs.com/package/grunt-angular-templates

https://github.com/karlgoldstein/grunt-html2js https://github.com/karlgoldstein/grunt-html2js

将其与 JavaScript 压缩器结合起来,并将所有 JS 合并到一个文件中,这样就可以顺利完成任务了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 在生产中禁用缓存的部分 的相关文章

  • 在 Javascript 中获取第一个数字出现后的子字符串

    我正在尝试提取第一个数字之后 并包括 的字符 ABC 123SD gt 123SD 123 gt 123 123SD gt 123SD ABC gt 我当前的解决方案如下 var string1 ABC 123SD var firstDig
  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • 如何使用 $resource 获取状态代码?

    我提出请求的工厂在这里 angular module myapp factory testResponse http resource AppConfig routeParams rootScope function http resour
  • Javascript - 在加载所有图像后执行

    看了别人的问题我想 window onload 会回答我的问题 我已经尝试过这个 但它会在页面加载时立即执行代码 而不是在图像加载之后 如果有什么区别的话 图像来自 CDN 并且不是相对的 有人知道解决办法吗 我没有使用 jQuery 想要
  • 在 javascript、jQuery 或 css 中,如何让 div 或 iframe 展开以填充其余空间

    我有三个 iframe 我将顶部 iframe 设置为 50px 高度 将底部 iframe 设置为 50px 但我希望中间 iframe 扩展以填充其余空间 有没有一种技术可以用来对任何窗口屏幕尺寸执行此操作 谢谢 example
  • 创建一个简单的 10 秒倒计时

    我想要一行这样写的 Your download will begin in 10 9 8 etc Beginning on page load seconds 我已经设置了 10 秒下载文本 并且我还查看了其他 stackoverflow
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • 如何以编程方式退出或关闭 Javascript UWP 应用程序? (Windows 10)

    我制作了一个游戏 它需要自己的退出按钮 我无法使用CoreApplication Exit https msdn microsoft com en us library windows apps windows applicationmod
  • 如何用javascript正确读取php cookies

    考虑这个 php 和 javascript 代码 然后我在控制台中看到的是 utma 111872281 291759993 1444771465 1445374822 1445436904 4 utmz 111872281 1444771
  • 无法实例化模块 [$injector:unpr] 未知提供程序:$routeProvider

    我从 AngularJS 升级时收到此错误1 0 7 to 1 2 0rc1 ngRoute 模块不再是核心的一部分angular js文件 如果您继续使用 routeProvider 那么您现在需要包括angular route js在你
  • 如何使用 Angular JS 单击时将 html 模板附加到 div/指令?

    我有这种情况
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • 在 jQuery 可排序中对多个选定项目进行排序?

    我试图在 jQuery 可排序集中选择多个项目 然后将选定的项目一起移动 这是我的弱点开始尝试使其发挥作用 http jsfiddle net benstenson CgD8Y 这是代码 HTML div class container d
  • JavaScript 测验在提出所有问题之前结束

    我现在正在学习 JavaScript 并且正在创建一个测验 我的测验运行正常 控制台中没有任何错误 但它会跳过问题 有时会在回答所有问题之前结束测验 即使给出正确答案 也会减少时间 我不太确定为什么它会这样做 因为在我看来它的编码是正确的
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • JavaScript:测试与执行

    我想知道检查字符串 例如邮件 密码等 的最佳方法是什么 i exec a vs i test a exec返回值 test true test 1 way var mail req body mail if check mail exec
  • 将 RequireJS 与遗留代码结合使用

    我正在处理一个非常大的项目 该项目使用 包含带有脚本标记的 javascript 文件的旧版 JSP 页面 使用其他 javascript 模块而不使用 RequireJS 的骨干模型和视图 现在 我们希望开始将 RequireJS 与 j

随机推荐

  • 在 GraphQL 中处理 Mongoose 填充的字段

    我如何表示一个可以是简单字段ObjectId字符串还是填充的对象实体 我有一个代表 设备类型 的 Mongoose 架构 如下所示 assetSchema js import as mongoose from mongoose const
  • 创建 png 文件

    我做了一个函数来处理 jpg 和 png 文件 但是在尝试上传 png 文件时出现错误 这是函数 function createImg type src dst width height quality newImage imagecrea
  • C 和 C++ 之间的内存布局兼容性

    我正在建造一个C 使用许多函数的库struct定义在一个C图书馆 为了避免将任何代码移植到 C 我将典型的条件预处理添加到 C 头文件中 例如 my struct h of the C library include
  • Azure 容器注册表保留策略

    我有一个 ACR 它包含适用于我的生产和开发环境的 docker 映像 由于每天都有新的图像被推送 我正在尝试设置保留策略 我的具体用例如下 根据该图像 假设我在 ACR 中有 100 个图像 第 100 个图像由开发环境消耗 然而 生产运
  • C++ 访问向量

    I have std vector其中包含我自己的类 我必须访问它的函数和空隙 class A private int var vector
  • 在 Electron 渲染器进程中读取 Windows 命令行选项

    我在 Windows 中部署了一个 Electron 应用程序 我正在尝试在 exe 上添加命令行选项 C Program Files MyApp exe 调试 如何读取我的应用程序内的调试标志 我尝试使用 process argv 但调试
  • 有没有办法更改领域数据库中的数据类型?

    正如您所看到的图像 我完全搞乱了数据类型 红色圆圈 有没有办法将数据类型更改为整数 EDIT 我想将数据类型从 String 更改为 Int 并且我有现有数据 因此我无法从新领域开始而只更改 var 类型 class Item Object
  • Q_DECLARE_METATYPE 是 boost::multi_array

    我正在尝试使用 Qt 的信号和槽机制传递表示为 boost multi array 的多维数组 我尝试使用以下代码声明元类型 Q DECLARE METATYPE boost multi array
  • MVC 4 SIMpleMembership 与 LDAP

    我想尝试使用 simpleMembership 但将其连接到我们的 LDAP 我在网上没有看到任何关于这样做的内容 只使用 SQL 有谁知道这是否可能并能引导我走向正确的方向 我认为您需要创建一个继承自 ExtendedMembership
  • 结构 - 访问结构元素,不带 .和->

    我需要访问嵌套结构中的一些元素而不使用 and gt 我需要打印出以下值keyValue and alternateKeyValue从测试笔记本电脑定义中不使用 or gt 运算符直接引用 qwerty 结构或其成员 这是结构 typede
  • 如果在接口中声明方法时将注释与方法相关联,我们是否可以强制实现类中存在注释?

    这是关于 Java 中注释的使用 我在接口中声明方法时将注释与方法相关联 在实现时 如何确保该注释与 Override注释一起携带 如果没有 它应该抛出编译错误 Thanks 您不能在编译器中强制执行此操作 不 当在给定类上查找注释时 工具
  • 在 RazorEngine 中使用内部属性

    我们的领域模型属性都是 内部 的 以保护我们所采用的 BDD 方法 我真的很喜欢把一切都内部化 最近 我试图让 RazorEngine 使用这些具有内部成员的域模型之一来处理模板 当它编译时 我收到错误 Attendee FirstName
  • 函数参数类型取决于其他参数的类型

    我正在尝试编写一个具有以下类型签名的函数 范围a是任一类型string or undefined 范围b is a string if a也是一个string 否则它是一个number 到目前为止我的方法如下 function myFunc
  • 对于 .net 开发人员来说,进入移动开发的学习曲线是怎样的?

    对于 net 开发人员来说 进入移动开发的学习曲线是怎样的 有多少种不同的操作系统运行 net windows mobile 和 windows ce 一样吗 学习曲线 我不想说 这取决于 但确实如此 并且取决于几个因素 您的 NET 开发
  • 如何在android中动态添加项目到微调器?

    如何在android中动态添加项目到微调器 Spinner spinner Spinner findViewById R id mySpinner ArrayAdapter
  • 将十六进制字符串转换为十进制整数

    我正在编写一个 Rust 程序 用于读取 I2C 总线并保存数据 当我读取 I2C 总线时 我得到如下十六进制值0x11 0x22 etc 现在 我只能将其作为字符串处理并按原样保存 有没有办法可以将其解析为整数 有没有内置的功能 在大多数
  • 下划线、名称和文字运算符

    我关于名称中下划线的问题得到了部分回答here https stackoverflow com q 12721584 1275653但要么答案不完整 要么我不完全理解 教派 C 11 标准的 2 14 8 7 声明了这一点文字运算符举个例子
  • 使用 Linq.Expressions.Expression 排序

    我写了这段代码来排序IQueryable
  • MongoDb 查询和 system.linq

    当我使用 System linq 查询 MongoCollection 中的对象时 var result collection Find query Where x gt x something something 这是对数据库还是内存中的
  • Angular 在生产中禁用缓存的部分

    我正在开发网站 但是每次我将新版本上传到服务器时 用户都需要清理缓存才能看到更改 这个问题的解决方案是什么 我尝试通过两种方法来解决这个问题 The first way myApp run function rootScope templa