Les étudiants qui utilisent souvent la recherche Baidu n'ignorent pas l'index déroulant de la boîte d'entrée. C'est tellement pratique. Cependant, les conditions uniques font que cette technologie asynchrone est confrontée à certains tests. La demande de serveur très simultanée exhorte leur siège frontal exhorte à réduire le nombre de fois où ils envoient Ajax autant que possible. Cela ne semble pas être lié à cet article, mais ce n'est pas le cas. Tout d'abord, faisons une publicité gratuite pour Baidu. Entrez le mot "frontal" sur la page d'accueil de Baidu et utilisez Chromebug pour voir facilement la réponse envoyée. Les résultats sont les suivants:
La copie de code est la suivante:
Window.BDSUG.SUG ({Q: 'Front End' ;, P: FALSE, S: ['Front End Development', 'Front End Ingénieur', 'Front End Bus', 'Front End Development Engineer', 'Front End Framework', 'Front End Bus Frequency', ']}});
Baidu essaie de rendre les données déroulantes en renvoyant une méthode SUG avec le paramètre OBJ. Lorsque vous entrez à nouveau "frontal" sans rafraîchir la page, des demandes similaires ne se sont pas produites. Cela signifie qu'ils ont probablement établi un objet de cache, qui est utilisé pour stocker temporairement l'objet demandé. Lorsque le même mot est entré plus tard, la clé de l'objet Cache sera récupérée en premier. Une fois la correspondance réussie, la valeur de l'objet est lu directement et n'envoie plus de demande au serveur, ce qui peut économiser efficacement les coûts.
Jetons une brique et apportons Jade, parlons du vrai protagoniste: méthode HasownProperty.
Je crois que les JSER ne sont pas familiers avec Hasownproperty, et je ne vends que de l'eau au bord de la rivière ici.
Il est exclusif à l'objet, utilisé pour déterminer si une propriété existe dans la clé d'un objet, et la valeur de retour est une valeur booléenne. Voici un exemple:
La copie de code est la suivante:
var test0 = array.prototype.hasownproperty ('Split'); // faux, car la méthode divisée n'existe pas dans le tableau
var test1 = string.prototype.hasownproperty ('Split'); // true, car Split est une méthode intégrée pour les objets de chaîne
Lorsque vous le savez, il semble qu'il ne suffit pas de voir la force de Hasownproperty. Alors, reproduisons simplement l'exemple de Baidu tire-down:
La copie de code est la suivante:
var data = {}, SaveObj = fonction (val) {
if (data.hasownproperty (val)) {// Si la valeur soumise existe dans l'objet de données, aucune demande ne sera envoyée
var len = data [val] .length;
pour (var i = 0; i <len; i ++) {
console.log (data [val] [i]);
}
}autre{
var url = 'http://suggestion.baidu.com/su?wd=' + Val;
$ .ajax ({// pour des exemples clairs, nous utilisons ici l'ajax de jQuery comme exemple
URL: url + '& p = 3 & cb = window.bdsug.sug & sid = 1421_1513_1541_1542_1582 & t = 1353756355137', // Le dernier paramètre t est un horodatage
Type de données: «JSONP»,
Type: «Get»,
Succès: fonction (res) {
var msg = res.data, len = msg.length;
msg == null && (msg = []);
if (len> 0) {
data [val] = msg; // Résultats de recherche mis en cache
pour (var i = 0; i <len; i ++) {
console.log (msg [i]); // imprime le résultat de la demande
}
}
}, erreur: fonction () {
alert ('error');
}
});
}
};
Certains collègues ont demandé que de cette manière, la mémoire occupée par les données d'objet Cache deviendrait de plus en plus grande à mesure que les valeurs clés sont stockées. Ensuite, je veux dire que c'est inévitable. Pour enregistrer les demandes de serveur, d'autres doivent être sacrifiées. En fait, l'espace occupé par l'objet Cache est généralement négligeable car il n'est pas de "mémoire résidente" et il sera détruit une fois la page actualisée. Cependant, nous pouvons donner une autre solution, pour accepter une valeur de pointe pour cet objet, par exemple, il permet uniquement de stocker 100 paires de valeurs clés au plus. Lorsque le nombre dépasse 100, les dix premières clés stockées sont supprimées via l'opérateur de suppression ou tout simplement non stockées, ce problème peut donc être évité.
La méthode HasownProperty est particulièrement courante dans la détection d'objets. Bien sûr, les étudiants intéressés peuvent également se renseigner sur la méthode PropertySenumable. Il s'agit d'une version améliorée de HasownProperty. Il peut détecter ses propres propriétés et l'énumération des propriétés. Cet article n'explique pas en détail.