Lecture des cookies en JavaScript : solution efficace et compatible avec plusieurs navigateurs
Lorsque vous travaillez avec des scripts JavaScript autonomes, il est crucial d'optimiser le code pour la taille et la fiabilité. Une tâche courante consiste à lire les cookies, ce qui peut être réalisé par différentes méthodes. Cependant, trouver la solution la plus courte et la plus efficace peut être difficile.
Fonction readCookie() de Quirksmode.org
La méthode readCookie() de QuirksMode.org est un choix populaire mais a des limites en termes de taille et d'esthétique.
function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; }
Fonction read_cookie() de jQuery.cookie
jQuery.cookie utilise une méthode plus concise qui est également efficace :
function read_cookie(key) { var result; return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? (result[1]) : null; }
Solution optimisée : fonction getCookieValue()
Cependant, une solution plus courte, plus fiable et plus performante est disponible :
const getCookieValue = (name) => ( document.cookie.match('(^|;)\s*' + name + '\s*=\s*([^;]+)')?.pop() || '' )
Cette fonction utilise une expression régulière pour extraire la valeur associée au nom du cookie fourni. Elle est plus rapide et plus concise que les méthodes précédentes, comme le démontrent les benchmarks :
https://jsben.ch/AhMN6
Notes sur l'approche
Cette méthode regex permet non seulement d'obtenir la fonction la plus courte, mais résout également les incohérences potentielles dans la chaîne document.cookie. La RFC 2109 officielle indique que les espaces après le point-virgule sont facultatifs, et cette approche en tient compte. Il gère également les espaces avant et après le signe égal, garantissant ainsi la fiabilité de l'analyse des valeurs des cookies.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!