aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer
diff options
context:
space:
mode:
authorSean Griffin <sean@seantheprogrammer.com>2015-09-28 17:12:28 -0400
committerSean Griffin <sean@seantheprogrammer.com>2015-10-02 08:03:11 -0400
commit07723c23a7dc570beae73c074ad37227e3e8a06e (patch)
tree442e264cad0f2c99c8402d3a7ceea73beb2dadbc /actionmailer
parent9db73a2591e43d1851411727d6594a72efa35663 (diff)
downloadrails-07723c23a7dc570beae73c074ad37227e3e8a06e.tar.gz
rails-07723c23a7dc570beae73c074ad37227e3e8a06e.tar.bz2
rails-07723c23a7dc570beae73c074ad37227e3e8a06e.zip
Further encapsulate dirty checking on `Attribute`
We can skip the allocation of a full `AttributeSet` by changing the semantics of how we structure things. Instead of comparing two separate `AttributeSet` objects, and `Attribute` is now a singly linked list of every change that has happened to it. Since the attribute objects are immutable, to apply the changes we simply need to copy the head of the list. It's worth noting that this causes one subtle change in the behavior of AR. When a record is saved successfully, the `before_type_cast` version of everything will be what was sent to the database. I honestly think these semantics make more sense, as we could have just as easily had the DB do `RETURNING *` and updated the record with those if we had things like timestamps implemented at the DB layer. This brings our performance closer to 4.2, but we're still not quite there.
Diffstat (limited to 'actionmailer')
0 files changed, 0 insertions, 0 deletions