使用位运算来做用户鉴权其实并不是一件新鲜事,已经有不少人讲过了。不过最近在看vue3源码的时候发现vue3在对VisualDOM做patch操作的时候竟然也使用了位运算进行flag的判断,便忽然来了兴趣,想要好好说道说道。
首先来看看vue3源码,已经去除了不必要的注释
patchFlags是VisualDOM中对vnode的类型标记,在更新DOM树的时候会根据vnode的类型来使用不同的更新策略,这里不展开说了,我们主要看这里对类型的定义。
(patchFlags.ts Github源码地址)
// Patch flags can be combined using the | bitwise operator and can be checked
// using the & operator, e.g.
//
// const flag = TEXT | CLASS
// if (flag & TEXT) { ... }
//
// Check the `patchElement` function in './renderer.ts' to see how the
// flags are handled during diff.
export const enum PatchFlags {
TEXT = 1,
CLASS = 1 << 1,
STYLE = 1 << 2,
PROPS = 1 << 3,
FULL_PROPS = 1 << 4,
HYDRATE_EVENTS = 1 << 5,
STABLE_FRAGMENT = 1 << 6,
KEYED_FRAGMENT = 1