Angular管道记忆化:缓存参数集结果还是仅检测参数变化重计算?
Angular管道的记忆化缓存机制解析
Angular里的纯管道(默认创建的管道类型)是基于输入值+参数的组合来缓存转换结果的,并非仅检测参数变化就重新执行逻辑。
具体逻辑如下:
- 纯管道会将每次的输入值、管道参数与对应转换结果存入缓存
- 只有当输入值或参数发生实质变化(基本类型看值是否改变,引用类型看引用地址是否变更)时,才会重新调用转换函数计算新结果
- 若遇到之前已处理过的输入+参数组合,会直接复用缓存中的结果,跳过重复计算
拿你举的奇偶转换管道例子来说:当输入在0和1之间反复切换时,由于0和1都是已缓存过的输入值,Angular不会每次都执行判断奇偶的逻辑,而是直接取出之前缓存好的"even"(对应0)和"odd"(对应1)输出。
另外需要注意,非纯管道(声明时添加pure: false)没有缓存机制,每次Angular触发变更检测时,不管输入和参数有没有变化,都会重新执行转换函数。
内容的提问来源于stack exchange,提问作者lukasniessen
相关产品推荐
相关产品推荐

