HtmlToText
accueil logiciels / scripts sites web trucs & astuces iterator et iterable en javascript posté par jerep6 le 19 avril 2015 no comments les concepts de d’itérator et d’itérable font leur entrée avec l’arrivée de es6. iterator un iterator est un objet possédant une méthode next() et renvoyant quand elle est appelée une structure contenant les propriétés done et value exemple d’iterator function myarrayiterator(arr) { var index = 0; return { next : function { if (index < arr.length) { return { done: false, value: arr[index++] }; } else { return { done: true }; } } } } var it = myarrayiterator(['s1', 's2']); console.log(it.next()); // { done: false, value: "s1" } console.log(it.next()); // { done: false, value: "s2" } console.log(it.next()); // { done: true } cet iterator n’est pas iterable, c’est à dire qu’il ne peut pas être parcouru par une boucle for ..of var it2 = myarrayiterator(['s1', 's2']) for(var item of it2) { // typeerror: it2[symbol.iterator] is not a function console.log(item); } iterable afin d’être itérable, un objet doit implémenter la méthode @@iterator, cela signifie que l’objet (ou un des objets de sa chaîne de prototypes) doit avoir une propriété avec une clé symbol.iterator. cette méthode doit renvoyer un object iterator. rendons notre objet myarrayiterator iterable : function myarrayiteratoriterable(arr) { var index = 0; return { [symbol.iterator] : function () { return { next : function () { if (index < arr.length) { return { done: false, value: arr[index++] }; } else { return { done: true }; } } } } } } var it2 = myarrayiteratoriterable(tab) for(var item of it2) { console.log(item); } // s1 // s2 exemple d’objet iterable var batman = new (function() { var self = this; var index=0; this.nom = 'wayne'; this.prenom = 'bruce'; this.parler = function() { console.log('bonjour'); } this[symbol.iterator] = function () { var keys = object.keys(self); return { next : function() { if (index < keys.length) { return { done: false, value: self[keys[index++]] }; } else { return { done: true }; } } } }; })(); for(var item of obj) { console.log(i); } // "wayne" // "bruce" // function obj</this.parler() l’asynchronisme en javascript posté par jerep6 le 28 février 2015 no comments quiconque a déjà programmé en javascript, s’est déjà confronté aux notions de programmation asynchrone. voyons 3 façons d’appréhender la problématique. que signifie « asynchrone » plutôt que d’avoir une valeur retournée directement par votre fonction, vous passez une callback qui sera appelée lorsque le résultat sera disponible. par exemple, lors d’un appel ajax, durant le traitement du serveur, le thread javascript n’est pas bloqué en attendant le retour. il traite d’autres instructions. si ce n’était pas le cas, la page web serait paralysée pendant toute la durée du traitement serveur. l’idée est donc de ne pas bloquer le thread principal dans l’attente de la réponse et de fournir une fonction qui sera appelée lorsque le résultat sera disponible. un message est mis dans la queue pour être traité une fois la réponse reçue. ainsi, le navigateur peut continuer ses traitements pendant que l’appel http est toujours en cours. de par sa nature monithread, en javascript les i/o sont non bloquantes. cela signifie qu’il n’y a pas d’attente de la réponse. le code continue de s’exécuter. le traitement de retour est positionné dans une callback qui sera exécutée quand la réponse surviendra. déroulement d’un appel ajax: 1 – lancement de la requête ajax 2 – enregistrement d’une callback de retour dans la queue 3 – traitement d’autres messages de la queue 4 – exécution de la callback quand la réponse est arrivée. la stack doit bien évidement être vide pour traiter la réponse. exemple : makeajaxrequest("http://www.google.fr", function(response) { console.log("retour appel ajax"); }); console.log("fin"); sortie de la console : fin retour appel ajax on voit bien que la première instruction console.log n’est pas la première exécutée. patterns asynchrones callback en javascript, les fonctions sont d’ordre supérieur c’est à dire qu’elles peuvent prendre une ou plusieurs fonctions comme entrée et renvoyer une fonction comme retour. de la première caractéristique découle qu’il est possible de passer une fonction en argument d’une autre et de l’exécuter plus tard dans le code. c’est le principe même des callbacks. une fonction de callback est une fonction passée en paramètre d’une autre fonction et appelée à l’intérieur de cette dernière. le callback hell est la complexité qui apparait lorsque l’on essaie de séquencer du code asynchrone utilisant des callbacks. il en résulte du code imbriqué, difficile à lire et à maintenir. le code ne se lit pas verticalement, la dernière ligne n’est pas la dernière instruction mais la plus profonde. exemple de callback hell aka pyramid of doom. function1(args, function () { function2(args, function () { function3(args, function () { function4(args, function () { console.log('done!'); }); }); }); }); le code est péniblement refactorable. imaginez que vous souhaitiez inverser les fonctions 2 et 3 – et pour un peu plus de réalisme elles n’ont pas un nom similaire ni les mêmes arguments. il vous faut coupez/coller la fonction 3 au dessus de la 2, réimbriquer le code et le réindenter. c’est assez laborieux. il est possible de nommer et d’extraire les fonctions, mais cela ne résout pas le problème en nommant les fonctions de callback nous arrivons à quelques chose de mieux. la profondeur du code est moindre, mais il est tout de même difficile d’avoir une vue globale de l’enchainement des fonctions. il faut naviguer de fonction en fonction pour découvrir le séquencement des appels. function1(args, callback1); function callback1() { function2(args, callback2); } function callback2() { function3(args, callback3); } function callback3() { function4(args, callback4); }); function callback4 () { console.log('done!'); }); promesse le but des promesses est de simplifier l’écriture de code asynchrone. les api utilisant les promesses ne prennent pas de callback en paramètre mais renvoient un objet promesse. un objet promesse n’a que quelques méthodes, dont la plus importante est then . la méthode then prend un ou deux arguments, le premier est appelé quand la promesse est résolue (succès) et le second lorsqu’elle est rejetée (erreur). il est possible de chainer les promesses grâce à la méthode then. pour cela, la fonction de traitement peut renvoyer une promesse ou une valeur brute qui sera passé en paramètre de la prochaine fonction. je ne rentre volontairement pas plus dans le détail car il existe de nombreux articles expliquant le fonctionnement des promesses. récrivons l’exemple précédent avec des promesses. function1(args) .then(callback1) .then(callback2, callbackerror2) .then(callback3) .then(callback4); function callback1() { return function2(args); } function callback2() { return function3(args); } function callbackerror2() { console.log("error2"); } function callback3() { return function4(args); }); function callback4 () { console.log('done!'); }); le séquencement est immédiatement perceptible en regardant les « then ». la gestion des erreurs est également simplifiée. si une promesse est rejetée, l’erreur se propage dans tout les then gérant une erreur. generator pour une présentation détaillé des générator, je vous invite à lire la présentation très complète de kyle simpson . en synthèse, les générators arrivent dans es6 et ne sont donc pas encore supportés par tous les navigateurs. un générator est une fonction préfixée par le symbole « * ». la fonction est alors en attente jusqu’à ce qu’un appel à la méthode « next » soit effectué. chaque appel à « next » exécute la fonction jusqu’au prochain « yield » exemple : function simplegenerator(){ yield "first"; yield "second"; yield "third"; for (var i = 0; i < 3; i++) { yield i; } } var g = simplegenerator(); console.log(g.next()); // { value: "first", done: false } console.log(g.next()); // { val
Informations Whois
Whois est un protocole qui permet d'accéder aux informations d'enregistrement.Vous pouvez atteindre quand le site Web a été enregistré, quand il va expirer, quelles sont les coordonnées du site avec les informations suivantes. En un mot, il comprend ces informations;
%%
%% This is the AFNIC Whois server.
%%
%% complete date format : DD/MM/YYYY
%% short date format : DD/MM
%% version : FRNIC-2.5
%%
%% Rights restricted by copyright.
%% See https://www.afnic.fr/en/products-and-services/services/whois/whois-special-notice/
%%
%% Use '-h' option to obtain more information about this service.
%%
%% [2600:3c03:0000:0000:f03c:91ff:feae:779d REQUEST] >> jerep6.fr
%%
%% RL Net [##########] - RL IP [#########.]
%%
domain: jerep6.fr
status: ACTIVE
hold: NO
holder-c: ANO00-FRNIC
admin-c: OVH5-FRNIC
tech-c: OVH5-FRNIC
zone-c: NFC1-FRNIC
nsl-id: NSL30611-FRNIC
registrar: OVH
Expiry Date: 12/01/2018
created: 12/01/2013
last-update: 17/01/2017
source: FRNIC
ns-list: NSL30611-FRNIC
nserver: dns103.ovh.net
nserver: ns103.ovh.net
source: FRNIC
registrar: OVH
type: Isp Option 1
address: 2 Rue Kellermann
address: ROUBAIX
country: FR
phone: +33 8 99 70 17 61
fax-no: +33 3 20 20 09 58
e-mail: support@ovh.net
website: http://www.ovh.com
anonymous: NO
registered: 21/10/1999
source: FRNIC
nic-hdl: ANO00-FRNIC
type: PERSON
contact: Ano Nymous
remarks: -------------- WARNING --------------
remarks: While the registrar knows him/her,
remarks: this person chose to restrict access
remarks: to his/her personal data. So PLEASE,
remarks: don't send emails to Ano Nymous. This
remarks: address is bogus and there is no hope
remarks: of a reply.
remarks: -------------- WARNING --------------
registrar: OVH
changed: 12/01/2013 anonymous@anonymous
anonymous: YES
obsoleted: NO
source: FRNIC
nic-hdl: OVH5-FRNIC
type: ROLE
contact: OVH NET
address: OVH
address: 140, quai du Sartel
address: 59100 Roubaix
country: FR
phone: +33 8 99 70 17 61
e-mail: tech@ovh.net
trouble: Information: http://www.ovh.fr
trouble: Questions: mailto:tech@ovh.net
trouble: Spam: mailto:abuse@ovh.net
admin-c: OK217-FRNIC
tech-c: OK217-FRNIC
notify: tech@ovh.net
registrar: OVH
changed: 11/10/2006 tech@ovh.net
anonymous: NO
obsoleted: NO
source: FRNIC
REFERRER http://www.nic.fr
REGISTRAR AFNIC
SERVERS
SERVER fr.whois-servers.net
ARGS jerep6.fr
PORT 43
TYPE domain
RegrInfo
DISCLAIMER
%
% This is the AFNIC Whois server.
%
% complete date format : DD/MM/YYYY
% short date format : DD/MM
% version : FRNIC-2.5
%
% Rights restricted by copyright.
% See https://www.afnic.fr/en/products-and-services/services/whois/whois-special-notice/
%
% Use '-h' option to obtain more information about this service.
%
% [2600:3c03:0000:0000:f03c:91ff:feae:779d REQUEST] >> jerep6.fr
%
% RL Net [##########] - RL IP [#########.]
%
REGISTERED yes
ADMIN
HANDLE OVH5-FRNIC
TYPE ROLE
CONTACT OVH NET
ADDRESS
OVH
140, quai du Sartel
59100 Roubaix
COUNTRY FR
PHONE +33 8 99 70 17 61
EMAIL tech@ovh.net
TROUBLE
Information: http://www.ovh.fr
Questions: mailto:tech@ovh.net
Spam: mailto:abuse@ovh.net
ADMIN-C OK217-FRNIC
TECH-C OK217-FRNIC
NOTIFY tech@ovh.net
SPONSOR OVH
CHANGED 2006-10-11
ANONYMOUS NO
OBSOLETED NO
SOURCE FRNIC
TECH
HANDLE OVH5-FRNIC
TYPE ROLE
CONTACT OVH NET
ADDRESS
OVH
140, quai du Sartel
59100 Roubaix
COUNTRY FR
PHONE +33 8 99 70 17 61
EMAIL tech@ovh.net
TROUBLE
Information: http://www.ovh.fr
Questions: mailto:tech@ovh.net
Spam: mailto:abuse@ovh.net
ADMIN-C OK217-FRNIC
TECH-C OK217-FRNIC
NOTIFY tech@ovh.net
SPONSOR OVH
CHANGED 2006-10-11
ANONYMOUS NO
OBSOLETED NO
SOURCE FRNIC
OWNER
HANDLE ANO00-FRNIC
TYPE PERSON
CONTACT Ano Nymous
REMARKS
-------------- WARNING --------------
While the registrar knows him/her,
this person chose to restrict access
to his/her personal data. So PLEASE,
don't send emails to Ano Nymous. This
address is bogus and there is no hope
of a reply.
-------------- WARNING --------------
SPONSOR OVH
CHANGED 2013-01-12
ANONYMOUS YES
OBSOLETED NO
SOURCE FRNIC
DOMAIN
STATUS ACTIVE
HOLD NO
SPONSOR OVH
EXPIRY DATE 12/01/2018
CREATED 2013-01-12
CHANGED 2017-01-17
SOURCE FRNIC
HANDLE NSL30611-FRNIC
NSERVER
DNS103.OVH.NET 213.251.188.147
NS103.OVH.NET 213.251.128.147
NAME jerep6.fr
Go to top