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;
};

Copyright © 2024 Lionad - CC-BY-NC-CD-4.0