美文网首页
保持对象同态

保持对象同态

作者: alue | 来源:发表于2024-09-12 21:22 被阅读0次

js 中存在一种优化技巧,就是保持对象同态。名词解释比较费劲,用代码来说明更清楚。如下所示,有三种定义对象的形式。

// setup
let _ = 0
// 1. monomorphic
const o1 = { a: 1, b: _, c: _, d: _, e: _ }
const o2 = { a: 1, b: _, c: _, d: _, e: _ }
const o3 = { a: 1, b: _, c: _, d: _, e: _ }
const o4 = { a: 1, b: _, c: _, d: _, e: _ }
const o5 = { a: 1, b: _, c: _, d: _, e: _ } // all shapes are equal
// 2. polymorphic
const o1 = { a: 1, b: _, c: _, d: _, e: _ }
const o2 = { a: 1, b: _, c: _, d: _, e: _ }
const o3 = { a: 1, b: _, c: _, d: _, e: _ }
const o4 = { a: 1, b: _, c: _, d: _, e: _ }
const o5 = { b: _, a: 1, c: _, d: _, e: _ } // this shape is different
// 3. megamorphic
const o1 = { a: 1, b: _, c: _, d: _, e: _ }
const o2 = { b: _, a: 1, c: _, d: _, e: _ }
const o3 = { b: _, c: _, a: 1, d: _, e: _ }
const o4 = { b: _, c: _, d: _, a: 1, e: _ }
const o5 = { b: _, c: _, d: _, e: _, a: 1 } // all shapes are different

表面上看,三种对象的定义完全等价,只是key的位置有变化而已。但用下面的测试代码可以看出,对象形态略有不同,导致了性能的巨大差异。

// test case
function add(a1, b1) {
  return a1.a + a1.b + a1.c + a1.d + a1.e +
         b1.a + b1.b + b1.c + b1.d + b1.e }
 
let result = 0
for (let i = 0; i < 1000000; i++) {
  result += add(o1, o2)
  result += add(o3, o4)
  result += add(o4, o5)
}

单一形态的对象,计算开销要小一个数量级。

原因是js引擎对单一形态的对象,有着更好的优化手段。

相关文章

  • 简单数学3:同态与同构的群及变换群

    同态映射 同态的映射就是能够保持运算的映射,即对于一个到的映射 ,中有运算,中有运算,如果 同态的群 如果上面的同...

  • python3同态加密算法实现

    目前同态加密算法分为加法同态和乘法同态,而加法同态中最经典的是paillier算法,乘法同态中最经典的是rsa算法...

  • Zremesher

    在保持4边面的同时,可以将高模按照结构 同态减少面数 Zremesher前后对比

  • 同态加密

    定义 同态加密(Homomorphic Encryption)是一种特殊的加密方法,允许对密文进行处理得到仍然是加...

  • 近世代数理论基础14:同构定理

    同构定理 同态的基本性质 设是同态映射,,令为S在映射f下的像集,对,令为集合的原像 引理:设是满同态,则有 1....

  • 近世代数理论基础21:环的同态与同构

    环的同态与同构 同态映射 定义:设R和是两个环,是到的一个映射,若,有 1. 2. 则称为同态映射 注:等式左边的...

  • 同态加密(1) GSW同态加密方案

    所有的更新都放在我的博客中, 本文地址为https://lingeros-tot.github.io/2019/0...

  • 情感类问题

    不同态度决定你们是否适合相处

  • 关于《人类简史》的一点想法

    最开始看到作者关于农业社会以及现代社会的想法感觉很新鲜,并且保持认同态度,但是仔细想一下,并不完全赞同。 作者非常...

  • 全同态加密

    同态加密方案提供了一种惊人的能力——能够在不解密的情况下,对密文数据进行计算。这使得您无需破坏敏感源数据,同时可以...

网友评论

      本文标题:保持对象同态

      本文链接:https://www.haomeiwen.com/subject/dowmljtx.html