From f62e66e52b3ad651ce5f03133b95555d5a8c82b3 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 25 Sep 2025 14:31:08 -0500 Subject: [PATCH 1/2] [web_server] Remove std::find_if overhead matching IDF implementation --- esphome/components/web_server/web_server.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/esphome/components/web_server/web_server.cpp b/esphome/components/web_server/web_server.cpp index 0a97e542c3..03bc17f4fa 100644 --- a/esphome/components/web_server/web_server.cpp +++ b/esphome/components/web_server/web_server.cpp @@ -108,14 +108,14 @@ static UrlMatch match_url(const char *url_ptr, size_t url_len, bool only_domain) void DeferredUpdateEventSource::deq_push_back_with_dedup_(void *source, message_generator_t *message_generator) { DeferredEvent item(source, message_generator); - auto iter = std::find_if(this->deferred_queue_.begin(), this->deferred_queue_.end(), - [&item](const DeferredEvent &test) -> bool { return test == item; }); - - if (iter != this->deferred_queue_.end()) { - (*iter) = item; - } else { - this->deferred_queue_.push_back(item); + // Use range-based for loop instead of std::find_if to reduce template instantiation overhead and binary size + for (auto &event : this->deferred_queue_) { + if (event == item) { + event = item; + return; + } } + this->deferred_queue_.push_back(item); } void DeferredUpdateEventSource::process_deferred_queue_() { From 829b6cfe6ad2a319208cbc11eee310188bed9750 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 25 Sep 2025 14:33:19 -0500 Subject: [PATCH 2/2] review --- esphome/components/climate/climate.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/climate/climate.cpp b/esphome/components/climate/climate.cpp index c820831f90..e7a454d459 100644 --- a/esphome/components/climate/climate.cpp +++ b/esphome/components/climate/climate.cpp @@ -368,7 +368,7 @@ void Climate::save_state_() { const auto &supported = traits.get_supported_custom_fan_modes(); std::vector vec{supported.begin(), supported.end()}; for (size_t i = 0; i < vec.size(); i++) { - if (vec[i] == custom_fan_mode.value()) { + if (vec[i] == custom_fan_mode) { state.custom_fan_mode = i; break; } @@ -383,7 +383,7 @@ void Climate::save_state_() { const auto &supported = traits.get_supported_custom_presets(); std::vector vec{supported.begin(), supported.end()}; for (size_t i = 0; i < vec.size(); i++) { - if (vec[i] == custom_preset.value()) { + if (vec[i] == custom_preset) { state.custom_preset = i; break; }