perf: tiny optimization on primitive child values (#887)

This commit is contained in:
Greg Johnston 2023-04-17 22:09:10 -04:00 committed by GitHub
parent 384d39543c
commit fe68b47ba2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -874,37 +874,67 @@ fn element_to_tokens(
}
};
let children = node.children.iter().map(|node| {
let child = match node {
Node::Fragment(fragment) => fragment_to_tokens(
cx,
Span::call_site(),
&fragment.children,
true,
parent_type,
global_class,
None,
let (child, is_static) = match node {
Node::Fragment(fragment) => (
fragment_to_tokens(
cx,
Span::call_site(),
&fragment.children,
true,
parent_type,
global_class,
None,
),
false,
),
Node::Text(node) => {
let value = node.value.as_ref();
quote! {
#[allow(unused_braces)] #value
if let Some(primitive) = value_to_string(&node.value) {
(quote! { #primitive }, true)
} else {
let value = node.value.as_ref();
(
quote! {
#[allow(unused_braces)] #value
},
false,
)
}
}
Node::Block(node) => {
let value = node.value.as_ref();
quote! {
#[allow(unused_braces)] #value
if let Some(primitive) = value_to_string(&node.value) {
(quote! { #primitive }, true)
} else {
let value = node.value.as_ref();
(
quote! {
#[allow(unused_braces)] #value
},
false,
)
}
}
Node::Element(node) => {
element_to_tokens(cx, node, parent_type, global_class, None)
}
Node::Element(node) => (
element_to_tokens(
cx,
node,
parent_type,
global_class,
None,
),
false,
),
Node::Comment(_) | Node::Doctype(_) | Node::Attribute(_) => {
quote! {}
(quote! {}, false)
}
};
quote! {
.child((#cx, #child))
if is_static {
quote! {
.child(#child)
}
} else {
quote! {
.child((#cx, #child))
}
}
});
let view_marker = if let Some(marker) = view_marker {