æåã®æç¹ã§ã¢ã€ãã¢ãäžåçã«æããªãå Žåãããã¯çµ¶æçã§ãã
-ã¢ã«ããŒãã¢ã€ã³ã·ã¥ã¿ã€ã³
Habréã§ã®Node.jsãã£ã¹ã«ãã·ã§ã³ããæã人æ°ã®ãããããã¯ãåéããæåãªå°é家ã«ãããã«ã€ããŠè©±ãããã«äŸé ŒããŸãããéå¶å©ã®Node-hacker Matias MadsenãšNodeã®å€ãã®æ¬ãšã³ãŒã¹ã®èè ãAzat Mardanã§ãã
ãããã¯ã®æ£ç¢ºãªãªã¹ãã¯æ¬¡ã®ãšããã§ãã
- Node.jsã®ã¹ããªãŒã ãšèšç®ã䞊ååããã¡ãœããã
- Node.jsã®éåæ;
- Node.jsã§ã®ãããã°ãšãã®ã³ã°ã
- å®çšŒåããã©ãŒãã³ã¹ã®ç£èŠã®åé¡ã
ããŒããç£èŠããããã®ããŒã«ã
Azat Mardanã¯ã Technology Fellowã Capital Oneã®ãããŒãžã£ãŒã§ãããJavaScript / Node.jsã®å°é家ã§ããã Udemy and Node Universityã§ããã€ãã®ãªã³ã©ã€ã³ã³ãŒã¹ãæã¡ ã React Quicklyãå«ãåãããŒãã«é¢ãã14åã®èè ã§ãã ãïŒ2017幎ããã³ã°ïŒãã JavaScriptã®ãã«ã¹ã¿ã㯠ãïŒ2015幎ApressïŒãã å®çšçãªNode.js ãïŒ2014幎ã®ApressïŒãããã³2014幎ã®ã Pro Express.js ãã
空ãæéã«ã¯ã Azatã¯Webapplog.comã§ãã¯ãããžãŒã«ã€ããŠæžããäŒè°ã§è¬æŒã ããªãŒãã³ãœãŒã¹ã«è²¢ç®ããŠããŸãã Node.jsã®ãšãã¹ããŒãã«ãªãåã«ãAzatã¯æ å ±ã·ã¹ãã ã®ä¿®å£«å·ãååŸããŠåæ¥ããç±³åœé£éŠæ¿åºæ©é¢ãå°èŠæš¡ãªæ°èäŒæ¥ãããã³JavaãSQLãPHPãRubyãªã©ã®ããŸããŸãªãã¯ãããžãŒãåãã倧äŒæ¥ã§åããŠããŸããã
Azatã¯ããã¯ãããžãŒãšéèããããŠäººã
ãæè²ããåãäžããããã®æ°ããçŽ æŽãããæ¹æ³ã«æ
ç±ã泚ãã§ããŸãã
Mathias Buus Madsenã¯ããã³ããŒã¯ã®ã³ãã³ããŒã²ã³ã«æ ç¹ã眮ãéå¶å©ã®ããã«ãŒNode.jsã§ãã ãªãŒãã³ãœãŒã¹ã§ãã«ã¿ã€ã ã§åäœããDatãããžã§ã¯ãïŒ http://dat-data.com ïŒç§åŠè
ãããŒã¿ã»ãããå
±æã§ããããã«ãããªãŒãã³ããŒã«ãäœæããŸãã çŸåšãnpmã§400ãè¶
ããã¢ãžã¥ãŒã«ããµããŒãããŠããŸãããããèªäœãå°è±¡çã§ãã
HolyJS 2017ã¢ã¹ã¯ã¯äŒè°ã§ã©ã€ãã§äŒããããšãæãåºããŠãã ããã
ã¹ããŒãžäžã®ãµãŒããŒãµã€ãJavaScriptãé·ãéç»å ŽããŠãããããããã°ã©ãã³ã°ã³ãã¥ããã£ã¯ãããåãå ¥ãã人ãšãã以å€ã®äººã«åãããŠããŸãã...ããªããšç§ã¯ãç¹ã«ãµã€ããPHPã§ããæžãããŠãããšããèããªã©ãäœãæããã«ãªããšãããªããŒã«æ £ããŠããŸããïŒããŒã...ããŸãã¯Perlã§ããŸãã¯Pythonã§ïŒ..ããããNode.jsã«ã€ããŠã®æçš¿ã¯éèŠã§ã¯ãããŸããïŒãäœãæžãã¹ãããè°è«ããããšã¯éåžžã«èå³æ·±ãã§ãããããããã©ã®ããã«ãå¯äžã®é©åãªèšèª/ã¹ã¿ãã¯ãŸãšããªçµæãåŸãã ããã«ãNodeã¯éçºäžãã³ãã¥ããã£ã¯æ¡å€§äžãããŒãžã§ã³ã¯ç»å ŽäžããµãŒããŒãšã³ãžã³ã¯æ¹åãã€ã€ãããæããææ¥ïŒæšæ¥ã¯ç°è²ã®èæ¯ïŒãè¿ã¥ããŠããŸãïŒ å°é家ã®èšãããšãèŠãŠã¿ãŸããã...
ã¢ã¶ãã
ïŒ2017幎æ«ã®ç¶æ³ã«ã€ããŠã®è³ªåã«ãçãããŸããããã¯ãããŒã8ãnpm 5ãªã©ãæå³ããŸããä»æ¥ã¯ãããŒãã®åæã«æ¯ã¹ãŠäœããå€ãããŸããããå€å°ã¯å€ãã£ãŠããŸããïŒã
1. Node.jsã®ã¹ã¬ãããšèšç®ã䞊ååããããã®ã¡ãœãã
å€ãã®äººãç¥ã£ãŠããããã«ãNodeã¯ã·ã³ã°ã«ã¹ã¬ããã§ãã ããã¯Nodeã®é·æãšçæã®äž¡æ¹ã§ãã ã·ã¹ãã ãããå€ãã®I / Oãå®è¡ã§ããéåæãã³ããããã³ã°ã³ãŒãã®å®è£
ãç°¡åã§ããããã匷åã§ããããã¯éåžžãããå€ãã®ãã©ãã£ãã¯ãåŠçããããšãæå³ããŸãã ãããã¯ãããã³ãŒããæžãããšãã§ãããšããäºå®ã®ããã«åŒ±ãã è€æ°ã®ã¹ã¬ãããéå§ãããšåœ¹ç«ã¡ãŸãã ã³ã¢èšèªã«ã¯ã¯ã©ã¹ã¿ãŒã¢ãžã¥ãŒã«ããããŸãããã»ãšãã©ã®Nodeéçºè
ã¯pm2
䜿çšãpm2
ã éçºïŒ pm2-dev
ïŒããã³ã³ã³ããïŒ pm2-docker
ïŒããµããŒãããŸãã pm2ãéå§ããã«ã¯ãnpmã䜿çšããŠã€ã³ã¹ããŒã«ããããã¯ã°ã©ãŠã³ãã§å®è¡ããŸãã
npm i -g pm2 pm2 start server.js -i 0
pm2
ããã¹ãŠã®èŠä»¶ã«é©åãããããã«äœãã¬ãã«ã§äœæ¥ããå¿
èŠãããå Žåã¯ã cluster
ã䜿çšã§ãcluster
ã Nodeã®æ°ããããŒãžã§ã³ïŒçŸåšã®ããŒãžã§ã³8ïŒã§ã¯ã pm2
ããã«è² è·åæ£ãè¡ãããŠãpm2
ã ãã®çµæãè€æ°ã®ããã»ã¹ãåãããŒãã§ãªãã¹ã³ã§ããããã«ãªããçžäºã«ããŸãã¡ã€ã³ããã»ã¹ãšå¯Ÿè©±ã§ããããã«ãªããŸãã cluster
fork()
ã䜿çšããå¿
èŠãããcluster
ã ãããè¯ãäŸã§ãïŒ
const cluster = require('cluster') const numCPUs = require('os').cpus().length if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork() } } else if (cluster.isWorker) { // your server code })
æåŸã«ã fork()
ã«å ããŠããã»ã¹ãæåã§äœæããæ¹æ³ã2ã€ããspawn()
ãšexec()
ã§ãã 1ã€ç®ã¯ãé·æéã®ããã»ã¹ãã¹ããªãŒãã³ã°ã倧éã®ããŒã¿çšã§ããã2ã€ç®ã¯å°ããªããŒã¿åºåã«é©ããŠããŸãã
2. Node.jsã§ã®éåæããã°ã©ãã³ã°
ã¯ããããŒãã«ã¯éåæ/åŸ æ©æ©èœããããŸãã ç§ã¯ãŸã ã³ãŒã«ããã¯ã奜ãã§ãããéåæé¢æ°ã¯çŽ æŽãããã§ãã åå¿è ã§ãç°¡åã«ç解ã§ããŸãã éåæé¢æ°ã³ãŒãã¯ãpromiseã³ãŒããããçãã§ãã 2ã€ã®éåæã®ãã¹ããããããŒã¿ããŒã¹åŒã³åºãã䜿çšãããã®Mochaãã¹ããã芧ãã ããã 圌ã¯èãäœããŠãããã§ãã
describe('#find()', () => { it('responds with matching records', async () => { const users = await db.users.find({ type: 'User' }) expect(users).to.have.length(3) for (let user of users) { const comments = await db.comments.find({ user: user.id }) expect(comments).to.be.ok } }) })
ãšããã§ãç¢å°ä»ãã®æ§æã ãã§ãªããæ§æfunction() {}
䜿çšã§ããŸãã
const async function() { const {response: res} = await axios. get('https://webapplog.com/api/cupcakes') }
éåææ©èœã®ãã1ã€ã®ããŒãã¹ã¯ãpromiseãšã®äºææ§ãããããšã§ãã ã¯ããããã§ãã ããããäžç·ã«äœ¿çšããŠãããšãã°ãéåæé¢æ°ãäœæããŠããthenã䜿çšããããpromiseïŒããšãã°ãç§ã®äŸã®util.promisify()
åºã¥ãã©ã€ãã©ãªããŸãã¯util.promisify()
ïŒæ°ããNode 8ã¡ãœããïŒïŒã«ãã£ãŠäœæãããé¢æ°ã䜿çšã§ããŸãã
3. Node.jsã§ã®ãããã°
Nodeã®ãããã¬ãŒã¯ã以åã®ãã®ã«æ¯ã¹ãŠå€§å¹
ã«æ¹åãããŸããã Storifyã§åããŠãããšãã®ããšãèŠããŠããŸãïŒäŒç€Ÿã¯æåã®NodeãŠãŒã¶ãŒã®1人ã§ãïŒãã³ãŒãå
šäœã«console.log
ãæçš¿ããŸããã çŸåšãVS Codeã§ãããã°ã§ããŸãã ããã¯çŽ æŽããããšãã£ã¿ãŒã§ãã æ¯æ¥äœ¿ã£ãŠããŸãã
次ã«ã Node InspectorããããŸããããã¯ãæ¬è³ªçã«Node.jsããã°ã©ã çšã®Chrome DevToolsã§ãã Node v8ã¯Nodeã«çµ±åãããGoogle Chrome V8 Inspectorãå°å ¥ããŸãããGUIãããã¬ãŒã䜿ãå§ããããã«å¿ èŠãªããšã¯ã以äžãæžãããšã ãã§ãïŒ
node --inspect index.js
次ã«Â§chrome://inspect/#devices
ãChromeãã©ãŠã¶ã§éããŸãã ããŒãžã§ã³7ã§ã¯ãURLãã³ããŒããŠChromeãã©ãŠã¶ãŒã§éãå¿
èŠããããŸãã URLã®å
é ã«chrome-devtools://
è¡ãå«ãŸããŸãã Nodeã¹ã¯ãªããã¯ãDevToolsããã®ãããã¬ãŒãããã°ã©ã ã«æ¥ç¶ããã®ã«ååãªæéåäœããå¿
èŠãããããšãå¿ããªãã§ãã ãããããããªããšããããã¬ãŒãŸãã¯ã³ãŒãã«ãã¬ãŒã¯ãã€ã³ããèšå®ããå¿
èŠããããŸãã
Nodeã¯Chrome V8äžã«æ§ç¯ãããŠããããããã°ã«Chrome DevToolsã䜿çšããŸããããã¯ãåªããGUIãåããŠããã ãã§ãªããå°æ¥ã®ä¿¡é Œã§ããæ©èœã確ä¿ããããã§ããããŸãã
4. Node.jsã®ããã©ãŒãã³ã¹ã®åé¡
ã»ãšãã©ã®ããŒã補é ã®åé¡ã¯ãã¡ã¢ãªãªãŒã¯ããããã¯ãŒã¯ããŸãã¯I / Oã®åé¡ã§ãã ã¹ãã¬ã¹ãã¹ãã¯ãå®éã®è² è·æ¡ä»¶äžã§ã¢ããªã±ãŒã·ã§ã³ãšã·ã¹ãã ãã©ã®ããã«æ©èœããããç解ããã®ã«åœ¹ç«ã¡ãŸãã è¯ãããŒã«ã¯å€§ç ²ã§ãã äžéšã®ã¡ã¢ãªãªãŒã¯ã®åé¡ã¯ãã³ãŒãããããã«å€æŽããTurbofanãšåŒã°ããæ°ããJIT JavaScriptã³ã³ãã€ã©ã«ä»å±ããNodeã®ææ°ããŒãžã§ã³ã䜿çšããããšã§è§£æ±ºãŸãã¯è»œæžã§ããŸãã ãã®åªããGET READYæçš¿ãèªãã§ãã ããïŒæé©åã«é¢ããæ°ããV8ã®ç»å ŽãNODE.JSã®ããã©ãŒãã³ã¹ã®å€æŽ ãåé¿ãŸãã¯æ¡çšãã¹ããã¯ããã¯ãšã³ãŒãã
5.åªããNode.jsç£èŠããŒã«
éå§ããã«ã¯ãNodeã³ãŒããæºåããå¿ èŠããããŸãã 2018幎ã«ã¯ãããã¯ã³ã³ãããã¯ã©ãŠããããã³èªååã¡ãœããã®äœ¿çšãæå³ããŸãã 詳现ã«ã€ããŠã¯ãå®çšŒåã³ãŒã¹ã®ããŒããã芧ãã ããã
ããŒãã¯ãåçŽæ¹åïŒãã€ã³ã1ãåç §ïŒãšæ°Žå¹³æ¹åã®äž¡æ¹ã«ã¹ã±ãŒãªã³ã°ããå¿ èŠããããŸãã ãã¡ãããããã¯ãã°ã®ç£èŠãšåéãå°é£ã«ããŸãã ã¡ããªãã¯ãšãã°ãåéããå¿ èŠããããŸãã
ç°¡åãªããã·ã¥ããŒããèªåã§äœæãããšãåã ã®ããŒããµãŒããŒããã³ããã»ã¹ã圢æããçµ±èšãšã¡ããªãã¯ã衚瀺ãããŸã...ãŸãã¯ãCapital Oneã§äœæãããHygieiaãªã©ã®ãªãŒãã³ãœãŒã¹ããã·ã¥ããŒãã䜿çšããŸãïŒ å¿µã®ããïŒCapital Oneã§äœæ¥ããŠããŸãïŒã
åªãããã®ã³ã°ããŒã«ã¯ãŠã£ã³ã¹ãã³ãšãã³ã€ã³ã§ãã LogglyãSplunkãPapertailãªã©ããµãŒãããŒãã£ã®SaaSãªã©ãä»»æã®å Žæã«ãã°ãéä¿¡ã§ããŸãïŒStorifyã§äœ¿çšããŸããïŒã ãã¹ãŠã®ããŒã¿ãææããŠããããå Žåã¯ãKibanaã§Elastic Searchããããã€ããããã«ãã°ãéä¿¡ããŸãã ããã¯ãã»ãã¥ãªãã£ãšãã©ã€ãã·ãŒã®çç±ã§ãµãŒãããŒãã£ã®ãµãŒãã¹ã䜿çšã§ããªãã£ããšãã«DocuSignã§è¡ã£ãããšãšãŸã£ããåãã§ãã WinstonãElasticãKibanaãããŒã¹ã«ããç¬èªã®ãœãªã¥ãŒã·ã§ã³ãéçºããŸããã
ç¹ã«æ¬çªç°å¢ã§ã®ã¢ãã¿ãªã³ã°çšã«èæ ®ãã¹ãããã€ãã®ããŒã«ãšãµãŒãã¹ïŒãã¹ãŠãç¡æã§ã¯ãããŸããïŒïŒãããã¯N | Solid ã NewRelicããã³AWS CloudWatchã§ãã
å®äº
Nodeã¯ç°åžžãªããŒã¹ã§æé·ããŠããŸãã æ°ããããŒãžã§ã³ããªããŠããããã¯ãã§ã«é©ãã¹ãæè¡ã§ãã é«éã§ä¿¡é Œæ§ãé«ããæãéèŠãªããšã¯ãéçºè ã«æ°æ¥œãªã³ãŒãã£ã³ã°ã®åã³ããããããŸãã Nodeã¹ã¿ãã¯ã«ç§»åãããšãå€ãã®å¹žããªJavaããã³CïŒéçºè ãèŠã€ãããŸããã
ããã£ã¢ã¹
ããã€ãã®ããšã䞊è¡ããŠè¡ããŸã
Node.jsã¯èšèšäžã·ã³ã°ã«ã¹ã¬ããã§ãã ããã¯å®éã«ã¯äŸ¿å©ãªæ©èœã§ããããã¯ãããã°ã©ã ããã€ã§ãäžæãããå¯èœæ§ã®ããJavaã®ãããªèšèªããããã¡ã¢ãªãã競åç¶æ ãªã©ãç°¡åã«åŠçã§ããããšãæå³ããããã§ãã
ãã¹ãŠã®å ¥å/åºåæäœãéåæã«å®è¡ããããããããã°ã©ã èªäœã®å®è¡ããããã¯ããªããããããèªäœãã·ã³ã°ã«ã¹ã¬ããã«ããããšãã§ããŸãã ããã«ãNodeã®JavaScriptã«ã¯ããã°ã©ã ã®å®è¡ã¹ã¬ããã1ã€ãããŸãããããèªäœãããã«ããã€ãã®ã¹ã¬ããã䜿çšããŠãããã¯ã°ã©ãŠã³ãI / Oã¿ã¹ã¯ããã®ä»ã®ãŠãŒãã£ãªãã£ã¿ã¹ã¯ã®æ¯æŽã«å¯ŸåŠããŸãã
ãã®ã¢ãããŒãã«ã¯1ã€ã®æ¬ ç¹ãããããŸããã å Žåã«ãã£ãŠã¯ãããã»ããµã®åŠçèœåã®ã¿ãæ¶è²»ããã³ãŒããå®è¡ããå¿ èŠããããŸãã ãã®æç¹ã§ã¯I / Oã¯å®è¡ãããªããããNode.jsããã°ã©ã ã¯ãã®ã³ãŒããå®äºãããŸã§ãããã¯ãããŸãã ããã»ããµãéäžçã«äœ¿çšããæäœïŒæå·åãªã©ïŒã«ã€ããŠè©±ããŠããå Žåãæäœãå®äºãããŸã§Nodeããã°ã©ã ã¯äœãå®è¡ã§ããªããããããã¯ãã€ãã¹ã®åœ±é¿ãäžããå¯èœæ§ããããŸã-ãããé¿ããããšãã§ããŸãã
ãããå®çŸããã«ã¯ããã€ãã®æ¹æ³ããããŸãã ãããã®ã¢ãããŒãã®1ã€ïŒç§ããã䜿çšããŸãïŒã¯ããã€ãã£ãã¢ãžã¥ãŒã«ãäœæãïŒååãšããŠããã¹ãŠã®ããã»ããµãéäžçã«äœ¿çšããæäœã«ã¯äŸç¶ãšããŠäœããã®ãã€ãã£ãã¢ãžã¥ãŒã«ã®äœ¿çšãå¿ èŠã§ãïŒãæ¬åœã«çŽ æŽãããã¯ãŒã«ãŒAPIã䜿çšããŸãã ãã®APIã䜿çšãããšãïŒéå»-åæïŒæäœã§ã³ãŒã«ããã¯ã䜿çšããããããã¹ãè¿ãããã§ããC ++ãšWorker APIã䜿çšããŠäœæããã¿ã¹ã¯ã¯å¥ã®ã·ã¹ãã å®è¡ã¹ã¬ããã§åäœããŸãã
å¥ã®ã¢ãããŒãã¯ãããã°ã©ã ãå°ããªéšåã«åå²ããè€æ°ã®ããã»ã¹ãšããŠåæã«å®è¡ããããšã§ãã åºæ¬çã«ãããã¯ããã°ã©ã ãå°ããªåæ£ã·ã¹ãã ã«åèšèšããããšãæå³ããŸãã ãã®ããã«ããŠãå€ãã®ããã»ããµã³ã¢ãå®å šã«ãã€ãã£ããªæ¹æ³ã§äœ¿çšã§ããŸãã
ãããã«ããŠããããã°ã©ã ã®Nodeã³ãŒãã®äžŠåå®è¡ã®å®è£ ãéå§ãããšãã¯ããã«å€ãã®éåæã³ãŒããåŸãããŸãã Nodeã§éåæã³ãŒãã管çããããšã¯ãæåã¯éåžžã«å°é£ã«æããŸãããçµéšãå¢ããã«ã€ããŠç解ãããããªããŸãã Nodeã®çŸåšã®ããŒãžã§ã³ã§ã¯ãasync / awaitãªã©ã®æ©èœã䜿çšããŠãpromiseã䜿çšããå Žåãéåæã³ãŒããåæçã«èŠããããšãã§ããŸãã ããã«èµ·å ããè€éãã®1ã€ã¯ãtry-catchæ§æã®äœ¿çšãäœåãªããããŠããããã次ã®ãããªæ§æãç解ããå¿ èŠãããããšã§ãã JavaScriptã®try-catchã¯ãä»ã®èšèªã§ã¯ã³ã³ãã€ã«ãšã©ãŒïŒããšãã°ãã³ãŒãã®ã¿ã€ããã¹ãªã©ïŒã«ã€ãªããç¶æ³ãã€ã³ã¿ãŒã»ãããããããããæ·±å»ãªãã°ãçºçããŸãã ã€ãŸãããšã©ãŒåŠçã³ãŒãã§ããã°ã©ã ã®å®è¡äžã«æ§æãšã©ãŒãšãšã©ãŒã«é¢ããã¡ãã»ãŒãžãåãåãããããã°ã®æ€çŽ¢ã¯ããè€éã«ãªããŸãã
ãã®çµæãç§ã¯ã»ãšãã©ã®å Žåãéåæããã°ã©ãã³ã°ã«ã³ãŒã«ããã¯ã䜿çšããŸãããŸãã after-allã¢ãžã¥ãŒã«ãªã©ã®å€æ°ã®è£å©ã©ã€ãã©ãªãšçµã¿åãããŸãã
ãããã°ãšç£èŠ
ç§ãæ°ã«å
¥ã£ãŠããNodeã®æ©èœã®1ã€ã¯ãã¢ããªã±ãŒã·ã§ã³ã®åäœããããã°ããã³ç£èŠããã®ã«åœ¹ç«ã€åªããããŒã«ã®æ°ã§ãïŒãããŠãå€ãã®ããŒã«ãèªåã§äœæããŸããïŒã Nodeã䜿çšããå ŽåãV8ã§å®è¡ãããJavaScriptã³ãŒãã䜿çšããŸãã ãŸããV8ã«ã¯è±å¯ãªAPIæ©èœããããV8ããåªããããã©ãŒãã³ã¹ãåŒãåºãããšãã§ããŸãã ããã«ãããäžå¿
èŠãªæšæž¬ãè¡ãããšãªããã¢ããªã±ãŒã·ã§ã³ã®åé¡ã®æ¬åœã®åå ïŒãããã«ããã¯ãïŒã远跡ã§ããŸãã
ç¹ã«David Mark ClementãšåœŒã®å人ã«ãã£ãŠæžããã0xã¢ãžã¥ãŒã«ïŒ https://github.com/davidmarkclements/0x ïŒã倧奜ãã§ãã ãã®ã¢ãžã¥ãŒã«ã¯ããã³ãããŒã¯ãå®éã®ãã¬ãŒã ã°ã©ãã«ç°¡åã«å€æããŸãã ããŒãã®ä»£ããã«0xã§ãã³ãããŒã¯ãå®è¡ããŸãïŒããã«ããã¬ãŒã ã°ã©ããäœæããŠããããã©ãŠã¶ã§éããŸãïŒã
0x -o my-benchmark.js
ãã®ã°ã©ãã¯ãã©ã®JavaScripté¢æ°ãããã°ã©ã ã®å®è¡ã«ããå€ãã®ããã»ããµãŒæéã䜿çšããããæ確ã«ç€ºããŸãã ãã®ã¢ãããŒãã¯ãæé©åã§æã泚æãæãã¹ããã®ã®èŠèŠçãªã¢ã€ãã¢ãæäŸããŸãã
opsã¿ã¹ã¯ã«ãã䜿çšããå¥ã®ã¢ãžã¥ãŒã«ã¯ã respawnãšåŒã°ããç¬èªã®ã¢ãžã¥ãŒã«ã§ãã ããã»ã¹ãéå§ããããã»ã¹ãã¯ã©ãã·ã¥ããå Žåã«åèµ·åããã®ã«åœ¹ç«ã¡ãŸãã
åã¹ããŒã³ããããã« ã lil-pidsãšåŒã°ããããããcli-wrapperããããŸãã lil-pidsã«ã¯ã€ã³ã¿ãŒãã§ãŒã¹ããªããã/ servicesãšããååã®ãã¡ã€ã«ã®ã¿ãå¿ èŠã§ããã·ã¹ãã ã§å®è¡ããããã¹ãŠã®ã³ãã³ããæå®ããã ãã§ãlil-pidsã¯ããããèŠãŠãrespawnã¢ãžã¥ãŒã«ã§éæããããšããŸãããã¹ãŠãå®è¡ãããããã«ããŸãã
æåŸã«ãå®çšŒåç°å¢ã§ã³ãŒãã䜿çšããéã«Nodeã§è§£æ±ºããªããã°ãªããªãå¥ã®åé¡ã¯ãã©ã³ãã ã¡ã¢ãªãªãŒã¯ã§ãã JavaScriptã«ã¯ç¬èªã®ã¬ããŒãžã³ã¬ã¯ã¿ãŒããããŸãããå€ãã®å Žåããªã¹ãã«ã¢ã€ãã ãè¿œå ããããããããã¢ã€ãã ãåé€ããã®ãå¿ããããããªã©ããŠãã¡ã¢ãªãªãŒã¯ãèš±å¯ããŸãã ã¡ã¢ãªãªãŒã¯ãèš±å¯ããªãããšããããŸãããéåžžã«å€ãã®ã¡ã¢ãªãæ¶è²»ããã¢ã«ãŽãªãºã ãå®è£ ãããããããæç¹ã§ã·ã¹ãã ãããã°ã©ã ããã°ã©ã ã匷å¶çã«åæ¢ããŸãã ã¡ã¢ãªãªãŒã¯ããããã©ãããå€æããããã«ãç§ã¯ããmemory-usageãšåŒã°ããThomas Watsonã¢ãžã¥ãŒã«ã䜿çšããŸã ã 圌ãè¡ãå¯äžã®ããšã¯ãããã°ã©ã ãæéãšãšãã«äœ¿çšããã¡ã¢ãªéã«é¢ããããŒã¿ã®ç¡éã®ã¹ããªãŒã ãæäŸããããšã§ãã ãã®å€ã®ã°ã©ããæããšãã¡ã¢ãªãªãŒã¯ããã€å§ãŸãããããããŸãã
æåãªããšããã«é¢ä¿ãªãããäžåºŠèŠãããããè¯ãéžæè¢ããããŸã-ç§ãã¡ã®ã±ãŒã¹ã§ã¯ããã¬ããŒããèŠãŠèããŠãã質åãããå芳ããŠè©±ããŸããã HolyJS 2017ã¢ã¹ã¯ã¯äŒè°ã«ãæåŸ ããŸãïŒ