← Tüm projeler Vaka çalışması · Mağaza scripti

Search V2

Tek script ile mağazanın kendi arama kutusuna bağlanan site içi arama ekranı ve otomatik tamamlama. Yazım hatası toleransı, filtreler, eş anlamlılar, yönlendirmeler ve on düzen şablonu; hepsi markaya göre kodsuz ayarlanıyor. 271 markada canlı.

  • 271markada canlı
  • 10şablon: 4 kabuk × 16 blok
  • ~9 binsatır, v2 ve SearchKit
  • 0çalışma anı bağımlılığı
Deneyin

Uydurma bir mağazada arayın

Arama kutusuna tıklayın ya da demonun içinde / tuşuna basın. "ketn" gibi bir yazım hatası, "tişört" gibi bir eş anlamlı deneyin ya da şablon değiştirin.

atelier-nord.example · sentetik katalogEtkileşimli demo
Etkileşimli arama için JavaScript gerekiyor. Arama kutusu otomatik tamamlama, kategori çipleri, sıralama, filtreler, yazım düzeltme on SearchKit düzen şablonu ve klasik V2 ekranı içeren bir ekran açıyor; katalog sentetik.
Canlı sürümle aynı istemci davranışı; arama servisi yerine bellekteki katalog ve simüle edilmiş ağ gecikmesi kullanılıyor.
Sorun

Eski arama widget'ı her marka için elle stillendiriliyordu, yazım hatası toleransı ve filtre yoktu, markalar sürekli rakiplerin arama ekranlarının görüntülerini gönderiyordu.

Her mağazanın farklı bir header'ı, farklı bir arama kutusu ve kendi CSS reset'i var. Backend arama servisi sıralı ürün ve kategori döndürüyor ama yazım hatalarını ve özelliğe göre daraltmayı karşılamıyor. Yerine gelecek şeyin yüzlerce sitede siteye özel kod olmadan çalışması gerekiyordu.

Rolüm

Search V2'yi ve şablon motoru SearchKit'i tek geliştirici olarak yazdım; toplu yayın için kullanılan aracı da. Arkasındaki arama servisi, entegre olduğum mevcut Lucene tabanlı bir endpoint.

  • esbuild ile tek IIFE paket; kendi DOM'unu ve CSS'ini kendisi oluşturuyor
  • Marka config'i: input seçicisi, gizlenecek yerel panel, eş anlamlılar, yönlendirmeler, önerilen aramalar, şablon, CSS
  • İstemci tarafında yazım hatası toleransı, Türkçe katlama, sayılı filtreler, sıralama, sonuçsuz arama kurtarma
  • Analitik için arama ve tıklama olayları
Mimari

Tuştan sonuca

  1. BağlanmaYükleyici paketi seçer, seçiciyle mağazanın kendi input'una bağlanır, yerel paneli gizler.
  2. ConfigMarka ayarları bir kez alınır: şablon, eş anlamlılar, yönlendirmeler, öneriler, CSS.
  3. Arama servisiMevcut endpoint sıralı ürün ve kategori döndürür.
  4. İstemci katmanıKatlama, yazım düzeltme, filtreler, sıralama, geç gelen eski yanıtları eleme.
  5. Render + izlemeŞablon kabuğu ve bloklar, arama ve tıklama olayları.

Mor ton: benim yazdığım kısımlar.

Mühendislik kararları

Zor olan neydi, ne yaptım

271 başka stil dosyasına dayanan CSS

Önce temel stilleri @layer içine taşıdım. Markaların katmansız reset'leri katmanlı kuralları ezdi; geri aldım ve her yere !important koymadan marka reset'ini geçen önekli seçicilere döndüm. Yayından önce bir cascade test sayfasının 8/8 geçmesi gerekiyor.

Eski sonuçlar yeni aramayı ezmez

Her tuş vuruşu önceki isteği AbortController ile iptal ediyor, geç gelen her şeyi bir sıra koruması düşürüyor. Yükleme küçük bir durum makinesi: 550 ms'den sonra iskelet, 3 sn'de "yavaş" uyarısı, 10 sn'de zaman aşımı.

Türkçe metin, doğru şekilde

Katlama noktasız ı'yı ayrı harf olarak ele alıyor, yanlış çözülmüş karakterleri iki kez çözmeden onarıyor ve 31.000,00 TL gibi fiyatları doğru okuyor. Hatalı bir okuma bir keresinde 31.000 yerine 31 göstermişti.

Backend'in yakalamadığı yazım hataları

Bir arama sonuç vermediğinde istemci sorguyu ürün başlıklarından çıkan bir sözlükle karşılaştırıp "bunu mu demek istediniz" öneriyor, sonra boş sayfa yerine önerilen ürünlere düşüyor.

Klavye ve ekran okuyucular

Input bir ARIA combobox ve listbox; sonuçlar ok tuşlarıyla geziliyor, / aramaya odaklıyor, ekran açıkken odak içeride tutuluyor ve kapanınca geri dönüyor, azaltılmış hareket ayarı animasyonları kapatıyor.

"Açılmıyor" için saha rehberi

Gerçek sitelerde sık sebepler ölü seçiciler, scriptleri bekleten çerez onay bantları, başka sağlayıcıların arama scriptleri ve cache'lenmiş config'ti. Bunları çözümleriyle yazdım; destek ekibi çoğu vakayı bana gelmeden çözebiliyor.

V2'den önce

Search V2, daha önce üzerinde çalıştığım searchandising sonuç sayfasından doğdu: aramadan sonra tüm sonuç sayfasını marka başına kategori, banner ve sıralama kurallarıyla render eden, config ile yönetilen bir script. Markaya özel kodun nerede bozulduğunu orada öğrendim; V2'nin markaya özel her şeyi config'e itmesinin sebebi bu.

Çözmeye değer bir problemin mi var?Birlikte çözelim

Konuşmaya başla

Full-stack ve uygulamalı AI rollerine açığım, uzaktan veya hibrit.

Rolü, ekibi ve problemi anlat.