mirror of
https://github.com/servo/servo.git
synced 2025-09-30 08:39:16 +01:00
Reuse StylesheetContent
for inline style sheets with identical content (#38540)
For duplicate style sheets with identical content, `StylesheetContents` can be reused to avoid redundant parsing of the inline style sheets. Since duplicate stylesheets is a common case with web components, this change will significantly improve performance. Additionally, the cache hit rate of stylo's `CascadeDataCache` can now be significantly improved. When shared `StylesheetContents` is modified, copy-on-write will occur to avoid affecting other sharers. And then updates the references to `CssRule` or `PropertyDeclarationBlock` stored in the CSSOMs to ensure that modifications are made only on the new copy. Signed-off-by: sharpshooter_pt <ibluegalaxy_taoj@163.com>
This commit is contained in:
parent
f6b77f94e2
commit
6e6ef513a9
25 changed files with 711 additions and 125 deletions
|
@ -397,7 +397,7 @@ impl DocumentOrShadowRoot {
|
|||
if stylesheet_remove_set.insert(sheet_to_remove) {
|
||||
owner.remove_stylesheet(
|
||||
StylesheetSource::Constructed(sheet_to_remove.clone()),
|
||||
sheet_to_remove.style_stylesheet_arc(),
|
||||
&sheet_to_remove.style_stylesheet(),
|
||||
);
|
||||
sheet_to_remove.remove_adopter(owner);
|
||||
}
|
||||
|
@ -416,7 +416,7 @@ impl DocumentOrShadowRoot {
|
|||
// around.
|
||||
owner.remove_stylesheet(
|
||||
StylesheetSource::Constructed(sheet.clone()),
|
||||
sheet.style_stylesheet_arc(),
|
||||
&sheet.style_stylesheet(),
|
||||
);
|
||||
} else {
|
||||
sheet.add_adopter(owner.clone());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue