From 14be5b7870e2c36422fa36cfac76ad501bc8fbc5 Mon Sep 17 00:00:00 2001 From: ssongliu Date: Sun, 25 Oct 2026 14:05:09 +0800 Subject: [PATCH] feat(ai): translate benchmark comparison metrics (#14182) --- frontend/src/lang/modules/en.ts | 8 ++++++++ frontend/src/lang/modules/es-es.ts | 9 +++++++++ frontend/src/lang/modules/fa.ts | 9 +++++++++ frontend/src/lang/modules/ja.ts | 9 +++++++++ frontend/src/lang/modules/ko.ts | 8 ++++++++ frontend/src/lang/modules/lo.ts | 8 ++++++++ frontend/src/lang/modules/ms.ts | 9 +++++++++ frontend/src/lang/modules/pt-br.ts | 9 +++++++++ frontend/src/lang/modules/ru.ts | 8 ++++++++ frontend/src/lang/modules/tr.ts | 9 +++++++++ frontend/src/lang/modules/zh-Hant.ts | 8 ++++++++ frontend/src/lang/modules/zh.ts | 8 ++++++++ frontend/src/views/website/ssl/acme-account/index.vue | 11 +++++++++-- frontend/src/views/website/ssl/ca/index.vue | 11 +++++++++-- frontend/src/views/website/ssl/dns-account/index.vue | 11 +++++++++-- 15 files changed, 129 insertions(+), 6 deletions(-) diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 8962f92c6..c4f20f1f6 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1875,6 +1875,14 @@ const message = { 'Only successful runs without request anomalies enter the median and min/max summaries. P99 is the median of per-run P99 values. Cache and external traffic are uncontrolled.', }, benchmarkOverview: { + comparison: 'Scenario and concurrency comparison', + comparisonHelp: 'Click a scenario name to inspect that combination.', + sharedPrefix: 'Shared prefix ratio', + sharedPrefixHelp: 'Configured prefix tokens as a proportion of input length, not a measured cache hit rate.', + singleRequestThroughput: 'Per-request output throughput', + singleRequestThroughputHelp: + 'Output tokens from successful requests divided by their total end-to-end time, including first-token wait, for each run. Shows the median of valid runs, or — when data is missing.', + aggregateOutputThroughput: 'Total output throughput', noResults: 'No valid test results. Check the failure reason and logs.', noGroupResults: 'No valid results for this combination. Select another scenario or concurrency.', partial: 'Partial results: the test did not fully succeed. Metrics cover valid points only.', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index 00ed9d4fa..3c3ea5398 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -1890,6 +1890,15 @@ const message = { 'La mediana y los mínimos/máximos solo incluyen ejecuciones correctas sin anomalías. P99 es la mediana de los P99 de cada ejecución. La caché y el tráfico externo no están controlados.', }, benchmarkOverview: { + comparison: 'Comparación de escenarios y concurrencia', + comparisonHelp: 'Haz clic en un escenario para ver los detalles de esa combinación.', + sharedPrefix: 'Proporción de prefijo compartido', + sharedPrefixHelp: + 'Tokens de prefijo configurados respecto a la longitud de entrada; no es una tasa medida de aciertos de caché.', + singleRequestThroughput: 'Rendimiento de salida por solicitud', + singleRequestThroughputHelp: + 'Tokens de salida de solicitudes exitosas divididos por su tiempo total de extremo a extremo, incluida la espera del primer token, en cada ejecución. Se muestra la mediana de las ejecuciones válidas, o — si faltan datos.', + aggregateOutputThroughput: 'Rendimiento total de salida', noResults: 'No hay resultados válidos. Consulte la causa del fallo y los registros.', noGroupResults: 'Esta combinación no tiene resultados válidos. Seleccione otro escenario o concurrencia.', partial: 'Resultados parciales: la prueba no se completó con éxito. Solo se incluyen puntos válidos.', diff --git a/frontend/src/lang/modules/fa.ts b/frontend/src/lang/modules/fa.ts index 2c3494bea..331f32ef5 100644 --- a/frontend/src/lang/modules/fa.ts +++ b/frontend/src/lang/modules/fa.ts @@ -1856,6 +1856,15 @@ const message = { 'میانه و کمینه/بیشینه فقط از اجراهای موفق بدون ناهنجاری درخواست محاسبه می‌شوند. P99 میانه P99 هر اجرا است. کش و ترافیک بیرونی کنترل نشده‌اند.', }, benchmarkOverview: { + comparison: 'مقایسه سناریوها و هم\u200cزمانی', + comparisonHelp: 'برای مشاهده جزئیات هر ترکیب روی نام سناریو کلیک کنید.', + sharedPrefix: 'نسبت پیشوند مشترک', + sharedPrefixHelp: + 'نسبت توکن\u200cهای پیشوند پیکربندی\u200cشده به طول ورودی است، نه نرخ اندازه\u200cگیری\u200cشده برخورد حافظه نهان.', + singleRequestThroughput: 'توان خروجی هر درخواست', + singleRequestThroughputHelp: + 'در هر اجرا، تعداد توکن\u200cهای خروجی درخواست\u200cهای موفق بر مجموع زمان کامل آن\u200cها، شامل انتظار اولین توکن، تقسیم می\u200cشود. میانه اجراهای معتبر نمایش داده می\u200cشود؛ در نبود داده — نمایش داده می\u200cشود.', + aggregateOutputThroughput: 'توان خروجی کل', noResults: 'نتیجه معتبر وجود ندارد. علت شکست و گزارش‌ها را بررسی کنید.', noGroupResults: 'برای این ترکیب نتیجه معتبر وجود ندارد. سناریو یا هم‌زمانی دیگری انتخاب کنید.', partial: 'نتایج جزئی: آزمون کاملاً موفق نبوده است. معیارها فقط نقاط معتبر را شامل می‌شوند.', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 509e17dae..02fc155dd 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -1857,6 +1857,15 @@ const message = { '要求異常のない成功した試行のみを集計し、中央値と最小・最大値を表示します。P99 は試行ごとの P99 の中央値です。キャッシュと外部トラフィックは制御されません。', }, benchmarkOverview: { + comparison: 'シナリオと同時実行数の比較', + comparisonHelp: 'シナリオ名をクリックすると、その組み合わせの詳細を表示します。', + sharedPrefix: '共有プレフィックス比率', + sharedPrefixHelp: + '入力長に対する設定済みプレフィックストークン数の割合です。実測のキャッシュヒット率ではありません。', + singleRequestThroughput: 'リクエスト単位の出力スループット', + singleRequestThroughputHelp: + '各実行で成功したリクエストの出力トークン総数を、最初のトークンの待ち時間を含む合計応答時間で割ります。有効な実行の中央値を表示し、データがない場合は — を表示します。', + aggregateOutputThroughput: '合計出力スループット', noResults: '有効なテスト結果がありません。失敗の原因とログを確認してください。', noGroupResults: 'この組み合わせに有効な結果はありません。シナリオまたは同時実行数を変更してください。', partial: '部分的な結果:テストは完全には成功していません。有効な測定点のみを表示します。', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 10205091b..d4723d156 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -1837,6 +1837,14 @@ const message = { '요청 이상이 없는 성공한 실행만 중앙값과 최솟값/최댓값에 포함합니다. P99는 각 실행 P99의 중앙값입니다. 캐시와 외부 트래픽은 통제되지 않습니다.', }, benchmarkOverview: { + comparison: '시나리오 및 동시 요청 수 비교', + comparisonHelp: '시나리오 이름을 클릭하면 해당 조합의 상세 지표를 확인할 수 있습니다.', + sharedPrefix: '공유 접두사 비율', + sharedPrefixHelp: '입력 길이에 대한 설정된 접두사 토큰 수의 비율이며, 측정된 캐시 적중률이 아닙니다.', + singleRequestThroughput: '요청별 출력 처리량', + singleRequestThroughputHelp: + '각 실행에서 성공한 요청의 출력 토큰 합계를 첫 토큰 대기를 포함한 전체 응답 시간 합계로 나눕니다. 유효한 실행의 중앙값을 표시하며 데이터가 없으면 —를 표시합니다.', + aggregateOutputThroughput: '총 출력 처리량', noResults: '유효한 테스트 결과가 없습니다. 실패 원인과 로그를 확인하세요.', noGroupResults: '이 조합에 유효한 결과가 없습니다. 시나리오 또는 동시 실행 수를 변경하세요.', partial: '부분 결과: 테스트가 완전히 성공하지 않았습니다. 유효한 측정점만 반영합니다.', diff --git a/frontend/src/lang/modules/lo.ts b/frontend/src/lang/modules/lo.ts index 8ccf38423..72115ccb4 100644 --- a/frontend/src/lang/modules/lo.ts +++ b/frontend/src/lang/modules/lo.ts @@ -1828,6 +1828,14 @@ const message = { 'ຄ່າກາງ ແລະ ຄ່າຕ່ຳສຸດ/ສູງສຸດໃຊ້ສະເພາະການທົດສອບສຳເລັດທີ່ບໍ່ມີຄຳຮ້ອງຂໍຜິດປົກກະຕິ. P99 ແມ່ນຄ່າກາງຂອງ P99 ແຕ່ລະຄັ້ງ. ແຄຊ ແລະ ການຈະລາຈອນພາຍນອກບໍ່ໄດ້ຄວບຄຸມ.', }, benchmarkOverview: { + comparison: 'ປຽບທຽບສະຖານະການ ແລະ ຈຳນວນຄຳຮ້ອງພ້ອມກັນ', + comparisonHelp: 'ຄລິກຊື່ສະຖານະການເພື່ອເບິ່ງລາຍລະອຽດຂອງຊຸດນັ້ນ.', + sharedPrefix: 'ອັດຕາສ່ວນ prefix ຮ່ວມ', + sharedPrefixHelp: 'ອັດຕາສ່ວນໂທເຄັນ prefix ທີ່ຕັ້ງໄວ້ຕໍ່ຄວາມຍາວອິນພຸດ ບໍ່ແມ່ນອັດຕາ cache hit ທີ່ວັດແທກໄດ້.', + singleRequestThroughput: 'ອັດຕາອອກຕໍ່ຄຳຮ້ອງ', + singleRequestThroughputHelp: + 'ໃນແຕ່ລະຮອບ ນຳຈຳນວນໂທເຄັນອອກຂອງຄຳຮ້ອງທີ່ສຳເລັດຫານດ້ວຍເວລາລວມຂອງຄຳຮ້ອງເຫຼົ່ານັ້ນ ລວມເວລາລໍຖ້າໂທເຄັນທຳອິດ. ສະແດງຄ່າມັດທະຍະຖານຂອງຮອບທີ່ໃຊ້ໄດ້ ຫຼື — ຖ້າຂາດຂໍ້ມູນ.', + aggregateOutputThroughput: 'ອັດຕາອອກລວມ', noResults: 'ບໍ່ມີຜົນການທົດສອບທີ່ໃຊ້ໄດ້. ກວດສອບສາເຫດ ແລະ ບັນທຶກ.', noGroupResults: 'ບໍ່ມີຜົນທີ່ໃຊ້ໄດ້ສຳລັບຊຸດນີ້. ເລືອກສະຖານະການ ຫຼື ຈຳນວນພ້ອມກັນອື່ນ.', partial: 'ຜົນບາງສ່ວນ: ການທົດສອບບໍ່ສຳເລັດທັງໝົດ. ຕົວຊີ້ວັດລວມສະເພາະຈຸດທີ່ໃຊ້ໄດ້.', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 8c4886008..2736736ae 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -1892,6 +1892,15 @@ const message = { 'Median dan minimum/maksimum hanya melibatkan ujian berjaya tanpa anomali permintaan. P99 ialah median P99 setiap ujian. Cache dan trafik luaran tidak dikawal.', }, benchmarkOverview: { + comparison: 'Perbandingan senario dan keserentakan', + comparisonHelp: 'Klik nama senario untuk melihat butiran gabungan itu.', + sharedPrefix: 'Nisbah awalan dikongsi', + sharedPrefixHelp: + 'Nisbah token awalan yang dikonfigurasi kepada panjang input, bukan kadar hit cache yang diukur.', + singleRequestThroughput: 'Daya pemprosesan output setiap permintaan', + singleRequestThroughputHelp: + 'Token output permintaan berjaya dibahagi dengan jumlah masa hujung ke hujungnya, termasuk masa menunggu token pertama, bagi setiap larian. Memaparkan median larian sah, atau — jika data tiada.', + aggregateOutputThroughput: 'Jumlah daya pemprosesan output', noResults: 'Tiada keputusan ujian yang sah. Semak sebab kegagalan dan log.', noGroupResults: 'Tiada keputusan sah untuk gabungan ini. Pilih senario atau keserentakan lain.', partial: 'Keputusan separa: ujian tidak berjaya sepenuhnya. Metrik hanya merangkumi titik yang sah.', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 9afb7875a..b8b5a5315 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -1889,6 +1889,15 @@ const message = { 'A mediana e os valores mínimo/máximo incluem apenas execuções bem-sucedidas sem anomalias. P99 é a mediana dos P99 de cada execução. Cache e tráfego externo não são controlados.', }, benchmarkOverview: { + comparison: 'Comparação de cenários e concorrência', + comparisonHelp: 'Clique em um cenário para ver os detalhes dessa combinação.', + sharedPrefix: 'Proporção de prefixo compartilhado', + sharedPrefixHelp: + 'Tokens de prefixo configurados em relação ao tamanho da entrada; não é uma taxa medida de acertos de cache.', + singleRequestThroughput: 'Vazão de saída por solicitação', + singleRequestThroughputHelp: + 'Tokens de saída das solicitações bem-sucedidas divididos pelo tempo total de ponta a ponta, incluindo a espera pelo primeiro token, em cada execução. Exibe a mediana das execuções válidas, ou — se faltarem dados.', + aggregateOutputThroughput: 'Vazão total de saída', noResults: 'Nenhum resultado válido. Consulte o motivo da falha e os logs.', noGroupResults: 'Nenhum resultado válido nesta combinação. Selecione outro cenário ou concorrência.', partial: diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 8400f0e9b..b94418915 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -1884,6 +1884,14 @@ const message = { 'Медиана и минимум/максимум рассчитываются только по успешным запускам без аномалий запросов. P99 — медиана P99 отдельных запусков. Кеш и внешний трафик не контролируются.', }, benchmarkOverview: { + comparison: 'Сравнение сценариев и параллелизма', + comparisonHelp: 'Нажмите на название сценария, чтобы открыть показатели этой комбинации.', + sharedPrefix: 'Доля общего префикса', + sharedPrefixHelp: 'Доля настроенных токенов префикса во входной длине, а не измеренная доля попаданий в кеш.', + singleRequestThroughput: 'Выходная пропускная способность на запрос', + singleRequestThroughputHelp: + 'Для каждого прогона число выходных токенов успешных запросов делится на суммарное время их выполнения, включая ожидание первого токена. Показана медиана корректных прогонов; при отсутствии данных —.', + aggregateOutputThroughput: 'Общая выходная пропускная способность', noResults: 'Нет достоверных результатов. Проверьте причину сбоя и журналы.', noGroupResults: 'Нет достоверных результатов для этой комбинации. Выберите другой сценарий или параллелизм.', partial: diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index 420df9647..eddc66f46 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -1889,6 +1889,15 @@ const message = { 'Medyan ve en düşük/en yüksek değerler yalnızca istek anomalisi olmayan başarılı çalışmaları içerir. P99, çalışma başına P99 değerlerinin medyanıdır. Önbellek ve dış trafik kontrol edilmez.', }, benchmarkOverview: { + comparison: 'Senaryo ve eşzamanlılık karşılaştırması', + comparisonHelp: 'Bu birleşimin ayrıntılarını görmek için senaryo adına tıklayın.', + sharedPrefix: 'Paylaşılan önek oranı', + sharedPrefixHelp: + 'Yapılandırılan önek belirteçlerinin girdi uzunluğuna oranıdır; ölçülen önbellek isabet oranı değildir.', + singleRequestThroughput: 'İstek başına çıktı hızı', + singleRequestThroughputHelp: + 'Her çalıştırmada başarılı isteklerin çıktı belirteçleri, ilk belirteci bekleme dahil toplam uçtan uca sürelerine bölünür. Geçerli çalıştırmaların medyanı gösterilir; veri yoksa — gösterilir.', + aggregateOutputThroughput: 'Toplam çıktı hızı', noResults: 'Geçerli test sonucu yok. Hata nedenini ve günlükleri kontrol edin.', noGroupResults: 'Bu birleşim için geçerli sonuç yok. Başka bir senaryo veya eşzamanlılık seçin.', partial: 'Kısmi sonuçlar: test tamamen başarılı olmadı. Metrikler yalnızca geçerli noktaları kapsar.', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index 7e0b33557..8125eb935 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -1771,6 +1771,14 @@ const message = { '彙總僅採用成功且無請求異常的重複測試,顯示中位數與最小/最大值。P99 是各次 P99 的中位數;快取與外部流量未受控。', }, benchmarkOverview: { + comparison: '情境與並行數對照', + comparisonHelp: '點選情境名稱查看該組合的指標詳情。', + sharedPrefix: '共用前綴比例', + sharedPrefixHelp: '共用前綴比例為設定的前綴 Token 數占輸入長度的比例,不代表實測快取命中率。', + singleRequestThroughput: '單路輸出吞吐量', + singleRequestThroughputHelp: + '每輪成功請求的輸出 Token 總數 ÷ 成功請求總耗時(包含首 Token 等待),再對有效輪次取中位數。缺少資料時顯示 —。', + aggregateOutputThroughput: '總輸出吞吐量', noResults: '沒有有效的測試結果,請查看失敗原因和日誌。', noGroupResults: '此組合沒有有效結果,請切換場景或並行數。', partial: '部分結果:本次測試未完整成功,指標僅代表有效測點。', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index bc7289603..e62fd3dea 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1784,6 +1784,14 @@ const message = { '汇总仅使用成功且无请求异常的重复测试,显示中位数和最小/最大值。P99 是每次测试 P99 的中位数;缓存和外部流量未受控。', }, benchmarkOverview: { + comparison: '场景与并发对照', + comparisonHelp: '点击场景名称查看该组合的指标详情。', + sharedPrefix: '共享前缀比例', + sharedPrefixHelp: '共享前缀比例为配置的前缀 Token 数占输入长度的比例,不代表实测缓存命中率。', + singleRequestThroughput: '单路输出吞吐', + singleRequestThroughputHelp: + '每轮成功请求的输出 Token 总数 ÷ 成功请求总耗时(包含首 Token 等待),再对有效轮次取中位数。缺少数据时显示 —。', + aggregateOutputThroughput: '总输出吞吐', noResults: '没有有效的测试结果,请查看失败原因和日志。', noGroupResults: '此组合没有有效结果,请切换场景或并发数。', partial: '部分结果:本次测试未完整成功,指标仅代表有效测点。', diff --git a/frontend/src/views/website/ssl/acme-account/index.vue b/frontend/src/views/website/ssl/acme-account/index.vue index f403c3473..a7c3a5b66 100644 --- a/frontend/src/views/website/ssl/acme-account/index.vue +++ b/frontend/src/views/website/ssl/acme-account/index.vue @@ -55,7 +55,7 @@ import { readCachedPageSize } from '@/utils/panel-cache'; import { Website } from '@/api/interface/website'; import { deleteAcmeAccount, searchAcmeAccount, updateAcmeAccount } from '@/api/modules/website'; import i18n from '@/lang'; -import { useSearchReset } from '@/composables/useSearchReset'; +import { useSearchState } from '@/utils/search-reset'; import { onMounted, reactive, ref, toRef } from 'vue'; import Create from './create/index.vue'; import { getAccountName, getKeyName } from '@/utils/ssl'; @@ -120,7 +120,14 @@ const deleteAccount = async (row: any) => { }; const routerButton = [{ label: i18n.global.t('website.acmeAccountManage'), path: '/websites/ssl/acme-account' }]; -useSearchReset({ page: toRef(paginationConfig, 'currentPage') }, { onRevisit: () => search() }); +useSearchState( + 'website/ssl/acme-account/index', + { + page: toRef(paginationConfig, 'currentPage'), + pageSize: toRef(paginationConfig, 'pageSize'), + }, + { onRevisit: () => search() }, +); onMounted(() => { search(); }); diff --git a/frontend/src/views/website/ssl/ca/index.vue b/frontend/src/views/website/ssl/ca/index.vue index fa5de8a67..701bcb551 100644 --- a/frontend/src/views/website/ssl/ca/index.vue +++ b/frontend/src/views/website/ssl/ca/index.vue @@ -51,7 +51,7 @@ import { Website } from '@/api/interface/website'; import { deleteCA, searchCAs, downloadCAFile } from '@/api/modules/website'; import i18n from '@/lang'; import { onMounted, reactive, ref, toRef } from 'vue'; -import { useSearchReset } from '@/composables/useSearchReset'; +import { useSearchState } from '@/utils/search-reset'; import Create from './create/index.vue'; import Upload from './upload/index.vue'; import Detail from './detail/index.vue'; @@ -94,7 +94,14 @@ const buttons = [ }, ]; -useSearchReset({ page: toRef(paginationConfig, 'currentPage') }, { onRevisit: () => search() }); +useSearchState( + 'website/ssl/ca/index', + { + page: toRef(paginationConfig, 'currentPage'), + pageSize: toRef(paginationConfig, 'pageSize'), + }, + { onRevisit: () => search() }, +); const search = async () => { const req = { diff --git a/frontend/src/views/website/ssl/dns-account/index.vue b/frontend/src/views/website/ssl/dns-account/index.vue index eb0a9d1d0..585ea0848 100644 --- a/frontend/src/views/website/ssl/dns-account/index.vue +++ b/frontend/src/views/website/ssl/dns-account/index.vue @@ -51,7 +51,7 @@ import { Website } from '@/api/interface/website'; import { deleteDnsAccount, searchDnsAccount } from '@/api/modules/website'; import { onMounted, reactive, ref, toRef } from 'vue'; import i18n from '@/lang'; -import { useSearchReset } from '@/composables/useSearchReset'; +import { useSearchState } from '@/utils/search-reset'; import { getDNSName } from '@/utils/ssl'; const paginationConfig = reactive({ cacheSizeKey: 'dns-account-page-size', @@ -117,5 +117,12 @@ onMounted(() => { }); const routerButton = [{ label: i18n.global.t('website.dnsAccountManage'), path: '/websites/ssl/dns-account' }]; -useSearchReset({ page: toRef(paginationConfig, 'currentPage') }, { onRevisit: () => search() }); +useSearchState( + 'website/ssl/dns-account/index', + { + page: toRef(paginationConfig, 'currentPage'), + pageSize: toRef(paginationConfig, 'pageSize'), + }, + { onRevisit: () => search() }, +);