Skip to content

Commit 6b2129c

Browse files
authored
perf: faster css selectors for style calculation (@W-11847644) (#5152)
1 parent a9446fd commit 6b2129c

File tree

6 files changed

+97
-30
lines changed

6 files changed

+97
-30
lines changed

ui/components/combobox/base/_index.scss

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -297,11 +297,14 @@ input[readonly][role="combobox"] {
297297
* @selector .slds-combobox__input-value
298298
* @restrict .slds-combobox__input
299299
*/
300-
[class*="slds-input-has-icon_left"] .slds-combobox__input[value],
301-
[class*="slds-input-has-icon--left"] .slds-combobox__input[value],
302-
[class*="slds-input-has-icon_left"] .slds-combobox__input.slds-combobox__input-value,
303-
[class*="slds-input-has-icon--left"] .slds-combobox__input.slds-combobox__input-value {
304-
padding-left: ($square-icon-small-boundary + $spacing-small);
300+
.slds-input-has-icon_left,
301+
.slds-input-has-icon_left-right,
302+
.slds-input-has-icon--left,
303+
.slds-input-has-icon--left-right {
304+
& .slds-combobox__input[value],
305+
& .slds-combobox__input.slds-combobox__input-value {
306+
padding-left: ($square-icon-small-boundary + $spacing-small);
307+
}
305308
}
306309

307310
.slds-input_faux:not(.slds-combobox__input-value) {

ui/components/dynamic-icons/score/_index.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
// We are variying opacity (instead of stroke & fill)
2121
// because it is a more performant way of achieving this effect
22-
[class*="slds-icon-score__"] {
22+
.slds-icon-score__positive, .slds-icon-score__negative {
2323
position: absolute;
2424
opacity: 0;
2525
transition: opacity 0.4s ease-in-out;

ui/components/dynamic-icons/waffle/_index.scss

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@
33

44
// I need to associate slds-icon-animated with something since there isn't a base variant
55

6+
// All SLDS size classes like `slds-r1` and `slds-r9` in one string.
7+
// This is faster for style calculation than `[class*="slds-r"]`.
8+
/// @private
9+
@function all-slds-r () {
10+
$result: '';
11+
@for $i from 1 through 9 {
12+
$result: "#{$result}, .slds-r#{$i}";
13+
}
14+
15+
@return str-slice($result, 3); // Remove initial ", "
16+
}
617

718
/**
819
* @summary Containing actionable element that holds the waffle icon
@@ -20,7 +31,7 @@
2031
&:hover,
2132
&:focus {
2233

23-
[class*="slds-r"] {
34+
#{all-slds-r()} {
2435
animation: slds-icon-waffle-throb 2 200ms alternate;
2536
}
2637

@@ -80,7 +91,7 @@
8091
display: block;
8192
cursor: pointer;
8293

83-
[class*="slds-r"] {
94+
#{all-slds-r()} {
8495
@include square(rem(5px));
8596
background-color: var(--slds-g-color-neutral-base-50, #{$color-background-icon-waffle});
8697
display: inline-block;

ui/components/icons/base/_index.scss

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,17 @@
4545
}
4646
}
4747

48-
[class*='slds-icon-action-'] {
48+
// All action icon classes in one string. This is faster for style calculation than `[class*='slds-icon-action-']`.
49+
/// @private
50+
@function action-icons() {
51+
$result: '';
52+
@each $name in map-keys($bg-actions-map) {
53+
$result: "#{$result}, .slds-icon-#{$name}";
54+
}
55+
@return str-slice($result, 3); // Remove initial ", "
56+
}
57+
58+
#{action-icons()} {
4959
padding: $spacing-x-small;
5060
border-radius: $border-radius-circle;
5161
}

ui/utilities/grid/_index.scss

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -481,15 +481,31 @@
481481
margin-left: ($spacing-xx-large * -1);
482482
}
483483

484+
// All slds-col_padded classes in one string. This is faster for style calculation than `[class*='slds-icon-action-']`.
485+
/// @private
486+
@function col-padded() {
487+
$prefixes: 'slds-col_padded', 'slds-col--padded';
488+
$types: '-around', '';
489+
$sizes: '-medium', '-large', '';
490+
491+
$result: '';
492+
@each $size in $sizes {
493+
@each $type in $types {
494+
@each $prefix in $prefixes {
495+
$result: "#{$result}, .#{$prefix}#{$type}#{$size}";
496+
}
497+
}
498+
}
499+
@return str-slice($result, 3); // Remove initial ", "
500+
}
501+
484502
/**
485503
* @summary Initializes a grid column
486504
*
487505
* @selector .slds-col
488506
* @modifier
489507
*/
490-
.slds-col,
491-
[class*="slds-col_padded"],
492-
[class*="slds-col--padded"] {
508+
.slds-col, #{col-padded()} {
493509
flex: 1 1 auto;
494510
}
495511

@@ -636,9 +652,7 @@
636652
.slds-grid--align-center {
637653
justify-content: center;
638654

639-
.slds-col,
640-
[class*="slds-col_padded"],
641-
[class*="slds-col--padded"] {
655+
.slds-col, #{col-padded()} {
642656
flex-grow: 0;
643657
}
644658
}
@@ -653,9 +667,7 @@
653667
.slds-grid--align-space {
654668
justify-content: space-around;
655669

656-
.slds-col,
657-
[class*="slds-col_padded"],
658-
[class*="slds-col--padded"] {
670+
.slds-col, #{col-padded()} {
659671
flex-grow: 0;
660672
}
661673
}
@@ -671,9 +683,7 @@
671683
.slds-grid--align-spread {
672684
justify-content: space-between;
673685

674-
.slds-col,
675-
[class*="slds-col_padded"],
676-
[class*="slds-col--padded"] {
686+
.slds-col, #{col-padded()} {
677687
flex-grow: 0;
678688
}
679689
}
@@ -688,9 +698,7 @@
688698
.slds-grid--align-end {
689699
justify-content: flex-end;
690700

691-
.slds-col,
692-
[class*="slds-col_padded"],
693-
[class*="slds-col--padded"] {
701+
.slds-col, #{col-padded()} {
694702
flex-grow: 0;
695703
}
696704
}

ui/utilities/sizing/_index.scss

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,44 @@ $_sizes: (
1515
'xx-large': $size-xx-large
1616
);
1717

18+
// All SLDS size classes like `slds-size--medium` and `slds-size--medium-1-of-12` in one string.
19+
// This is faster for style calculation than `[class*="slds-size_"]`.
20+
/// @private
21+
@function all-sizes () {
22+
$prefixes: 'slds-size_', 'slds-size--';
23+
$columnSizes: 2, 3, 4, 5, 6, 7, 8, 12;
24+
25+
$result: '';
26+
@each $prefix in $prefixes {
27+
@each $size in map-keys($_sizes) {
28+
$result: "#{$result}, .#{$prefix}#{$size}";
29+
}
30+
@each $columnSize in $columnSizes {
31+
@for $i from 1 through $columnSize {
32+
$result: "#{$result}, .#{$prefix}#{$i}-of-#{$columnSize}";
33+
}
34+
}
35+
}
36+
37+
@return str-slice($result, 3); // Remove initial ", "
38+
}
39+
40+
// All SLDS classes like `slds-small-size_medium` in one string.
41+
// Note that the first size is only a breakpoint size, and the second is all possible sizes.
42+
// This is faster for style calculation than `[class*="slds-#{$breakpointSize}-size_"]`
43+
/// @private
44+
@function all-responsive-sizes ($breakpointSize, $prefix) {
45+
$infixes: '-size_', '-size--';
46+
47+
$result: '';
48+
@each $infix in $infixes {
49+
@each $size in map-keys($_sizes) {
50+
$result: "#{$result}, .#{$prefix}#{$breakpointSize}#{$infix}#{$size}";
51+
}
52+
}
53+
@return str-slice($result, 3); // Remove initial ", "
54+
}
55+
1856
/**
1957
* @selector .slds-size_small
2058
* @modifier
@@ -63,8 +101,7 @@ $_sizes: (
63101
@media (min-width: #{pem($breakpoint)}) {
64102

65103
// Fixes issue when sizing is used with slds-col
66-
[class*="slds-#{$size}-size_"],
67-
[class*="slds-#{$size}-size--"] {
104+
#{all-responsive-sizes($size, 'slds-')} {
68105
flex: none;
69106
}
70107

@@ -96,8 +133,7 @@ $_sizes: (
96133
@media (max-width: #{pem($breakpoint)}) {
97134

98135
// Fixes issue when sizing is used with slds-col
99-
[class*="slds-max-#{$size}-size_"],
100-
[class*="slds-max-#{$size}-size--"] {
136+
#{all-responsive-sizes($size, 'slds-max-')} {
101137
flex: none;
102138
}
103139

@@ -128,7 +164,6 @@ $_sizes: (
128164
}
129165

130166
// Fixes issue when sizing is used with slds-col
131-
[class*="slds-size_"],
132-
[class*="slds-size--"] {
167+
#{all-sizes()} {
133168
flex: none;
134169
}

0 commit comments

Comments
 (0)