【问题标题】:Generate Hash fron an Object从对象生成哈希
【发布时间】:2018-04-02 20:59:55
【问题描述】:

在我的React 应用程序中,我目前正在考虑优化性能的方法。阅读了lazy evaluation,我想知道是否可以根据obj的当前内容生成唯一的哈希码。

目的是比较哈希值以找出 obj 中的任何 prop 是否发生了变化。记忆。

这可能吗?

罗曼评论后更新: 为了澄清,我想知道是否已经存在这样的图书馆。为了进一步详细说明您的优点,在我的情况下,对于生成哈希,它只是用于生成 seq 的值(而不是键)。此外,所有值都将是字符串或转换为字符串,可以忽略 funcs。感谢您的思考,我正在考虑尝试编写这样一个非常具体的案例小型库......

【问题讨论】:

    标签: javascript reactjs optimization lazy-evaluation memoization


    【解决方案1】:

    在 Javascript 中没有直接可用的散列,而且可能永远不会有。它的问题在于对象相等性的定义。两个认为相等的对象应该产生相同的哈希值,不是吗?但是你怎么知道两个对象是否相等呢?如果您只使用 === 比较两个对象,那么您是在比较指针而不是内容,在这种情况下,您不需要哈希。所以,相等应该涉及到对象的内容,比如如果a = {b: 0, c: 1} and b = {b: 0, c: 1},那么它们是相等的。但是,如果属性值不是数字,而是其他对象或函数,会发生什么?你会比较属性指向同一个对象还是递归比较?那么函数呢?

    所以,如果你想实现一个哈希,你首先需要对对象相等的含义做出几个决定。

    【讨论】:

    • 澄清一下,我想知道是否已经存在这样的库。为了进一步详细说明您的优点,在我的情况下,对于生成哈希,它只是用于生成 seq 的值(而不是键)。此外,所有值都将是string 或转换为字符串,函数可以忽略。感谢您的思考,我正在考虑尝试编写这样一个非常具体的案例小型图书馆......
    【解决方案2】:

    React 的主要优势之一是您无需构建自己的差异算法。有关 React 方法的一些技术细节的描述,请参阅 this article

    【讨论】:

    • 谢谢 Yosef,但是,在很多情况下,您可能希望在不需要时阻止 React 运行它自己的差异算法。将此步骤视为 React 自己的逻辑之前的步骤。这类似于 Redux 如何处理更新为“智能”组件的状态。希望澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2017-05-24
    • 2019-11-30
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多