Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
make the cloning of the rule in the lookup table lazy
We create a big lookup table so that we can lookup the nodes by its
utilityName. This is used inside the recursive `@apply` code.

This big lookup table will clone every single rule and put it in,
however we don't need to clone everything! We are only interested in the
rules that have been actually applied.

This way we make the cloning of the rule lazy and only when we use this
exact rule.

There is an additional performace "issue" though: When we read the same
rule multiple times, it will clone every time you read from that object.
We could add additional memoization stuff, but so far it doesn't seem to
be the bottleneck. Therefore I've added a perf todo just to leave a mark
when this becomes the bottleneck.
  • Loading branch information
RobinMalfait authored and adamwathan committed Aug 18, 2020
commit f2e3e22c6b5bf217a59a7e1c11e389447dd7cfe8
6 changes: 5 additions & 1 deletion src/flagged/applyComplexClasses.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,11 @@ function buildUtilityMap(css) {
index,
utilityName,
classPosition: i,
rule: rule.clone({ parent: rule.parent }),
get rule() {
// TODO: #perf every time we "read" this value we will create a copy.
// Is this an issue?
return rule.clone({ parent: rule.parent })
},
})
index++
})
Expand Down