最近我注意到调度某个动作的时间比它应该的要长,所以我去添加一些计时器。
这是操作代码:
// ...
mutations: {
setPrimary(state, data) {
state.resources.primary = data
}
},
// ...
actions: {
async load({ commit }) {
const start = performance.now()
// ...
const apiResult = await apiClient.get("/")
const startCommit = performance.now()
commit("setPrimary", apiResult)
console.log(`commit finished in ${performance.now() - startCommit} ms`)
console.log(`action finished in ${performance.now() - start} ms`)
}
}
以及调度动作的代码:
const start = performance.now()
await store.dispatch("load")
console.log(`dispatch finished in ${performance.now() - start} ms`)
现在预期的输出将是时间非常接近,但情况恰恰相反:
action finished in 820
dispatch finished in 1365 ms
这对我来说很令人困惑,因为调用dispatch
不应该增加如此巨大的开销。到目前为止,我不知道它可能来自哪里。
编辑:
事实证明,这是由commit
通话引起的。没有这个,延迟就会消失。像这样对提交进行计时表明执行只需要 1 毫秒,这意味着这在某种程度上具有我不知道的副作用。