From d784d4982ba4e224889bde6e1bb157e765cb24d7 Mon Sep 17 00:00:00 2001 From: Kelly Yang <124ykl@gmail.com> Date: Thu, 29 Jan 2026 19:05:37 -0800 Subject: [PATCH] Improve template search input performance issue (#8343) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Improve Template search input performance issue #8134 This was caused by the search logic running too frequently (throttled at 50ms), causing the main thread to block on every few keystrokes. ## Changes Use debouncing that wait until you stop typing for a specific time (300ms) before running. It makes the searching function more smoothly. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8343-Improve-template-search-input-performance-issue-2f56d73d36508144bdf9fa5e0cd76818) by [Unito](https://www.unito.io) --------- Co-authored-by: Alexander Brown --- .../custom/widget/WorkflowTemplateSelectorDialog.vue | 2 +- src/composables/useTemplateFiltering.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/custom/widget/WorkflowTemplateSelectorDialog.vue b/src/components/custom/widget/WorkflowTemplateSelectorDialog.vue index ab16acac3..8580e29f9 100644 --- a/src/components/custom/widget/WorkflowTemplateSelectorDialog.vue +++ b/src/components/custom/widget/WorkflowTemplateSelectorDialog.vue @@ -772,7 +772,7 @@ useIntersectionObserver(loadTrigger, () => { // Reset pagination when filters change watch( [ - searchQuery, + filteredTemplates, selectedNavItem, sortBy, selectedModels, diff --git a/src/composables/useTemplateFiltering.ts b/src/composables/useTemplateFiltering.ts index c29d6cadd..905632220 100644 --- a/src/composables/useTemplateFiltering.ts +++ b/src/composables/useTemplateFiltering.ts @@ -1,4 +1,4 @@ -import { refThrottled, watchDebounced } from '@vueuse/core' +import { refDebounced, watchDebounced } from '@vueuse/core' import Fuse from 'fuse.js' import type { IFuseOptions } from 'fuse.js' import { computed, ref, watch } from 'vue' @@ -119,7 +119,7 @@ export function useTemplateFiltering( ) }) - const debouncedSearchQuery = refThrottled(searchQuery, 50) + const debouncedSearchQuery = refDebounced(searchQuery, 150) const filteredBySearch = computed(() => { if (!debouncedSearchQuery.value.trim()) {