javascript - AngularJS 摘要回调

标签 javascript performance angularjs caching angularjs-directive

我发现自己经常需要在每个摘要周期缓存数据,例如,映射/归约函数或深度嵌套的访问器。为此,设置摘要回调以清除摘要循环之前/之后的缓存值会很有用。是否有一种“Angular 方式”来实现这一点?

最佳答案

你可以用 $rootScope.$watch 做的一件事是给它一个没有“监听器”的函数(所以只用一个不返回任何东西的函数来调用它)。这有效地允许您在摘要发生时通过提供的函数收到通知。

$rootScope.$watch(function() {
    // a digest is happening.
});

每个周期此监听器将被调用两次,但我不知道我是在没有 hack 的情况下开始还是结束。所以我可以只使用一个标志来帮助我跟踪我们所处的状态,当我们从摘要中转换到摘要外时,我们可以清除缓存。 In this example ,我只是创建了一个服务,该服务使用 $cacheFactory 创建缓存并返回它,但会跟踪该状态并在适当的时间清除它。

在我粗略的例子中,这似乎是合理的。但是,马上我们就会遇到摘要缓存可能会过早清除的问题。您可以在该示例的控制台消息中看到这一点,其中最后一个 watch 语句在缓存被清除后 发出。这是因为我无法控制 watch 的顺序以确保我的服务添加的是最后一个。

但是,如果我们查看 $rootScope 的源代码,我们会看到一个名为 $$postDigest 的未记录的内部函数,它将一些函数添加到一个被处理的队列中当摘要完成时。因此,我可以使用相同的技术,但使用 $$postDigest 延迟清理,如 this example 中所示.它有效,但我们在使用内部 API 时如履薄冰。自行承担风险。

关于javascript - AngularJS 摘要回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23562199/

相关文章:

java - 用于查找节点最可能祖先的图形算法

performance - Erlang 模式匹配位串

javascript - AngularJS:将算术运算符传递给 ng-value

javascript - 我无法显示 Base 64 编码图像?

php - 类似于 niftyplayer 的可编写脚本的 mp3 播放器

javascript - Canvas/JavaScript - 单击鼠标翻转正方形的颜色

javascript - 使用 fetch 和 await 时如何将用户重定向到不同的页面?

javascript - 如何使用 javascript 循环和数组显示图像幻灯片?

css - <img/> 与 background-image (css) 在性能上的对比

javascript - AngularJS - 'DashboardController' 未注册