JQuery, CoffeeScript, SVG рдФрд░ node.JS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдСрдирд▓рд╛рдЗрди рдЧреЗрдо

рдЫрд╡рд┐
рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рдЦрд┐рд▓реМрдирд╛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдФрд░ рдЕрдм, рдЙрдкрдпреБрдХреНрдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ "рдЙрддреНрдХреГрд╖реНрдЯ рдХреГрддрд┐" рдмрдирд╛рдИред

рдЦреЗрд▓ рдХреЙрдлреА рдХреА рдкрдЯрдХрдерд╛ рдФрд░ рдиреЛрдб рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рджреЛ рдЦреЗрд▓ рд╕рдХреЗрдВред рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдХреЙрдлреА рдХреЛ рдЬрд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдпрд╣рд╛рдБ рдПрдХ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

coffee --compile --output ../js/ js/ while inotifywait -q -r -e modify .; do coffee --compile --output ../js/ js/ done 

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЬреЗрдПрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рдХреЙрдлреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реБрдирддрд╛ рд╣реИ рдФрд░, рдЬрдм рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдХрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЬреЗрдПрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рд╕реНрддрд░ рдЕрдзрд┐рдХ рдмрдЪрд╛рддрд╛ рд╣реИред

рдореИрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЕрдкрдиреЗ рдЦреЗрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рддрдВрддреНрд░ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреЙрдлреА рдЧреНрд░рд╛рд╣рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ (jQuery рдЬреБрдбрд╝рд╛ рд╣реИ):

 class @Hello constructor: -> window.WebSocket = window.WebSocket || window.MozWebSocket; if !window.WebSocket alert(['   WebSocket']) return false #     @connection = new WebSocket('ws://localhost:1337') @connection.onopen = @onopen @connection.onmessage = @message # ,       node  onopen: => #          @connection.send(JSON.stringify( 'index':'test_message' 'text':'' )) # ,      message:(message) => #    alert(message.data) #       "hello"  jQuery $.fn['hello'] = () => object = new @Hello() return $(@).data('hello', object) 

"рд╣реИрд▓реЛ" рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, "рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░" рд╡рд┐рдзрд┐, рдЬреЛ рдиреЛрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реА рд╣реИред

рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдкрд░, рдСрдиреЛрдкреЗрди рд╡рд┐рдзрд┐ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рддреБрд░рдВрдд JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрджреЗрд╢ рднреЗрдЬрддреА рд╣реИред

рдФрд░ рдЕрдВрддрд┐рдо рдЪрд░рдг: рдпрджрд┐ рд╕рд░реНрд╡рд░ рдиреЗ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬреА, рддреЛ "рд╕рдВрджреЗрд╢" рд╡рд┐рдзрд┐ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдЪреЗрдд рдХрд░рддреА рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рд╕рд░реНрд╡рд░ рд╣реИ рдЬреЛ рдореЗрд░реЗ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ:

 process.title = 'node-test'; var webSocketServer = require('websocket').server; var http = require('http'); var fs = require('fs'); var sys = require('sys'); var server = http.createServer(function(request, response) {}); server.listen(1337, function() {console.log('Web server runing...');}); var wsServer = new webSocketServer({httpServer: server}); wsServer.on('request', function(request) { var connection = request.accept(null, request.origin); connection.on('message', function(message) { var json = JSON.parse(message.utf8Data); switch (json.index) { case 'test_message': connection.sendUTF(' !'); break; } }); }); 

рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, "рдХрдиреЗрдХреНрд╢рди.рдСрди" рдкрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрджреЗрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЪрд░ "рдЗрдВрдбреЗрдХреНрд╕" "test_message" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХреНрдпрд╛ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ), рддреЛ рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ "рд╡реЗрд▓ рд╣реЗрд▓реЛ!" рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВред рдХрдиреЗрдХреНрд╢рди рд╕реВрдЪреА рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдкреВрд░рд╛ рддрдВрддреНрд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдиреЛрдб рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЦреЗрд▓ рдХрд╛ рд╕рдВрдмрдВрдз рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рдЦреЗрд▓ рдХреЗ рдХрд░реАрдмред рдореИрдВрдиреЗ рдкреМрд░рд╛рдгрд┐рдХ рдмреИрдЯрд▓ рд╕рд┐рдЯреА рдЦреЗрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдмрд╛рдд рдереА (рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдирдо)ред

рдЖрдк рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕реНрдХрд░рдг рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдореЗрд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕реНрдерд╛рдиреАрдп рдФрд░ рд╡реЗрдм рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
1) рдЦреЗрд▓
2) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рдЧреЗрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ jQ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпреБрджреНрдзрдХреНрд╖реЗрддреНрд░ рд╕реНрд╡рдпрдВ SVG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЧреЗрдо рдореЗрдВ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд░реВрдкреЛрдВ рдФрд░ рдмреЙрдЯ, рдкреНрд▓реЗрдпрд░, рдЖрдЗрдХрди рдХрд╛ рдкреВрд░реНрдг рддрддреНрд╡ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЪрд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рддреБрд░рдВрдд рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреВрд░реЗ рдпреБрджреНрдзрдХреНрд╖реЗрддреНрд░ рдХреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ (20 рд╕реЗ 20) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдХреЛрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЧреЛрд▓реЗ рдХреА рдЧрд┐рдирддреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ)ред

рд╕реНрддрд░ рдХреЗ рдирдХреНрд╢реЗ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдиреЛрдб рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рд╣реИред

рдЦреЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
1) рдирд┐рдХ рдЗрдирдкреБрдЯ рдлреЙрд░реНрдо (рдПрдХ рд╕рд╛рдл рд▓реИрдЯрд┐рди рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рдВрдЪ рд╣реИ)ред рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдХ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ
2) рдЦреЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг / рдЪрдпрдиред рдпрд╣рд╛рдВ рдЖрдк рдПрдХ рдирдпрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдпрд╛ рд╣реБрдЖ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдЦреЗрд▓ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЦреЗрд▓ рдХрд╛ рдирд╛рдо рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рднреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
3) рдЦреЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░реА рдХрд╛ рд░реВрдкред рдпрд╣рд╛рдВ рдЖрдк рдпрд╛ рддреЛ рддреБрд░рдВрдд рдЧреЗрдо рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рджреВрд╕рд░реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
4) рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдФрд░ рдЦреЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдПрдХ рдпреБрджреНрдз рдХреЗ рдореИрджрд╛рди рдФрд░ рдбреЗрдЯрд╛ рдХреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛

рдмрд╕, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдпрд╣реА рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдкреНрдд рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВред рдЦреЗрд▓ рдХреЗ рдпреБрджреНрдз рдХреЗ рдореИрджрд╛рди рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ:

рдЫрд╡рд┐

рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In165813/


All Articles