Vue2 Source
Vue2 Utils
deprecated warning
如何判断浏览器是否支持事件的 Passive 选项
addEventListener 一般有三个参数,passive 用来放在第三个参数的 passive 属性中,告诉浏览器是否会在事件的回调函数中使用 preventDefault。在浏览器页面滚动时, 由于要等待事件的回调函数执行完才能滚动页面,所以可以使用指示 passive 以提高滚动性能。在 VueJS 中,它只是用作一个设置选项,没有实际对应的功能。
以下代码定义了事件的第三个参数 opts 中的 passive 属性的 getter,只要浏览器读取了 passive 属性,就证明它会读取 passive 属性,换句话说,也就是支持 passive。
export let supportsPassive = false
if (inBrowser) {
try {
const opts = {}
Object.defineProperty(opts, 'passive', {
get() {
supportsPassive = true
}
})
window.addEventListener('test-passive', null as any, opts)
} catch (e: any) {}
}
String.repeat
一般的 String.repeat 的 polyfill 使用递归完成。只要测试能过,用在一般工程中没什么毛病,Vue 中的这个 repeat 函数则有稍许性能提升(也许在《JS 框架设计》里看到过?)。原理是如果 n 是 2 的倍数, 则将 str 翻倍,同时 n 减倍,以减少循环次数。
const repeat = (str, n) => {
let res = "";
while (n) {
if (n % 2 === 1) res += str;
if (n > 1) str += str;
n >>= 1;
}
return res;
};