Anında Arama — Müşteri "kira" Yazdı, Ekranda Neden "k" Sonuçları Var?
Önce şunu oku: useEffect — Bağımlılıklar ve Temizlik
30 saniyede özet
Her tuşta arama isteği göndermek hem çok istek doğurur hem de cevapları karıştırır: yavaş gelen eski cevap yenisinin üstüne yazılır. Eski cevabı yok saymak ekranı doğru tutar; debounce ise yazma bitene kadar bekleyip tek istek gönderir.
Bir kafede müşteri siparişini her kelimede değiştiriyor: “çay… yok, kahve… yok, latte”. Garson her kelimede mutfağa koşarsa üç içecek gelir. En geç hazırlanan çay en son gelir ve masada o kalır.
-
Bayt: Hareket aramasında her harfte sunucuya soruyoruz. Anında sonuç, ne güzel!
-
Sen: Bir müşteri kira yazdı. Ekranda kira ödemeleri değil, k harfiyle başlayan her şey var.
-
Bayt: k araması en yavaşıymış. En son o geldi ve kira sonuçlarının üstüne yazıldı!
-
Bayt: Garson gibi: müşteri sözünü bitirsin, eski siparişi de geri çevirelim.
Cevaplar sırayla gelmez
Her tuşa basışta bir istek gönderilirse “kira” kelimesi dört arama yapar: k, ki, kir, kira. Bu istekler farklı sürelerde cevaplanır.
Ekran gelen her cevabı gösterirse, en son gelen kazanır. En son gelen de en yeni arama değil, en yavaş aramadır. Yavaş dönen bir eski cevapArtık güncel olmayan bir isteğe gelen cevap. Yeni aramanın sonucunun üstüne yazılırsa ekran yanlış sonucu gösterir.Sözlükte gör → yenisinin üstüne yazılır.
Kafam karıştı, daha basit anlat
Cevaplar karışık sırayla gelir. Son geleni göstermek, eski aramayı ekranda bırakabilir.
Her tuşa basışta arama isteği göndermenin ilk sorunu nedir?
Ağdan gelen cevaplar hangi sırayla gelir?
Bekle, ve eskiyi geri çevir
Ekran yalnızca son yazılan kelimenin cevabını gösteriyor; eski cevaplar yok sayılıyor. Müşteri kira yazdı. Ekranda ne olur ve kaç istek gider? Cevabı göster
Ekranda kira sonuçları olur, ama dört istek gider. Eski cevaplar gelir gelmez yok sayılır; ekran doğru kalır. Yine de her harf sunucuya ayrı bir arama yaptırdı.
Adım adım oku
- Çay... yok, kahve... yok, latte.
- Her kelimede mutfağa koşan garson.
- En geç gelen çay masada kaldı.
- Söz bitince sipariş ver; eski siparişi geri çevir.
debounceArka arkaya gelen olaylarda, olaylar bir süre durana kadar bekleyip yalnızca sonuncusu için işlem yapmak. Anında aramada istek sayısını azaltır.Sözlükte gör →, yazma bir süre durana kadar bekler ve yalnızca son kelime için tek istek gönderir. Ara istekler hiç gitmez.
İkisi birlikte iyi çalışır. Debounce istek sayısını azaltır; eski cevabı yok saymak ya da eski isteği iptal etmek ise müşteri yeniden yazmaya başladığında ekranı doğru tutar.
Kafam karıştı, daha basit anlat
Debounce az istek gönderir. Eski cevabı yok saymak ekranı doğru tutar.
Müşteri "kira" yazdı ama ekranda "k" sonuçları görünüyor. En olası neden?
Debounce ne yapar?
Kendin gör
Hareketlerde anında arama: “kira”
Tohum 781237Zaman: 0/8 · giden istek: 0 (—) · yok sayılan cevap: 0
Şu an ne oldu?
Müşteri yazıyor
Her harf bir arama mı, yoksa yazma bitince tek arama mı?
Görevler0/3
Ekranda eski aramanın sonuçları kalsınaçık
İpucu
Her harfte gönder, gelen her cevabı göster.
Sonuç doğru olsun ama dört istek gitsinaçık
İpucu
Eski cevabı yok say.
Tek istekle doğru sonuçaçık
İpucu
Yazma durunca gönder.
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Her harfte istek, her cevap gösteriliyor: dört istek gitti ve ekranda k sonuçları kaldı.
- “Eski cevabı yok say”ı aç. Ekranda kira sonuçları; ama yine dört istek.
- “Yazma durunca gönder”i aç. Tek istek, doğru sonuç; sonuç biraz daha geç geldi.
Debounce kullanılıyor. Kullanıcı yazmayı bırakıp yeniden yazmaya başlarsa yine eski cevap sorunu olabilir mi?
Eski aramanın cevabını yok saymanın bir yolu nedir?
Tuzaklar
Çok uzun bekleme. Debounce süresi uzarsa, müşteri yazmayı bıraktıktan sonra sonucu uzun süre bekler. Kısa ama yeterli bir süre seç ve beklerken küçük bir yükleniyor işareti göster.
Temizleme fonksiyonunu unutmak. React’te arama useEffect içinde yapılıyorsa, temizleme fonksiyonunda eski isteği iptal et. Etki yenilendiğinde eski istek boşa düşer.
Tek harfle aramak. Tek harflik bir arama çok fazla kayıt döndürür ve en yavaşıdır. En az birkaç harf yazılmadan arama yapma.
Kafam karıştı, daha basit anlat
Beklemeyi kısa tut, eski isteği iptal et, tek harfle arama.
Debounce süresi çok uzun seçilirse ne olur?
Derinleş · Mobil bankacılık: hareketlerde anında arama 3 dosya · ~64 satır · ilk okumada atlayabilirsin
Kendini sına
Arka arkaya gönderilen isteklerin cevabı her zaman aynı sırayla gelir.
React'te useEffect içinde arama yapılıyor. Eski cevabın ekrana yazılmasını en basit hangi yöntem engeller?
Aklında kalacak üç şey
- 1 Ağdan gelen cevaplar gönderildiği sırayla gelmez. Son gelen cevabı göstermek, yavaş gelen eski aramanın yenisini ezmesine yol açar.
- 2 Ekrana yazmadan önce cevabın hangi arama için olduğuna bak ya da eski isteği iptal et; ekran ancak böyle doğru kalır.
- 3 Debounce, yazma bir süre durana kadar bekleyip tek istek gönderir. Bedeli, sonucun biraz geç gelmesidir.