Un trait de soulignement fournit la méthode, papillon. De leurs documents: p>
crée et renvoie une nouvelle version étranglée de la fonction transcédée, qui, lorsqu'elle est appelée à plusieurs reprises, n'appellera que la fonction d'origine au plus une fois par millisecondes d'attente. Utile pour les événements limitant les taux qui se produisent plus rapidement que vous pouvez suivre. P>
Imaginez maintenant le cas d'une forme automatique. Cela signifie que si "ABC" est typée dans une fenêtre de 100 ms, disons, alors une recherche "A 'sera envoyée et non" BC ". P>
Est-ce une surveillance drastique de la part des sous-traitants.js? Que suggéreriez-vous comme une solution propre? P>
5 Réponses :
Oui, vous avez raison de ne pas fonctionner bien pour une forme automatique. Je pense que cela signifie que d'autres types de choses, cependant. L'exemple donné est la manipulation des événements de défilement. P>
C'est bon à savoir (surtout le mixin _!), mais pas exactement la même chose - je veux certainement que des résultats apparaissent pendant que le type de personnes.
Ouais, je t'entends. Je pense que la partie délicate est de décider où dessiner la ligne en ce qui concerne la vitesse de frappe de l'utilisateur et le retard dans la réaction de la demande Ajax. Sans une sorte de pré-extraction de Googlesque, il semble que la demande soit (nécessairement) à la suite de la saisie de l'utilisateur. Plus de réflexion nécessaire :-)
Pour ce cas d'utilisation, vous pouvez utiliser la fonction "tampon" suivante, qui n'appliquera que le dernier appel de la fenêtre d'attente.
https://gist.github.com/2484196 p>
Belle solution, +1. Néanmoins, je ne l'ajouterais pas à l'objet _ code> car cela peut confondre une personne qui lit votre code. "Cette méthode a été cette méthode à partir d'une version plus ancienne du soulignement? Est-ce un LO-Dash extension?" je>
ah, je n'ai pas lu les documents à droite! Là est em> une fonction pour cela. var test = _.debounce(function() { console.log('foo'); }, 3000);
Bien que cela semble fonctionner dans ce cas d'utilisation, le débutant et la manette des gaz donnent un comportement différent. Je cherche un moyen de garder les demandes à traverser tout en tapant, mais assurez-vous toujours le dernier appel (comme dans la question ici).
On dirait que les autres réponses mentionnent à l'aide de débutant au lieu de manetteries. J'ai trouvé une solution qui vous permet de garder le comportement des gaz d'accélérateur (garder les appels de fonction à travers) tout en assurant le dernier appel.
https://gist.github.com/ayushv512/a2f963bface38f5e2f6f6bba39bba9b9#file-throttle-js p>
const throttle = (func, limit) => { let lastFunc; let lastRan; return function() { const context = this; const args = arguments; if (!lastRan) { func.apply(context, args) lastRan = Date.now(); } else { clearTimeout(lastFunc); lastFunc = setTimeout(function() { if ((Date.now() - lastRan) >= limit) { func.apply(context, args); lastRan = Date.now(); } }, limit - (Date.now() - lastRan)); } } }