Upgrade to Pro — share decks privately, control downloads, hide ads and more …

io.js 東京Node学園 15時限目

io.js 東京Node学園 15時限目

io.js 東京Node学園の15時限目の資料です。

Yosuke Furukawa
PRO

February 10, 2015
Tweet

More Decks by Yosuke Furukawa

Other Decks in Programming

Transcript

  1. io.js
    [email protected]
    ౦ژ/PEFֶԂ࣌ݶ໨ࢿྉ

    View Slide

  2. [email protected]
    /PEFKT೔ຊϢʔβʔάϧʔϓ୅ද%F/"ॴଐ

    View Slide

  3. վΊ…

    View Slide

  4. [email protected]
    /PEFJPKT೔ຊϢʔβʔάϧʔϓ୅ද%F/"ॴଐ

    View Slide

  5. io.jsͱ͸Կ͔

    View Slide

  6. Node.jsͷ
    friendly fork

    View Slide

  7. friendly fork??
    લ͸sporkͬͯॻ͍ͯ͋ͬͨ

    View Slide

  8. fork

    View Slide

  9. spork

    View Slide

  10. spork
    fork͸͢Δ͚ͲɺϑΥʔΫ΄Ͳઌ͕Θ͔Ε͍ͯͳ͍ɻ
    ࢥ͍͸ಉ͡ɺͱ͍͏ҙຯͰͷfriendly fork

    View Slide

  11. Node.jsͱͷҧ͍

    View Slide

  12. ϓϩδΣΫτͷऔΓ૊Έํ

    View Slide

  13. io.js͸ΦʔϓϯΨόφϯεϞσϧ
    issue΍featureͷղܾΛΦʔϓϯʹ͢Δ࢓૊Έ

    View Slide

  14. io.js͸ΦʔϓϯΨόφϯεϞσϧ
    ೋिؒʹҰճ͘Β͍ͷλΠϛϯάͰTC Meeting͕ߦΘΕɺϋϯάΞ΢τͷ࿥
    ըͱٞࣄ࿥͕ల։͞ΕΔɻissue΍featureΛॲཧ͢Δͷ͸جຊతʹ߹੍ٞɺͨ
    ͩ͠ҙݟׂ͕ΕͨΒvoteͰܾΊΔɻ

    View Slide

  15. ΦʔϓϯΨόφϯεʹΑͬͯissue/
    featureͷಁ໌ੑΛ֬อ͠ɺίϯτϦ
    Ϗϡʔτ͠΍͘͢͢Δ

    View Slide

  16. ΦʔϓϯΨόφϯεʹΑͬͯissue/
    featureͷಁ໌ੑΛ֬อ͠ɺίϯτϦ
    Ϗϡʔτ͠΍͘͢͢Δ
    1݄͚ͩͰ294ίϛοτ

    View Slide

  17. View Slide

  18. ৽͘͠Committer͕6ਓ௥Ճ

    View Slide

  19. ΦʔϓϯΨόφϯεʹΑΔಁ໌ੑͷ֬อ
    ͱio.js΁ͷظ଴͔Βίϛοτ਺ɺίϯτ
    ϦϏϡʔλʔ਺͕૿͑ͯΞΫςΟϒʹɻ

    View Slide

  20. Node.jsͱͷ

    ػೳ໘Ͱͷҧ͍

    View Slide

  21. v8ͷόʔδϣϯ
    v4.1.0.14

    View Slide

  22. σϑΥϧτͰ࢖͑Δ
    let/const
    generators
    Binary/Octal Literal
    Template String Literal
    String new methods

    View Slide

  23. "use strict";
    // const
    const koa = require('koa');
    const app = koa();
    // generator
    app.use(function *(next){
    // let block scope
    let start = new Date;
    // yield ඇಉظݺͼग़͠ΛݮΒͤΔ
    yield next;
    let ms = new Date - start;
    // template string literal
    this.set('X-Response-Time', `${ms}ms`);
    });
    app.use(function *(next){
    let start = new Date;
    yield next;
    let ms = new Date - start;
    console.log(`{this.method} {this.url} - ms`);
    }); ͜Μͳ෩ʹॻ͚Δ

    View Slide

  24. --es_stagingΛ͚ͭΕ͹࢖͑Δ
    class
    Enhanced Object Literal
    Symbol.toStringTag

    View Slide

  25. "use strict";
    // class
    class Person {
    constructor(name, age) {
    this.name = name
    this.age = age
    }
    getInfo() {
    let name = this.name;
    let age = this.age;
    let nextAge = this.age + 1;
    // enhanced object literal
    return {
    name,
    age,
    nextAge
    };
    }
    }
    // @@toStringTag ෇͚ͳ͍ͱ [object object]
    Person.prototype[Symbol.toStringTag] =
    "Person";
    var alice = new Person('alice', 13);
    var bob = new Person('bob', 15);
    console.log('' + alice);
    console.log(bob.getInfo());
    ͜Μͳ෩ʹॻ͚Δ

    View Slide

  26. ҎԼͷػೳ͸ݸผʹϑϥά͕ඞཁ
    arrow_functions
    proxy
    Array new methods
    unicode
    ΋͏͠͹͓͠଴ͪΛɻ

    View Slide

  27. ৽API௥Ճ
    V8

    View Slide

  28. heap౷ܭ͕औΕΔ
    v8Φϓγϣϯ͕adhocʹઃఆͰ͖Δ

    View Slide

  29. "use strict";
    const v8 = require('v8');
    // gcΛtrace͢ΔΦϓγϣϯΛONʹ͢Δ
    v8.setFlagsFromString('--trace-gc');
    for (let i=0; i< 10000; i++) {
    // ώʔϓͷ౷ܭΛऔΔ
    console.log(v8.getHeapStatistics());
    global.gc();
    }
    // 10ඵ͚ؒͩv8ͷGCΛtrace͠ɺ͕࣌ؒա͗ͨΒOFFʹ͢Δ
    setTimeout(function(){
    v8.setFlagsFromString('--notrace-gc');
    }, 10 * 1000);

    View Slide

  30. ͋ͱ͸ࡉ͔͘…
    simple creatation Stream

    assert.deepStrictEqual
    util.debuglog
    etc…

    View Slide

  31. Node.jsͱͷ

    ੑೳ໘Ͱͷҧ͍

    View Slide

  32. http͚ͩͰbench

    View Slide

  33. http͚ͩͰbench
    4%΄Ͳ޲্
    http_parser͸ಉ͡(2.3.0)ͷͨΊɺ

    ͦ͜·ͰมԽ͸ແ͍ɻ

    View Slide

  34. fs, net, tlsΛؚΊͯ

    View Slide

  35. fs, net, tlsΛؚΊͯ
    શମతʹ10%ఔ౓ͷ޲্ɻ

    View Slide

  36. ͦͷଞ io.jsͷ࠷৽
    χϡʔε

    View Slide

  37. ͜ΕݟΕ͹

    ͍͍ͩͨҰൃ
    https://www.youtube.com/watch?v=1IOukA10QeQ

    View Slide

  38. Atom/NW.js͕io.jsʹ
    Travis CI΋ io.jsΛαϙʔτ
    Codeship΋io.jsΛαϙʔτ
    Tessel΋αϙʔτ…

    View Slide

  39. io.jsͷ׆ಈΛNode
    Ϣʔβʔάϧʔϓ͸Ͳ
    ͏͢Δ͔ɻ

    View Slide

  40. ੵۃతʹਐΊ͍ͯ͘

    View Slide

  41. ಛʹࠓ͸Nodeͱiojs
    Ͳͬͪ࢖ͬͨΒ͍͍
    ͔ࠞཚͯ͠Δ࣌ظ

    View Slide

  42. օͰٞ࿦ΛਐΊ͍ͨ
    NodeͱiojsͷࠞཚΛ
    ೔ຊͰ͸๷͍͗ͨɻ

    View Slide

  43. iojsͷ຋༁Λߦ͏
    nodeͱiojsͷੑೳΛܧଓͯ͠ଌΔ
    ΑΓΞΫςΟϒʹٞ࿦Λߦ͑ΔΑ
    ͏ʹ͢Δ
    ۩ମతʹ

    View Slide

  44. https://iojs-jp-slack.herokuapp.com/

    View Slide