360 likes | 533 Views
О себе. Александр Кучеренко В DataArt почти год Занимаюсь программированием 7+ лет За это время писал на : PHP, JavaScript, ActionScript3, C#, Java(Android), Objective-C. Node JS проблемы надежности, и пути их решения. (Мой личный опыт). Node JS +. Весело писать код.
E N D
О себе Александр Кучеренко • В DataArtпочти год • Занимаюсь программированием 7+ лет • За это время писал на:PHP, JavaScript, ActionScript3, C#, Java(Android), Objective-C
Node JS проблемы надежности, и пути их решения (Мой личный опыт)
Node JS + Весело писать код. Огромное количество готовых решений. Перспективно. Легко разворачивать, легко писать. Возможен прирост производительности. Модно.
Node JS - Не надежно. Утечки памяти. Слишком быстро развивается. Сложные вещи делать сложно.
Стоит ли связываться? Есть ли необходимость именно в Node JS? Нужно шарить код между бекендом и фронтендом? Возможно вашу задачу можно решить на Python, Ruby… PHP (если не стыдно) Node JS
Node JS Охота на Exceptions
Exceptions В JavaScript кодможет выполняться: Синхронно Асинхронно
Exceptions Синхронный
Exceptions Асинхронный
Exceptions Почему это важно?
Это работает: Exceptions
А это уже нет: Exceptions
Exceptions Можно вот так: Но это ловит ошибки всего процесса
Node JS Нам нужен асинхронный try…
Domain API Domain API
Best practice Не используйте throw в вашем коде!! В Node JS принято возвращать ошибки первым параметромв callback
Ошибка в асинхронном коде: Best practice
Ошибка в синхронном коде: Best practice
Best practice Если мы все будем делать правильно то наше приложение не будет падать? Не все так просто мой друг…
Best practice Ваше приложение после npm install
Best practice Если вы поймали эксепешен в Node JS, то лучше всего завершить процесс!
Best practice А что может плохого случится если яне буду завершать процесс? Ну к примеру у тебя кончилась память…
Node JS Process User Node JS Process User User
Node JS Process User Node JS Process User User
Cluster API Cluster API
Node JS Master Process Cluster API User Node JS Worker Process User Node JS Worker Process User User Node JS Worker Process User
Node JS Master Process Cluster API User Node JS Worker Process User Node JS Worker Process User User Node JS Worker Process User
isWorker? YES server.js Worker.js Worker.js Worker.js Domain Cluster API Domain Domain NO Master.js Start worker Domain Need more workers? NO YES server.listen() cluster.fork([env])
pm.createWorker() Cluster API Worker Master Process Manager worker = cluster.fork() worker.listen(readyEvent) worker.listen(taskDoneEvent) worker.listen(errorEvent) Workers pool Worker process.exit(1) Worker Worker pm.createWorker()
Workers pool pm.executeTask() Cluster API Worker Worker Worker Find worker Master Process Manager worker.send(textMessge) Worker do some work process.send(textMessge)
Ссылочки Node JS API: http://nodejs.org/api/domain.html http://nodejs.org/api/cluster.htm Мой Github: https://github.com/AlexTiTanium Email: kucherenko.email@gmail.com