Skip to content

Memoizaiton for consequent method calls on the same object #15

@Envek

Description

@Envek

As far as I can tell from source code there is no memoization of fetched cache value for later cached method calls on the same object. Is it on purpose?

To be honest, this behavior seems to be pretty surprising:

class Foo
  include Cacheable
  cacheable :bar

  def bar
    "foo"
  end
end

foo = Foo.new

foo.bar # cache read and deserialization
foo.bar # cache read and deserialization
foo.bar # cache read and deserialization

Context: recently I saw a Rails app in the wild that cached some ActiveRecord model methods that in turn returned another ActiveRecord objects. And some places got terribly slow due to dozens of repeated calls to retrieve and deserialize which is especially slow and compute-intensive for AR objects, see this blog post for details (and yes, I know that doing so is a bad idea per se). So I had to get rid of cacheable in favor of pure memoization or manual caching with following memoization.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions