LibWeb: Convert DOM::Element::m_classes to the new AK::FlyString
This makes selector matching significantly faster by not forcing us to convert from FlyString to DeprecatedFlyString when matching class selectors. :^)
This commit is contained in:
parent
629b6462dc
commit
2042993997
Notes:
sideshowbarker
2024-07-16 23:11:53 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/2042993997 Pull-request: https://github.com/SerenityOS/serenity/pull/17763 Reviewed-by: https://github.com/ADKaster Reviewed-by: https://github.com/Hendiadyoin1 Reviewed-by: https://github.com/nico
4 changed files with 11 additions and 11 deletions
|
@ -354,7 +354,7 @@ static inline bool matches(CSS::Selector::SimpleSelector const& component, DOM::
|
|||
case CSS::Selector::SimpleSelector::Type::Id:
|
||||
return component.name() == element.attribute(HTML::AttributeNames::id).view();
|
||||
case CSS::Selector::SimpleSelector::Type::Class:
|
||||
return element.has_class(component.name().bytes_as_string_view());
|
||||
return element.has_class(component.name());
|
||||
case CSS::Selector::SimpleSelector::Type::TagName:
|
||||
// See https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors
|
||||
if (element.document().document_type() == DOM::Document::Type::HTML)
|
||||
|
|
|
@ -1030,9 +1030,9 @@ JS::NonnullGCPtr<HTMLCollection> Document::get_elements_by_name(DeprecatedString
|
|||
|
||||
JS::NonnullGCPtr<HTMLCollection> Document::get_elements_by_class_name(DeprecatedFlyString const& class_names)
|
||||
{
|
||||
Vector<DeprecatedFlyString> list_of_class_names;
|
||||
Vector<FlyString> list_of_class_names;
|
||||
for (auto& name : class_names.view().split_view(' ')) {
|
||||
list_of_class_names.append(name);
|
||||
list_of_class_names.append(FlyString::from_utf8(name).release_value_but_fixme_should_propagate_errors());
|
||||
}
|
||||
return HTMLCollection::create(*this, [list_of_class_names = move(list_of_class_names), quirks_mode = document().in_quirks_mode()](Element const& element) {
|
||||
for (auto& name : list_of_class_names) {
|
||||
|
|
|
@ -271,7 +271,7 @@ Vector<DeprecatedString> Element::get_attribute_names() const
|
|||
return names;
|
||||
}
|
||||
|
||||
bool Element::has_class(DeprecatedFlyString const& class_name, CaseSensitivity case_sensitivity) const
|
||||
bool Element::has_class(FlyString const& class_name, CaseSensitivity case_sensitivity) const
|
||||
{
|
||||
if (case_sensitivity == CaseSensitivity::CaseSensitive) {
|
||||
return any_of(m_classes, [&](auto& it) {
|
||||
|
@ -279,7 +279,7 @@ bool Element::has_class(DeprecatedFlyString const& class_name, CaseSensitivity c
|
|||
});
|
||||
} else {
|
||||
return any_of(m_classes, [&](auto& it) {
|
||||
return it.equals_ignoring_case(class_name);
|
||||
return it.equals_ignoring_ascii_case(class_name);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -347,7 +347,7 @@ void Element::parse_attribute(DeprecatedFlyString const& name, DeprecatedString
|
|||
m_classes.clear();
|
||||
m_classes.ensure_capacity(new_classes.size());
|
||||
for (auto& new_class : new_classes) {
|
||||
m_classes.unchecked_append(new_class);
|
||||
m_classes.unchecked_append(FlyString::from_utf8(new_class).release_value_but_fixme_should_propagate_errors());
|
||||
}
|
||||
if (m_class_list)
|
||||
m_class_list->associated_attribute_changed(value);
|
||||
|
@ -580,9 +580,9 @@ bool Element::is_active() const
|
|||
|
||||
JS::NonnullGCPtr<HTMLCollection> Element::get_elements_by_class_name(DeprecatedFlyString const& class_names)
|
||||
{
|
||||
Vector<DeprecatedFlyString> list_of_class_names;
|
||||
Vector<FlyString> list_of_class_names;
|
||||
for (auto& name : class_names.view().split_view_if(Infra::is_ascii_whitespace)) {
|
||||
list_of_class_names.append(name);
|
||||
list_of_class_names.append(FlyString::from_utf8(name).release_value_but_fixme_should_propagate_errors());
|
||||
}
|
||||
return HTMLCollection::create(*this, [list_of_class_names = move(list_of_class_names), quirks_mode = document().in_quirks_mode()](Element const& element) {
|
||||
for (auto& name : list_of_class_names) {
|
||||
|
|
|
@ -101,8 +101,8 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
bool has_class(DeprecatedFlyString const&, CaseSensitivity = CaseSensitivity::CaseSensitive) const;
|
||||
Vector<DeprecatedFlyString> const& class_names() const { return m_classes; }
|
||||
bool has_class(FlyString const&, CaseSensitivity = CaseSensitivity::CaseSensitive) const;
|
||||
Vector<FlyString> const& class_names() const { return m_classes; }
|
||||
|
||||
virtual void apply_presentational_hints(CSS::StyleProperties&) const { }
|
||||
virtual void parse_attribute(DeprecatedFlyString const& name, DeprecatedString const& value);
|
||||
|
@ -284,7 +284,7 @@ private:
|
|||
RefPtr<CSS::StyleProperties> m_computed_css_values;
|
||||
HashMap<DeprecatedFlyString, CSS::StyleProperty> m_custom_properties;
|
||||
|
||||
Vector<DeprecatedFlyString> m_classes;
|
||||
Vector<FlyString> m_classes;
|
||||
|
||||
Array<JS::GCPtr<Layout::Node>, to_underlying(CSS::Selector::PseudoElement::PseudoElementCount)> m_pseudo_element_nodes;
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue