Node.js Advanced Training ![Gitter](https://badges.gitter.im/Join Chat.svg)
- Node.js 4.2+
- Mongo 3.2+
- Redis 3.0+
- Variables
- Conditions
- Loops
- Functions
- Prototypes
- Asynchronous functions
- ...
- Block scoping
- let
- const
- Collections
- Map
- WeakMap
- Set
- WeakSet
- Classes
- Generators
- Promises
- Symbols
- Template strings
- Arrow Functions
- ...
JavaScript Style Guides (15m)
- Airbnb Coding Style
- Google JavaScript Style
- JavaScript "Standard" Style
- Crockfords’s Coding Standards
- Node.js Coding Style
- NPM "Funny" Coding Style
- Idiomatic JavaScript Coding Style
Philosophy (15m)
- Small core
- Small modules
- Small surface area
- Simplicity and pragmatism
Design Fundamentals (1h)
-
Conceptions
- Asynchronous
- Event Loop
- IO operations
- Non blocking
-
Components
- V8
- libuv
- ...
Getting started (15m)
- Versions of Node.js
- Installation Node.js
- CLI commands
- First scripts
Errors Examples (15m)
-
System errors
-
Standard JavaScript errors
- SyntaxError
- ReferenceError
- TypeError
-
Assertion Errors
-
Custom errors
- How it works?
- Supported formats
- Order of load and resolving algorithm
- The module cache
- NPM registry
Core modules (2h)
- Console
- Process
- Timers
- Errors
- Events
- Stream
- File System
- HTTP
- Crypto
- Child Processes
- ...
- Lodash
- Async / Neo-async
- WS
- MongoDB
- Redis
- Postgres
- ...
- File structure
- Deep with package.json
- Local packages
- Publish to NPM Registry
- Using in application
- ...
- Callbacks
- Error-first
- Async function in any case
- Recursive async functions
- ...
-
Creational Design Patterns
- Singleton
- Factory
- Abstract Factory
- ...
-
Structural Design Patterns
- Adapter
- Composite
- Decorator
- Facade
- Bridge
- Proxy
- ...
-
Behavioral Design Patterns
- Observer
- ...
-
The difficulties
- The callback hell
- Specific flows
-
Flows
- Sequential execution
- Parallel execution
- Limited parallel execution
-
Solutions
- Pure JS functions
- Async library
- Promises
- Generators
- Hardcoded dependency
- Dependency injection
- Service locator
- Dependency injection container
- Run long sync operations
- Run heavy CPU operations
- Connection to MongoDB
- Repository pattern
- ...
- What we test?
- Cases
- Priority
- How to do your testing most effective and fast?
- Classes
- Boundary
- Test levels
- Piramida
- Approaches
- TDD
- BDD
- Pairwise
- Mocks
- Tools and libraries
- Mocha
- Should
- Supertest
- Sinon
- Code Coverage
- Patterns and best practices in testing
- Continuous Integration
- Conception
- Travis CI
- Continuous Delivery
- Conception
-
Approaches
- README Driven Development
- Reference documentation
- Unibutique Language
- Changelog
- License
-
Formats
- Markdown
- RAML
- MVC
- DDD
- SOA
- Micro-services
- ...
- 12 factors app
- Configuration
- Logging
- Monitoring
- Profiling
- Connection to DBs and external services
- ...
- Express
- Serving static content by Node.js
- Using Nginx as reverse proxy and server of static content
- Express
- REST API design
- REST API testing
- Micro-services overview
- Communication between services
- HTTP and Message Broker for communication
- Testing of micro-services
-
Scaling
- What is scaling?
- Scaling Law of applications
- Methods of scaling applications
-
Performance
- What is performance?
- What should we measure?
- Tools for performance tests (Yandex.Tank, ab, siege)
- Analysis of the results
- Recommendations for scaling
-
Cache in applications
-
Top most common mistakes which fail performance
-
Profiling
- Memory
- CPU
- Blocking of EventLoop
-
Tools
- Best practices of logging
- Orchestration (Ansible)
- ...
- What is Docker?
- Create Docker image with your application
- Run your applications
- How to run own cloud in 1 click? (Docker Compose)
- ...
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.