LES COOKIES ET JAVASCRIPT

cs_Kimjoa Messages postés 262 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 19 septembre 2014 - 7 nov. 2009 à 17:02
W Bush Messages postés 2 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 24 mai 2010 - 24 mai 2010 à 11:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50807-les-cookies-et-javascript

W Bush Messages postés 2 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 24 mai 2010
24 mai 2010 à 11:57
Tiens, bizarre, j'ai fait un petit bout de code et ça ne marche pas bien ...

Quand je ne fais pas de delete, ça me retourne undefined et quand je fais le delete, alors là il me donne bien le résultat :(

parameters = new Cookie("parameters", "JSON");
parameters.addAttribute("cook1", "test");
parameters.deleteAttribute("cook1");

alert("Valeur obtenue : " + parameters["cook1"]);

Une idée de l'origine de mon problème ? (ai-je 2 mains gauches ?)

Merci ^^
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
7 mars 2010 à 22:18
De nada, ça fait plaisir !
W Bush Messages postés 2 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 24 mai 2010
7 mars 2010 à 20:43
Bonjour,

J'aime beaucoup, c'est bien plus complet que tout ce que l'on peut trouver sur le sujet ^^

Merci pour ce bon code bien utile
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
13 nov. 2009 à 18:31
C bn j'ai changer le code, mais j'ai laissé les attributs dans les closures.

Ps: le prototype est interpréter en premier:

function ClassA()
{
this.attr1 = this.attr2;
}
ClassA.prototype.attr2 = "okay";

function ClassB()
{
this.attr1 = "okay";
}
ClassB.prototype.attr2 = this.attr1;

var objA = new ClassA();
var objB = new ClassB();
alert(objA.attr1); //alerte "okay"
alert(objB.attr2); //alert undefined
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
10 nov. 2009 à 18:38
Enfait la la flem de tout changer, tout les this en Cookie, mais je le ferais plus tard, pour l'instant ce code a quand même le mérite d'être opérationnel.Merci Kimjoa pour m'avoir aider à l'améliorer.

Ps: j'ai créer un tit jeu de calcul mental multijoueur en Jscript sous MsgPlus, quelqu'un sait-il s'il est possible de activer/désactiver la Calculatrice Windows avec la base de registres, quel est la clef, Merci.
cs_Kimjoa Messages postés 262 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 19 septembre 2014
9 nov. 2009 à 13:42
avec le teste ci dessus , un petit calcule fera l'affaire, pour savoir à partir de combien d'appel minimum d'une méthode, est il plus avantageux de la déclarer à l'instance... mais en générale on préfère le prototype, pour ton code t'en as pour 2 min ;)

bye
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
8 nov. 2009 à 18:12
Voila, mon code permet maintenant de créer des cookies au format JSON soit de définir plusieurs attributs.

En conclusion de tes test: les méthodes les moins utiles doivent etre instanciées avec le prototype pour augmenter la performance de mon code?

j'att ta confirmation avant de me lancer dans ça ++
cs_Kimjoa Messages postés 262 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 19 septembre 2014
8 nov. 2009 à 13:38
me suis amuser a faire un bench sur les prototype , le voici

//déclaration des classes
function test1(){this.methode = function(){}}

function test2(){}
test2.prototype.methode = function(){};


var obj1 = new test1();
var start = new Date();
for(var i = 0; i < 10000000; i++)
obj1.methode();
alert("temps d'éxécution d'une méthode déclarer dans l'instance : " + (new Date() - start) + "m/s");


//test d'éxécution d'une méthode avec prototype
var obj2 = new test2();
var start = new Date();
for(var i = 0; i < 10000000; i++)
obj2.methode();
alert("temps d'éxécution d'une méthode déclarer dans le prototype : " + (new Date() - start) + "m/s");

//test d'instanciation avec prototype
var start = new Date();
for(var i = 0; i < 100000; i++)
new test1();
alert("temps d'instanciation d'un objet sans prototype : " + (new Date() - start) + "m/s");

//test d'instanciation avec prototype
var start = new Date();
for(var i = 0; i < 100000; i++)
new test2();
alert("temps d'instanciation d'un objet avec prototype : " + (new Date() - start) + "m/s");

conclusion :
l'exécution d'une méthode de prototype est 50% moi rapide que une closure
l'instanciation d'un objet comprenant que une méthode , est 500% plus rapide dans une classe déclarant sa méthode dans le prototype
cs_Kimjoa Messages postés 262 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 19 septembre 2014
8 nov. 2009 à 13:22
pour le prototype aucune idée, en faite je pense que ca dépend de plusieurs facteurs, par exemple dans ton code il est rare que pour un objet cookie on fasse appel à toutes ses méthodes, alors que toi tu perds du 'temps' à toutes les déclarer. Dans le cas contraire, et si on appel beaucoup de fois toutes ses méthodes, alors peut-être que ses plus rapide sans prototype, car comme je l'ai l'interpréteur va chercher d'abord dans l'instance avant le prototype...

mais bon c'est surtout une question de mémoire, et la différence entre l'exécution d'une méthode de prototype , et une méthode déclarer dans l'instance (closure) est tros minime pour qu'on en tienne compte, mais tu peux faire un bench pour en être sur!!

bye
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
8 nov. 2009 à 00:17
Avec le prototype, le code sera interpréter plus rapidement ?

Pour le JSON, bonne idée, je pense que je vais donc devoir complètement repenser mon code.
cs_Kimjoa Messages postés 262 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 19 septembre 2014
7 nov. 2009 à 21:49
concernant le prototype, c'est juste une question de mémoire, sans, tu déclares pour chaque instance de nouvelles fonctions, avec, lors d'un getter, l'interpréteur va chercher la propriété d'abord dans l'instance puis dans les chaines de prototypes.

pour le JSON, ca permet de récupérer plusieurs valeurs pour un seul appel. De plus ca permet de na pas connaitre ses valeurs, et donne un aspect dynamique. Le problème c'est qu'il faut sérialiser l'objet, mais il existe déjà plein de fonction toute faite sur le web

bye
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
7 nov. 2009 à 21:10
Merci pour ton message et ta note:
- j'avais oublier removeCookie() (bien vu)
- j'ai ajouté une option pour mettre la date d'expiration:
objCookie.setExpire("10/09/2012", "until");

A quoi me servirait le prototype ?

Peux tu m'éclaircir sur tes cookie au format JSON ?
cs_Kimjoa Messages postés 262 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 19 septembre 2014
7 nov. 2009 à 17:02
tu codes en objet , mais qu'avec des closures, utilise le prototype.

Pas de méthode remove cookies?

Pour setExpire , ca n'aurait pas été mieux de passer une date d'expiration?

Sinon une fonction souvent utilisé , c'est de pouvoir écrire un cookie au format JSON, et de l'évaluer lors d'un get

Une bonne note pour t'encourager ;)

Sinon c'est bien codée a++
Rejoignez-nous