IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Commentaires

  1. Avatar de MagnusMoi
    • |
    • permalink
    Vraiment très instructif merci !!!
  2. Avatar de yahiko
    • |
    • permalink
    Tout à fait. A noter qu'il existe son successeur ts-node à utiliser plutôt que typescript-node.
    Maintenant, il reste encore rare de voir des projets 100% TypeScript. C'est plutôt pour une large part (et c'est un euphémisme) des projets JavaScript et l'idée de ce billet était plutôt de montrer comment ajouter une touche de TypeScript à un projet NodeJS/JavaScript.
    En tout cas, merci pour ce complément d'information.
  3. Avatar de pomauguet
    • |
    • permalink
    On peut lancer node nativement en TypeScript via un module NPM : https://www.npmjs.com/package/typescript-node

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # Exécution de script.ts
    ts-node script.ts
  4. Avatar de SylvainPV
    • |
    • permalink
    J'adore la syntaxe async/await. Mais je dois avouer que le gros avantage des Promise, c'est que ça t'incite énormément à paralléliser les traitements aynchrones. J'ai peur que la solution de simplicité await conduise à un manque de réflexion et une grosse perte de performances sur les projets avec beaucoup d'asynchronicité (comme pour Node par exemple).
  5. Avatar de p3ga5e
    • |
    • permalink
    Afin de compléter cette liste, j’y ajouterai le module suspend/resume qui se base également sur les générateurs ES6 mais étant compatible avec le Modèle D’API par callback d’ES5
  6. Avatar de yahiko
    • |
    • permalink
    Désolé aussi pour le retour tardif, je viens de voir votre message aujourd'hui.
    En effet, c'est assez ingénieux et pourrait permettre d'utiliser eval de façon plus sécurisée.
  7. Avatar de marts
    • |
    • permalink
    Je suis un peu long à la détente sur ce billet, mais voici une solution que j'ai mise au point ...

    Il est possible d'exécuter du code dans le contexte d'un objet, grâce à la structure with, et d'intercepter toutes les affectations au niveau de cet objet, grâce à un proxy.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    code = 'a = 2;';
    a = 1;
    test = function()
    {
        var o = {};
        var handler = {
            has : function() {return true;}
        };
        var p = new Proxy(o, handler);
        eval('with (p) {' + code + '}');
        alert(o.a); // => 2
    }
    test();
    alert(a); // => 1
    L'objet o constitue en quelque sorte l'objet global dans lequel le code est évalué. Si la variable à assigner n'existe pas, c'est là qu'elle est créée.
    Sans l'utilisation du proxy, l'affectation remonterait au contexte parent, c'est à dire l'intérieur de la fonction, puis au contexte global.

    Noter que le code évalué aura accès à tout ce qu'on aura préalablement placé dans l'objet.
  8. Avatar de yahiko
    • |
    • permalink
    Ça dépend de la finalité.
    Sur le principe oui, un Web Worker peut exécuter du code via eval() de façon isolée.
    C'est de ce point de vue une excellente remarque et peut dépanner si on n'a pas besoin de "binding" avec des fonctions du code parent.
    Dans le cas contraire, les Web Workers pourraient se révéler du coup trop isolés.
    Car l'échange de données via messages peut se révéler rédhibitoire (en terme de développement voire aussi en terme de perfs, mais là faut voir) que de passer par un interpréteur intégré.

    Donc pour un besoin très basique, les Web Workers peuvent se révéler utiles s'il s'agit juste d'exécuter un script JS sans dépendance (ou très peu) avec le code principal, et dont les retraitements du résultat sont minimes.

    S'il s'agit de mettre en place une API de scripting, là, la nécessité d'un interpréteur intégré est il me semble incontournable.
  9. Avatar de SylvainPV
    • |
    • permalink
    Charger tout un interpréteur me paraît quand même assez bourrin comme méthode d'isolation du code. N'y aurait-il pas une alternative plus simple, comme utiliser un Web worker par exemple ? Les Web workers ont leur propre scope global, et on peut contrôler les interactions avec le scope global de la page via postMessage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    myWorker.onmessage = function(e) {
      if(e.data[0] === "claim_global" && EXPOSED_GLOBALS.contains(e.data[1])){
         myWorker.postMessage(["give_global", window[e.data[1]]]);
      }
    }
    C'est une simple idée qui me vient, je n'ai pas testé la faisabilité de la chose.
  10. Avatar de yahiko
    • |
    • permalink
    Citation Envoyé par phpiste
    à votre avis des sites comme jsbin utilisent du javascript pour interpréter du js ?
    Même si je ne connais pas les technologies utilisées en back-office de ces sites, cela m'étonnerait qu'ils fassent appel à un interpréteur JS écrit en JS, ne serait-ce que pour des questions de performance. Ils doivent faire tourner peut-être des milliers de requêtes en simultanées. Peu de chance donc que ce soit du JS.

    Je pense plutôt qu'il s'agit d'un moteur en C ou C++ utilisant le moteur JS de Google (V8) ou celui de Mozilla Firefox (SpiderMonkey).
  11. Avatar de phpiste
    • |
    • permalink
    à votre avis des sites comme jsbin utilisent du javascript pour interpréter du js ?
  12. Avatar de yahiko
    • |
    • permalink
    Il n'y a pas de quoi
  13. Avatar de phpiste
    • |
    • permalink
    Merci pour cette explication très constructive

    Ahmed.
  14. Avatar de yahiko
    • |
    • permalink
    Citation Envoyé par phpiste
    [CITATION]Dans une seconde partie, j'expliquerai comment interpréter du JavaScript de façon fiable.[/CITATION]
    On est en attente de cette explication
    Elle ne devrait pas tarder à arriver ^^
  15. Avatar de phpiste
    • |
    • permalink
    [CITATION]Dans une seconde partie, j'expliquerai comment interpréter du JavaScript de façon fiable.[/CITATION]
    On est en attente de cette explication
  16. Avatar de yahiko
    • |
    • permalink
    Oui, j'aime bien ta dichotomie contenu/visuel. Aujourd'hui on n'a ni l'un ni l'autre effectivement.
  17. Avatar de Moineau
    • |
    • permalink
    Entièrement d'accord avec toi !
    On est d'abord passé du contenu au tout graphique ; merci les artistes, c'était beau (pas toujours) mais il fallait chercher le contenu qui ne devenait parfois que prétexte.
    Puis on a dû perdre les créatifs en route, et on est revenu à l'âge de pierre. Le flat design est à vomir : une accumulation de pavés qu'on se prend dans la gueule sans jamais savoir où regarder ! Si au moins on avait retrouver le contenu !
  18. Avatar de yahiko
    • |
    • permalink
    Citation Envoyé par SylvainPV
    Excellent Je pense partir sur ce framework pour la prochaine gamejam Developpez. Pas sûr d'être aussi productif qu'avec Construct 2, mais au moins je toucherai à du bon vieux code.
    Content que cela intéresse quelqu'un qui pourra en faire quelque chose ;-)
    Sinon, je n'ai encore jamais participé à la gamejam de Dvp. Faudra que je m'y mette je pense ^^
  19. Avatar de SylvainPV
    • |
    • permalink
    Excellent Je pense partir sur ce framework pour la prochaine gamejam Developpez. Pas sûr d'être aussi productif qu'avec Construct 2, mais au moins je toucherai à du bon vieux code.
  20. Avatar de Kreepz
    • |
    • permalink
    Je le garde sous la main!
Page 2 sur 4 PremièrePremière 1234 DernièreDernière