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

Tai ką dabar darysime su node.js?...

Tai ką dabar darysime su node.js?...

Kodėl JS? Kodėl nodejs? Kam tinka nodejs? Kam netinka ir kodėl ne-nodejs?

Dominykas Blyžė

January 09, 2013
Tweet

More Decks by Dominykas Blyžė

Other Decks in Programming

Transcript

  1. Tai ką dabar
    darysime su
    node.js?...
    Autorius ( ), 2013-01-09
    Dominykas Blyžė @dymonaz

    View full-size slide

  2. Bet kuri programa, kuri
    gali būti parašyta su JS,
    bus parašyta su JS.
    Atwood'o taisyklė / Atwood's law
    http://www.codinghorror.com/blog/2007/07/the-principle-of-least-power.html

    View full-size slide

  3. Kodėl JS?
    Mažiausiai investicijų reikalaujanti kalba
    Pasiekiama kiekvienam
    Vykdoma visuose kompiuteriuose, visose OS
    ...išskyrus serverius (nes serveriuose yra PHP?)

    View full-size slide

  4. Kodėl JS?

    everybody hates Perl, and not everybody
    hates JavaScript.

    https://twitter.com/horse_js/status/288352517744644096

    View full-size slide

  5. Kodėl JS, nepaisant jos
    šlykštumo?
    Nes nėra kitos išeities.
    WAT: https://www.destroyallsoftware.com/talks/wat

    View full-size slide

  6. If life gives you Javascript
    developers, do node.js
    @oisin
    https://twitter.com/stevebiscuit/status/218422616367702016

    View full-size slide

  7. Kas buvo prieš node.js?
    Server-side Non-browser JS istorija:
    ASP / Active Scripting (~1995?)
    Rhino (~1997)
    Adobe Air (~2007)
    Jaxer (~2008)

    View full-size slide

  8. node.js (2009)
    http://www.google.com/trends/explore#q=ruby%20on%20rails,%20node.js

    View full-size slide

  9. Kodėl node.js auga
    sprogstamu greičiu?
    Geras marketingas?
    Tinkamu laiku, tinkamoje vietoje?

    View full-size slide

  10. Kodėl node.js: greitis
    V8
    Neblokuojanti įvestis/išvestis

    View full-size slide

  11. Kodėl node.js: API
    konvencijos
    Paskutinis argumentas - callback'as
    Pirmas argumentas - klaida
    f
    s
    .
    r
    e
    a
    d
    F
    i
    l
    e
    (
    f
    n
    , [
    e
    n
    c
    o
    d
    i
    n
    g
    ]
    , [
    c
    a
    l
    l
    b
    a
    c
    k
    ]
    )
    f
    s
    .
    r
    e
    a
    d
    F
    i
    l
    e
    (
    f
    n
    , f
    u
    n
    c
    t
    i
    o
    n
    (
    e
    r
    r
    , d
    a
    t
    a
    ) {
    /
    *
    .
    .
    *
    /
    }
    )
    ;

    View full-size slide

  12. Kodėl node.js: npm
    20k+ modulių
    Išspręsta versijų problema
    Modulis A @ v1
    Modulis B @ v1
    Modulis A @ v2
    Modulis C @ v3
    Modulis B @ v2
    Modulis A @ v666

    View full-size slide

  13. Kodėl node.js: greitas
    perkrovimas *
    * #ProTip: nekraukit aplikacijos per s
    s
    h
    f
    s

    View full-size slide

  14. Kam tinka node.js?
    "Node's goal is to provide an easy way to build scalable
    network programs"
    http://nodejs.org/about/

    View full-size slide

  15. Serveriai
    ...net jei atrodo baisu "pačiam" rašyti savo HTTP serverį
    Nebūtina viską atlikinėti to pačio request'o metu

    View full-size slide

  16. Privalomoji meh skaidrė
    1. Statinis web'as
    2. Dinaminis web'as
    3. AJAX
    4. Real-time web'as, HTML5

    View full-size slide

  17. Real-time komunikacija
    Web sockets, streaming
    Video, audio, WebRTC, žaidimai, P2P
    Server sent events

    View full-size slide

  18. SPA JSON API
    * nekurkit single page applikacijų, nebent esat tikri, kad reikia būtent SPA

    View full-size slide

  19. Progressive
    enhancement?
    Conditional-tier rendering
    http://functionsource.com/post/conditional-tier-rendering-twitter-achieves-level-5-5-of-the-
    render-game

    View full-size slide

  20. Desktop aplikacijos?
    http://appjs.org/

    View full-size slide

  21. Skraidantys robotai!!1Ąą!
    Foto: (c) Remy Sharp http://www.flickr.com/photos/remysharp/8215998053/
    http://nodecopter.com/

    View full-size slide

  22. Node.js trūkumai

    View full-size slide

  23. Kai reikia daug CPU,
    geriau nenaudoti
    Kol vyksta skaičiavimai, event loop sustoja.
    p
    r
    o
    c
    e
    s
    s
    .
    n
    e
    x
    t
    T
    i
    c
    k
    (
    )
    Workers
    Memoization
    Streams

    View full-size slide

  24. Neišdojami CPU core'ai

    View full-size slide

  25. Neišdojami CPU core'ai
    Leisti kelis procesus ir balansuoti apkrovas
    cluster: http://nodejs.org/api/cluster.html

    View full-size slide

  26. API vis dar nestabilus
    v1 gal ir ne už kalnų, bet pvz. iš v0.8 į v0.10 pasikeitė
    Stream'ų implementacija ir šiek tiek API

    View full-size slide

  27. Reikia dažnai upgreidint

    View full-size slide

  28. npm: 20k modulių
    Naudoti
    Tikrinti github
    nodezoo.com

    View full-size slide

  29. Trūksta nusistovėjusių
    geriausių praktikų
    Aktyvi bendruomenė twitteryje visada pasiruošus
    padėti.

    View full-size slide

  30. Mokymosi kreivė
    Nepaisant to kaip gerai moki JS, geriausios node.js
    aplikacijų praktikos dar nesusiformavusios.
    KISS
    Maži moduliai
    Architektūra, leidžianti keisti implementacijas
    TDD

    View full-size slide

  31. Callback hell
    Asinchroniškai mąstyti yra sunku.
    Promises: Q, when.js
    Async.js
    v
    a
    r f
    s = r
    e
    q
    u
    i
    r
    e
    (
    "
    f
    s
    "
    )
    , Q = r
    e
    q
    u
    i
    r
    e
    (
    "
    q
    "
    )
    ;
    Q
    .
    n
    i
    n
    v
    o
    k
    e
    (
    f
    s
    , "
    r
    e
    a
    d
    F
    i
    l
    e
    "
    , f
    i
    l
    e
    N
    a
    m
    e
    )
    .
    t
    h
    e
    n
    (
    f
    u
    n
    c
    t
    i
    o
    n
    (
    c
    o
    n
    t
    e
    n
    t
    s
    )
    {
    /
    * .
    . *
    /
    }
    )
    .
    f
    a
    i
    l
    (
    f
    u
    n
    c
    t
    i
    o
    n
    (
    e
    r
    r
    o
    r
    )
    {
    /
    * .
    . *
    /
    }
    )
    .
    d
    o
    n
    e
    (
    )
    ;

    View full-size slide

  32. Ar node.js jau tinka
    produkcijai?
    eBay ( )
    LinkedIn ( )
    Microsoft ( )
    Yahoo! ( , )
    ql.io
    mobilios aplikacijos API
    Azure
    YUI Mojito
    Trello
    Walmart

    View full-size slide

  33. Tai ką dabar darysime su
    node.js?

    View full-size slide

  34. Ačiū
    Skaidrės:
    ,
    http://dominykas.net/12
    @dymonaz +Dominykas Blyžė

    View full-size slide