![]() |
1
34
我认为许多Rails开发人员并不完全了解Memonization的功能和工作原理。我见过它应用于返回延迟加载集合(如Sequel dataset)的方法,或者应用于不带参数但基于实例变量计算某些内容的方法。在第一种情况下,回忆录只不过是开销,而在第二种情况下,它是令人讨厌且难以追踪的bug的来源。 不
还有其他一些情况下,记忆是不合适的,比如上面的问题和答案,但我认为这三种情况并不明显。 最后一项可能是最重要的:记忆根据方法的参数缓存结果,如果方法看起来像这样,则无法记忆:
然而,这两种方法都可以重写,以利用记忆化(尽管在这两种情况下,由于其他原因,显然不应该这样做):
(假设
|
![]() |
2
10
当一个方法从多个表中获取数据,并在返回结果对象之前执行一些计算,并且该方法多次出现在请求中时,记忆可能是有意义的。
|
![]() |
3
2
也许我的经验是一个很好的例子,说明什么时候不应该使用memoize。在我的订单模型中,我记录了两个简单的计算结果,即订单小计、订单税;以及模型对象,即订单、最近使用的信用卡。在后一种情况下,当记忆一个返回CreditCard对象的方法时,我在尝试更新记忆对象上的属性时会出现“冻结哈希”错误。订单#最近的#信用卡#用过的#冻结?当方法被记忆时返回true,这当然不是我想要的。 我的收获很简单:对返回简单数据类型(整数、浮点等)的昂贵操作使用memoize,但在返回复杂对象时不使用memoize |
![]() |
S. Jacson · 任意两台发电机的速度差(内置功能) 2 年前 |
![]() |
Sadeq Dousti · 相当于“嵌套删除”的执行性能SQL查询 2 年前 |
![]() |
Prince · 复制大型文件需要更多时间 2 年前 |
![]() |
Sagar · 为什么在循环之外声明变量会更快? 2 年前 |
![]() |
seco · 如何在不挂起页面的情况下加载JS 2 年前 |