Web Skills
Web Skills is a visual overview of useful skills to learn as a web developer. Go to https://andreasbm.github.io/web-skills to check out the visual overview or scroll through this readme to get the overview as a list. If you like the project you are very welcome to become a stargazer
📖 Table of Contents
➤ Table of Contents
- ➤ FAQ
- ➤ Fundamentals
- HTML
- Syntax
- Forms
- SEO
- Svg
- Best Practices
- CSS
- Syntax
- Selectors
- Box Model
- Colors
- Calc
- Layout
- Transforms
- Responsive Design
- CSS Variables
- Best Practices
- Javascript
- Syntax
- DOM
- Events
- Objects
- Regex
- Template Literals
- Promises
- Web Animations
- Modules
- Intl
- Canvas
- Documentation
- Best Practices
- The Browser
- Standardization
- Browser Engines
- HTTP
- The Internet
- Polyfills
- Debugging
- ➤ Accessibility
- ➤ Web Components
- ➤ Progressive Webapps
- API's
- Storage
- Routing
- Service Workers
- Web App manifest
- Add to homescreen
- Pointer Events
- Loading Performance
- App shell
- Render-Blocking Resources
- Compression
- Performance metrics
- Lazy Loading
- Critical Request Chains
- Tree shaking
- Codesplitting
- PRPL Pattern
- Resource Prioritization
- Caching
- Rendering Performance
- Rendering
- Event loop
- RAIL Model
- Critical Rendering Path
- The Pixel Pipeline
- CSS Containment
- Web Workers
- Security
- HTTPS
- Browser Sandbox
- OWASP
- Content Security Policy
- Audits
- Performance budgets
- Lighthouse
- Chrome DevTools
- ➤ Build tools
- ➤ Frameworks & Libraries
- ➤ Testing
- ➤ Architecture & paradigms
- ➤ Team Collaboration
- ➤ Design & UX
- ➤ The Modern Web
- Streams
- Speech Synthesis
- Web Sockets
- Geolocation
- Device orientation & motion
- Fullscreen
- Variable Fonts
- HTTP/2
- Payment Request API
- Web Audio
- Observers
- Scrollsnapping
- Web Assembly
- Beacon
- Clipboard
- Share
- Performance API
- Gamepad API
- Speech Recognition
- Interaction Media Queries
- Browser Extensions
- Pointer Lock API
- Picture In Picture
- Proxies
- Houdini
- Project Fugu
- Web Authentication API
- Native File System
- Shape Detection
- Web Bluetooth
- Web USB
- Web XR
- Presentation
- Network Information API
- ➤ Algorithms & Data structures
- ➤ Databases & Servers
- ➤ Contributors
- ➤ License
➤ FAQ
What is Web Skills?
Web Skills is a visual overview of useful skills to learn as a web developer. It is useful for people who just started learning about web development and for people who have been in the field for years and want to learn new things. As a beginner, I would encourage you not to see this website as the definitive list of what you need to know but as an example of what you can learn and where you can start. The skills are arranged in chronological order based on what learning path I recommend you to take but feel free to jump around freely.
How did you choose the skills?
The skills are derived from a combination of 10 years of experience, a bachelor in software engineering and what I personally find to be the most useful to know on a day-to-day basis. Therefore, you'll notice that it's missing a lot of things. For example, I am not a PHP developer - because of this, PHP is not included. If you were a PHP developer, this overview would probably look a lot different.
How can I support you?
I am spending my spare time building Web Skills for free because I want to help people get into web development. My motivation comes from people finding Web Skills useful, so if you like the project feel free to support me in any way you like! For example, you are more than welcome to become a stargazer, share Web Skills with your friends and followers or create blog articles linking to Web Skills. If you want to, it will absolutely make my day if you support me with a cup of coffee! <3
How can I get involved?
You are welcome to get involved in any way you like. If you want to, you can go to the issues page and help me fix the spelling, fix issues or suggest some new features. Any involvement is highly appreciated!
How can I keep track of what skills I know?
If you scroll to the bottom of the page, you will find a button that says "Sign in with Google". If you click this button and sign in, you will be able to mark skills as completed.
I am overwhelmed! Help me!
I totally understand if you are a bit overwhelmed by the amount of skills on the page – but I can assure you that this overview includes much, much more than most people will ever need to know. My main goal is to provide a visual overview of web development and make people hungry for learning more. One of the things I absolute love about being a developer is learning new skills. I think it is amazing to be in a field where you can do what you do for a lifetime and still learn something new! People cannot be an expert in every skill on this page so try to find what excites you the most and become really good at that.
Why haven't you included XYZ Technology?
The skills are based on what I personally find to be the most useful on a day-to-day basis. If you think something really important is missing, you can always suggest it on the issues page.
What does the "experimental" banner mean?
When a skill is described as experimental, it means that the technology is immature and currently in the process of being added to the Web platform (or considered for addition). Think carefully before you start using experimental technology in any kind of production project. The definition used in Web Skills is based on the excellent definition used on MDN. You are very welcome to open an issue if you see a skill you believe should be marked as "experimental" or have the banner removed.
How can I get in contact with you?
Reach out to me on Twitter at @AndreasMehlsen or take a look at my website if you want to learn more about what other projects I'm working on.
➤ Fundamentals
HTML
Syntax
Learn the basics of HTML and get comfortable with it's syntax and main concepts.
Basic Tags
Get familiar with the basic HTML tags
-
MDN - HTML elements reference
-
Tutorialspoint - Basic HTML tags
-
Elated - First 10 HTML tags
-
W3Schools - HTML tags
Forms
Learn how to design efficient forms, validating them effectively and keeping the user informed along the way.
SEO
Learn how to make your content search-friendly.
Discoverable Content
Learn how to structure your HTML in a way that provides a rich experience when sharing it online.
-
Google Web - Social Discovery
-
Google Search - Search Features
-
Google Search - Structured Data
-
web.dev - Easily discoverable
Svg
Learn how to work with SVG files to make graphics look crisp across all screen resolutions.
Best Practices
Learn the best practices of writing HTML.
CSS
Syntax
Learn the basics of CSS and get comfortable with it's syntax and main concepts.
-
MDN - CSS Basics
-
W3Schools - CSS Tutorial
-
Supercharged - CSS Selectors
-
MDN - CSS first steps
-
MDN - CSS building blocks
-
MDN - CSS values and units
-
MDN - CSS Syntax
Selectors
Learn about CSS selectors and how to effeciently target DOM elements.
-
MDN - CSS selectors
-
MDN - All selectors
-
CSS Tricks - Child and Sibling Selectors
-
CSS Tricks - All Selectors
-
W3Schools - CSS Combinators
Specificity
Learn what specificity means and how to use it when writing CSS.
-
MDN - Specificity
-
MDN - Cascade and inheritance
-
dev.to - CSS Specificity
-
Specificity Calculator
-
W3Schools - CSS Specificity
Pseudo Selectors
Learn how to use pseudo selectors.
-
MDN - Pseudo-classes
-
CSS Tricks - Meet the Pseudo Class Selectors
-
When do the :hover, :focus, and :active pseudo-classes apply?
-
W3Schools - CSS Pseudo-elements
-
W3Schools - CSS Pseudo-classes
Box Model
Learn what the CSS box model means.
-
MDN - Introduction to the CSS basic box model
-
MDN - The box model
-
CSS Tricks - Inheriting box-sizing
Margin Collapsing
Learn about margin collapsing.
-
MDN - Mastering margin collapsing
-
Margin Collapse in CSS: What, Why, and How
-
CSS Tricks - What You Should Know About Collapsing Margins
-
What's the Deal with Collapsible Margins?
-
What’s the Deal with Margin Collapse?
Colors
Learn the different ways you can define colors in CSS.
Calc
Learn how to use the CSS calc function.
Layout
Learn the different layout types for web.
-
Chrome Dev - Basic Layout
-
W3Schools - CSS Website Layout
-
MDN - Document and website structure
-
MDN - CSS layout
Flex
Learn how to create layouts using flexbox.
Grid
Learn how to create layouts using CSS Grid.
Transforms
Learn the different ways to transform elements through CSS.
Animations
Learn how to animate elements through CSS using keyframes.
Responsive Design
Learn how to make your website responsive so it works across different screen sizes.
-
MDN - Responsive design
-
Responsive Web Design Fundamentals by Google
-
Google Dev - Responsive Design
-
Google Dev - UX Patterns
-
Google Dev - Responsive Content
-
Codelabs - Responsive Design
Media Queries
Learn how use media queries to build responsive layout.
-
CSS Tricks - CSS Media Queries & Using Available Space
-
MDN - Using media queries
-
MDN - Using Media Queries for Accessibility
Relative Units
Learn how to use relative units for properties such as font sizes and spacing.
-
MDN - Sizing items in CSS
-
MDN - CSS values and units
-
The CSS Workshop - Relative Units
-
CSS Tricks - Fun with Viewport Units
-
dev.to - 15 CSS Relative units
Images
Learn how to make images responsive, always showing the best possible version for the screen size.
CSS Variables
Learn how to define and use CSS variables.
-
MDN - Using CSS custom properties
-
Google Devs - CSS Variables: Why Should You Care?
-
dev.to - CSS Quickies: CSS Variables
-
CSS Variables explained with 5 examples
Best Practices
Learn the best practices of writing CSS.
Javascript
Syntax
Learn the basics of Javascript and get comfortable with it's syntax and main concepts.
Spread
Learn how the spread syntax can help you when working with arrays.
-
MDN - Spread syntax
-
Freecodecamp - An introduction to Spread syntax
-
Object rest and spread properties
Destructuring
Learn how destructuring can help you when working with objects.
-
MDN - Destructuring assignment
-
MDN - ES6 In Depth: Destructuring
-
javascript.info - Destructuring assignment
DOM
Learn how the HTML is represented as objects that comprise the structure and content of a document.
DOM Manipulation
Learn how to query HTML elements through Javascript and manipulate them.
Events
Learn how to dispatch and listen for events.
-
MDN - Introduction to events
-
MDN - Creating and triggering events
-
Event Bubbling and Event Capturing in JavaScript
-
Freecodecamp - A simplified explanation of event propagation
-
JavaScript Events Explained
-
MDN - addEventListener()
-
MDN - removeEventListener(
-
Event order
Objects
Learn how to create and use objects.
-
MDN - Introducing JavaScript objects
-
MDN - Working with objects
-
javascript.info - Objects
-
MDN - this
-
W3Schools - The JavaScript this Keyword
-
MDN - bind()
-
MDN - new operator
-
MDN - new.target
-
Data Structures: Objects and Arrays
Prototype
Learn how to extend objects and functions through its prototype.
Classes
Learn how to define and use classes. Get somewhat comfortable with some of the object oriented concepts such as inheritence and encapsulation.
Regex
Learn how to use regex to extract information from strings.
Template Literals
Learn how template literals and tagged templates and help you manipulate strings.
-
MDN - Template literals
-
MDN - ES6 In Depth: Template strings
-
Google Devs - Getting Literal With ES6 Template Strings
Promises
Learn how to use promises and what asynchronous code means.
-
Google Devs - JavaScript Promises: an Introduction
-
MDN - Promise
-
Master the JavaScript Interview: What is a Promise?
Callbacks
Learn how to use callbacks and why they are not always a good idea.
Async/await
Learn how to use the async and await keywords to make it easier to write asynchronous code.
Fetch
Learn how to use the fetch API to fetch data.
-
Google Devs - Introduction to fetch
-
Google Devs - Networking
-
Freecodecamp - Fetch practical guide
-
MDN - CORS
-
Alligator - Fetch API
-
Supercharged - Fetch
-
Codelabs - Fetch
Web Animations
Learn how to use web animations to animate elements in the DOM.
-
Google Devs - Animations
-
MDN - Using The Web Animations API
-
CSS Tricks - CSS Animations vs Web Animations API
Modules
Learn how to modularize your code into ES6 modules using the export and import keywords.
Intl
Learn how to localize your website using the Intl API.
Canvas
Learn how to paint graphics onto a canvas.
Documentation
Learn how to create good documentation and why it is important.
-
Getting Started with JSDoc
-
A beginner’s guide to writing documentation
-
Write Good Documentation
-
The power of jsDoc
-
Document your Javascript code with JSDoc
Best Practices
Learn the best practices of writing Javascript.
-
MDN - JavaScript guidelines
-
Airbnb - JavaScript Style Guide
-
Principles of Writing Consistent, Idiomatic JavaScript
-
5 JavaScript Style Guides
-
JavaScript Style Guide and Coding Conventions
The Browser
Standardization
Learn why web standards are important and how new specifications are standardised.
W3C
Learn what W3C are doing and how they are moving the web forward.
TC39
Learn what TC39 are doing and how they are moving the web forward.
-
The TC39 process for ECMAScript features
-
Github - TC39
-
Ecma International - Programme of work
-
Wikipedia - Ecma International
WHATWG
Learn what WHATWG are doing and how they are moving the web forward.
-
WHATWG - FAQ
-
WHATWG - Standards
-
MDN - WHATWG
-
W3C vs. WHATWG HTML5 Specs
-
WHATWG - HTML
-
Wikipedia - WHATWG
Specifications
Learn how to read specifications developed by the standards committees.
-
How to Read the ECMAScript Specification
-
How to Read W3C Specs
-
Learning CSS by reading specs
-
Understanding the CSS Specifications
Browser Engines
Learn what a browser engine is and get an overview of the browser landscape and market share.
-
Medium - Browser Engines
-
Wikipedia - Comparison
-
HTML5 Rocks - How Browsers Work
-
Demystifying Browsers
Webkit
Learn about the Webkit browser engine.
Blink
Learn about the Blink browser engine.
Gecko
Learn about the Gecko browser engine.
HTTP
Learn how data is distributed through the HTTP protocol.
The Internet
Learn the basics of how the internet works.
-
MDN - How does the Internet work?
-
Youtube - How the Internet Works in 5 Minutes
-
Explain That Stuff - Internet
-
Stanford - How Does the Internet Work?
-
How the Internet Works
Polyfills
Learn how it is possible to use polyfills to increase the browser support for your website.
-
MDN - Polyfill
-
Introduction To Polyfills & Their Usage
-
W3C - Polyfills and the evolution of the Web
-
Can I use
Debugging
Learn about the basics concepts of debugging.
-
Google Devs - Inspect and Edit Pages and Styles
-
MDN - Cross browser testing
-
5 things to remember for better debugging of your code
Developer console
Learn how to use the developer console to debug your code.
-
MDN - Console
-
Google Devs - Console API Reference
-
Google Devs - Get Started with Chrome DevTools
-
Google Devs - Console Utilities API Reference
-
MDN - Debugging CSS
-
MDN - Debugging HTML
-
javascript.info - Debugging in Chrome
-
14 JavaScript debugging tips
-
The definitive guide to debugging JavaScript
-
Youtube - Chrome DevTools 101
-
Chrome Devs - Quickly monitor events
-
Youtube - 14 Must Know Chrome Dev Tools Tricks
➤ Accessibility
The why
Learn what accessibility is and why it is important.
-
Google Devs - Accessibility Fundamentals
-
A11ycasts with Rob Dodson
-
Udacity - Chromevox Lite
-
Dev.to - Why Accessibility Matters
-
Abilitynet - Why Accessibility Matters
-
Udacity - Web Accessibility
-
Youtube - Headings, Landmarks, and Tabs
Screen Readers
Learn about assistive technology such as screen readers that reads sections of the page aloud based on the current focus.
-
The A11Y Project - Screen Reader Myths
-
The A11Y Project - NVDA Screen Reader
-
The A11Y Project - OS X Voiceover
-
Webaim - Screen Reader Survey
Accessibility tree
Learn about the accessibility tree and how assistive technology uses it.
ARIA
Learn how to use ARIA descriptions an labels to help assistive technology understanding your website.
-
Google Devs - ARIA Labels
-
Google Devs - Hiding and updating content
-
The A11Y Project - ARIA States
-
The A11Y Project - ARIA Properties
Accessible HTML
Learn how to write HTML in such as way that assistive technology better understands it.
-
Google Devs - Introduction to Semantics
-
MDN - Accessibility HTML
-
Webaim - Skip navigation
-
w3c - Headings
-
Freecodecamp - Semantic Elements
Alt text
Learn how to use the alt attribute to provide a useful text alternative to this image.
Accessible CSS
Learn how to write CSS in such as way that assistive technology better understands it.
Accessible forms
Learn how to build accessible forms that makes it usable to as many people as possible.
UI States
Learn how to make the state of each UI element clear.
Keyboard Accessibility
Learn how to make it easy for keyboard users to navigate your site.
Focus
Learn how to create a sensible tab order and how to make it easy for the users to locate the currently focused element.
-
web.dev - Control focus with tabindex
-
Google Devs - Focus
-
Google Devs - Dom Order Matters
-
Google Devs - Using Tabindex
-
Google Devs - Track Focus
-
MDN - :focus-visible
-
MDN - :focus-within
Accessible Colors
Learn how to select colors in such a way that users, including those with visual disabilities, can perceive the content on the page.
-
Webaim - Contrast and Color
-
The A11Y Project - Check contrast
-
The A11Y Project - What is color contrast?
-
Designing accessible color systems
Laws & Policies
Learn about the governmental policies related to web accessibility.
-
W3C - Laws & Policies
-
Webaim - Laws around the world
-
Webaim - Section 508
-
Webaim - WCAG 2 Checklist
-
A11Y.dev - Lawsuits
Audits
Learn how to conduct an accessibility review to improve the overall experience of using your site. Remember, good accessibility equals good UX!
-
web.dev - Accessibility audits
-
Google Devs - How to review
-
Webaim - Accessibility Tools
-
Google Devs - Accessibility Reference
-
Webaim - Wave
-
Google Chrome - NoCoffee Extension
-
Digital A11Y - Accessibility Plugins
-
Google Devs - Accessibility for teams
-
WCAG 2.0 checklists
-
How to Meet WCAG (Quick Reference)
➤ Web Components
Custom Elements
Learn how to create new HTML tags with Custom Elements.
-
Google Devs - Custom Elements
-
MDN - Using Custom Elements
-
CSS Tricks - Creating a Custom Element from Scratch
-
Javascript.info - Custom Elements
-
dev.to - An introduction to Custom Elements
-
itnext - Introduction to Web Components
-
web.dev - Web Components
HTML Templates
Learn how to use HTML templates to create flexible templates that can then be used to populate the Shadow DOM.
Shadow DOM
Learn how to encapsulate your CSS using Shadow DOM.
-
Google Devs - Shadow DOM
-
MDN - Using Shadow DOM
-
MDN - Shadow Tree
-
CSS Tricks - Encapsulating Style and Structure
-
itnext - Introduction to Web Components
-
Monica - Shadow DOM: fast and encapsulated styles
Shadow Parts
Learn how to style the inside of a shadow tree from outside of that Shadow Tree by using Shadow Parts.
-
Fergald - CSS Shadow ::part and ::theme
-
MDN - ::part
-
W3C - CSS Shadow Parts
-
Monica - ::part and ::theme, an explainer
-
Youtube - CSS Shadow Parts
-
Chrome Status - ::part and ::theme
Slots
Learn how to compose Custom Elements by using slots.
-
Alligator.io - Composing Custom Elements
-
Javascript.info - Slots Composition
-
MDN - HTML element
-
Component.kitchen - A history of the HTML slot element
Best practices
Get familiar with best practices when it comes to building Web Components.
-
Google Devs - Custom Element Best Practices
-
Webcomponents.org - Web Components Best Practices
-
mateusortiz - Web Components the Right Way
-
dev.to - Making Web Components for Different Contexts
Constructible Stylesheets
Learn how the Constructible Stylesheets proposal enables reusable styles when using shadow dom.
-
Google Devs - Constructable Stylesheets
-
W3C - Constructable Stylesheet Objects
-
dev.to - Why Would Anyone Use Constructible Stylesheets
-
Benjamin Farrel - Adopt a Design System
-
WICG - Constructable Stylesheet Objects
-
Chrome Status - Constructible Stylesheets
Form Participation
Learn how the Form Participation API proposal enables elements, other than built-in form control elements, to participate in form submission and validation.
-
Form Participation API Explained
-
Chrome Status - Form-associated custom elements
-
web-platform-tests - Form Participation
-
Google Devs - Form-associated custom elements
-
web.dev - More capable form controls
-
W3C - Creating a form-associated custom element
➤ Progressive Webapps
API's
Storage
Learn how to store data for your web app.
-
MDN - Storage
-
MDN - Web Storage API
-
MDN - Cookies
-
MDN - IndexedDB API
-
Google Devs - View And Edit Local Storage
-
MDN - Client-side storage
Routing
Learn what routing means in single page applications.
-
How Single-Page Applications Work
-
Static Apps - Routing URLs in Static Web Apps
-
Routing With Single Page Applications or Client Side Routing
History API
Learn how to use the history API to add single page applicaiton routing to your web app.
-
MDN - Working with the History API
-
MDN - History API
-
Single-page application routing in vanilla JavaScript
-
CSS Tricks - Using the HTML5 History API
-
The History API
-
Google Devs - History API: Scroll Restoration
-
MDN - The Document Base URL element
Service Workers
Learn how to register a service worker to provide a rich native-like experience.
-
Google Devs - Service Workers: an Introduction
-
Google Devs - The Service Worker Lifecycle
-
Google Devs - Service Worker Registration
-
MDN - Service Worker API
-
Google Devs - High-performance service worker loading
-
Codelabs - Scripting the service worker
-
Codelabs - Caching files with the service worker
-
Codelabs - Adding a Service Worker
-
Google Devs - Debugging Service Workers
-
Caching best practices
Offline first
Learn how to make your web app working offline with an offline first approach.
-
Google Devs - The Offline Cookbook
-
Udacity - Offline Web Applications
-
Offline First
-
Google Devs - Offline UX Considerations
-
Google Devs - Offline Storage for Progressive Web Apps
-
Codelabs - Offline quickstart
-
Codelabs - Adding a Service Worker and Offline into your Web App
-
Supercharged - Offline Links
-
MDN - Online and offline events
-
MDN - Making PWAs work offline
Push notifications
Learn how to add push notifications to your web app.
-
Google Devs - Adding Push Notifications to a Web App
-
MDN - How to make PWAs re-engageable
-
MDN - Notifications API
Web App manifest
Learn how to tell the browser about your web app and how it should behave when 'installed' by creating a web app manifest.
-
Google Devs - Web App Manifest
-
web.dev - Add a web app manifest
-
W3C - Web App Manifest
-
MDN - How to make PWAs installable
Add to homescreen
Learn how to make your web app installable.
Pointer Events
Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.
-
MDN - Pointer Events
-
Google Devs - Add Touch to Your Site
-
Google Devs - Pointing the Way Forward
-
Google Devs - Touch Action Options
-
W3C - Pointer Events
Loading Performance
App shell
Learn how to use an app shell to provide an instant and reliable experience to users on repeat visits
Render-Blocking Resources
Learn about render-blocking resources and why they are bad for the user-experience.
Compression
Learn how to minimize the overall download size by optimizing and compressing resources.
-
Google Devs - Optimizing Encoding and Transfer Size
-
Google Devs - Replace Animated GIFs with Video
-
Squoosh
-
Google Devs - Text Content
-
Google Devs - Optimize Images
-
web.dev - Reduce JavaScript execution time
Performance metrics
Learn why it is important to measure performance and which metrics you should prioritize.
-
Google Devs - User-centric Performance Metrics
-
Udacity - Website Performance Optimization
-
Udacity - Browser Rendering Optimization
Largest Contentful Paint
Learn about Largest Contentful Paint and how it impacts the overall performance.
-
web.dev - Largest Contentful Paint
-
web.dev - Lighthouse Largest Contentful Paint
-
Medium - New Performance Metric: What is Largest Contentful Paint?
Total Blocking Time
Learn about Total Blocking Time and how it impacts the overall performance.
Time to Interactive
Learn about Time to Interactive and how it impacts the overall performance.
Lazy Loading
Learn how to use lazy loading to lower the initial page payload and load time.
-
Google Devs - Lazy Loading Images and Video
-
Addy Osmani - Lazy Loading Images
-
web.dev - Native lazy-loading for the web
Dynamic Import
Learn how to use dynamic import to lazy load javascript.
-
V8 - Dynamic import()
-
JavaScript dynamic import() & export
-
MDN - Dynamic Import
-
TC39 - proposal-dynamic-import
Offscreen images
Learn why offscreen images increase the load time and how to avoid them by lazy loading images.
-
web.dev - Defer offscreen images
-
Google Devs - Properly Size Images
-
web.dev - Native lazy-loading for the web
-
Addy Osmani - Native image lazy-loading for the web!
Critical Request Chains
Learn about the critical request chains and how to find them in your web app.
Tree shaking
Learn how to use tree shaking to eliminate dead code.
Codesplitting
Learn about codesplitting an how dividing your code into multiple chunks makes your web app faster.
PRPL Pattern
Learn how to use the PRPL pattern to make web apps more performant.
-
Google Devs - The PRPL Pattern
-
Google Devs - JavaScript Start-up Optimization
-
Ben Schwarz - Real world performance
-
The Cost of Javascript
Resource Prioritization
Learn about resource prioritization and how to inform the browser about the importance of a resource.
-
Google Devs - Resource Prioritization
-
Eliminating Roundtrips with Preconnect
-
Addy Osmani - Preload, Prefetch And Priorities in Chrome
-
web.dev - Preconnect to required origins
-
Preload, prefetch and other tags
Caching
Learn about caching and how it can be uses to make web apps load faster.
Rendering Performance
Rendering
Learn about rendering, how a page is rendered and why it is important to keep your web app interactive and smooth running.
-
Google Devs - Constructing the Object Model
-
Google Devs - Rendering Performance
-
Google Devs - Render-tree Construction
-
Google Devs - Render Blocking CSS
Event loop
Learn about the event loop and how Javascript simulate like it’s running our commands in a multi-thread environment.
-
Youtube - Jake Archibald: In The Loop
-
Understanding JavaScript
-
JavaScript Event Loop Explained
-
Youtube - What the heck is the event loop anyway?
-
The JavaScript Event Loop
-
dev.to - JavaScript Visualized: Event Loop
Microtask
Learn about microtasks and the microtask queue.
-
Tasks, microtasks, queues and schedules
-
MDN - Using microtasks in JavaScript
-
javascript.info - Microtasks and macrotasks
-
javascript.info - Microtasks
Stack
Learn about the stack and how to investigate the staack trace when debugging.
-
Javascript Stack Trade - Using it to debug
-
MDN - console.trace()
-
V8 - Stack trace API
-
Confused about Stack and Heap?
Heap
Learn about the heap and how to investigate the heap snapshots when debugging.
-
Google Devs - Memory Problems
-
Google Devs - Memory Terminology
-
Google Devs - How to Record Heap Snapshots
-
Confused about Stack and Heap?
-
Google Devs - How to Use the Allocation Profiler Tool
RAIL Model
Learn how to use the RAIL model to ensure a good user experience.
-
Google Devs - RAIL
-
Google Devs - Why Performance Matters
-
Google Devs - Get Started With Analyzing
-
Google Devs - Animations and Performance
-
Google Devs - CSS Versus JavaScript Animations
-
Google Devs - Choosing the Right Easing
-
Google Devs - Animating Modal Views
-
MDN - CSS and JavaScript animation performance
-
MDN - Performance fundamentals
-
Youtube - Fast By Default
requestAnimationFrame
Learn how to use the requestAnimationFrame API to create butter-smooth animations.
requestIdleCallback
Learn how to use the requestIdleCallback to defer heavy tasks.
Critical Rendering Path
Learn about the critical rendering path and how to identify it.
-
Google Devs - Critical Rendering Path
-
MDN - Critical Rendering Path
-
Understanding the critical rendering path
The Pixel Pipeline
Learn about the five key points in the pixels-to-screen pipeline.
-
Google Devs - The pixel pipeline
-
Pixels are expensive
-
Google Devs - The Applied Science of Runtime Performance
-
CSS Triggers
Style calculations
Learn how to optimize your CSS to avoid heavy style calculations.
Transforms
Learn about transforms and how it is possible to avoid both layout and paint.
-
Google Devs - Use transform and opacity for animations
-
Achieving 60 FPS Animations with CSS3
-
HTML5 Rocks - High Performance Animations
Paint areas
Learn about paint areas and how it is possible to reduce them.
Layout Trashing
Learn about layout trashing and how to avoid it.
Layers
Learn about layers and how to promote an element to another layer.
-
Google Devs - Manage Layer Count
-
HTML5 Rocks - Accelerated Rendering in Chrome
-
Layers and how to force them
Debounce
Learn how to debounce computationally expensive code to avoid blocking the UI.
CSS Containment
Learn how to use CSS containment to improve the performance of your web app.
-
Google Devs - CSS Containment
-
W3C - CSS Containment Module
-
An introduction to CSS Containment
-
MDN - Contain
-
CSS Tricks - CSS containment
Web Workers
Learn how to use web workers to run a script operation in a background thread separate from the main execution thread.
Security
HTTPS
Learn about HTTPS and why a website should always be protected with HTTPS.
-
Google Devs - Why HTTPS Matters
-
Google Devs - Enabling HTTPS on Your Servers
-
Google Devs - Mixed Content
-
Youtube - Stories from the field
Browser Sandbox
Learn about the sandbox security mechanism and how it restricts the execution environment.
OWASP
Learn about the OWASP organization and how they help with web application security.
-
Wikipedia - OWASP
-
OWASP - About
-
OWASP - OWASP Top 10
-
OWASP - Cheatsheets
-
Youtube - OWASP
-
OWASP Top 10 Security Risks
-
Wikipedia - Web application security
Cross-Site Scripting
Learn about cross-site scripting and how it is possible mitigate these kind of attacks.
Clickjacking
Learn about clickjacking and how it is possible to mitigate these kind of attacks.
-
OWASP - Clickjacking
-
Wikipedia - Clickjacking
-
web.dev - Same-origin policy
-
OWASP - Clickjacking Cheatsheet
Content Security Policy
Learn about content security policy and how it can help to detect and mitigate certain types of attacks.
Audits
Performance budgets
Learn about performance budgets and how you can create one for your web app.
-
web.dev - Performance Budgets
-
Google Devs - Performance Budget
-
Addy Osmani - Start Performance Budgeting
Lighthouse
Learn about lighthouse and how it can be used to audit your web app.
Chrome DevTools
Learn about the Chrome DevTools and how it can be used to audit your web app.
-
Google Devs - Chrome DevTools
-
Google Devs - Inspect animations
-
Investigate animation performance with DevTools
➤ Build tools
Package Managers
Learn about package managers and how they make managing dependencies easier.
NPM
Learn about NPM and how it can be used to manage dependencies.
-
npmjs - About npm
-
npmjs - Getting started
-
Introduction to npm and basic npm commands
-
An Absolute Beginner's Guide to Using npm
Yarn
Learn about Yarn and how it can be used to manage dependencies.
Module Bundlers
Learn about module bundler and how they can help bundling your code.
-
dev.to - What is a module bundler?
-
Freecodecamp - Let’s learn how module bundlers work
-
JavaScript Bundlers, a Comparison
Rollup
Learn how you can use Rollup to bundle your code.
Webpack
Learn how you can use Webpack to bundle your code.
Parcel
Learn how you can use Parcel to bundle your code.
Snowpack
Learn how Snowpack can replace the traditional app bundler during development.
Linters and formatters
Learn how you can improve your code quality with linters and formatters.
Prettier
Learn how you can use Prettier to format your code.
-
Prettier - What is Prettier?
-
Let the computer do the formatting
-
Prettier - Playground
-
Prettier - Integrating with Linters
ESLint
Learn how you can use ESLint to lint your code.
-
Eslint - Getting Started
-
Streamline Code Reviews with ESLint + Prettier
-
Prettier vs ESLint: What’s The Difference?
Task Runners
Learn about task runners and how you can automate code execution.
NPM Scripts
Learn about NPM scripts and how you can run your own.
Transpilers
Learn what transpilers are and why we need them.
-
Scotch - Javascript Transpilers
-
What JavaScript Programmers Need to Know about Transpilers
-
Wikipedia - Source-to-source compiler
Babel
Learn about Babel and how you can use it to transpile your code.
-
Complete Babel 7 Guide for Beginners
-
Babel - What is Babel?
-
Babel - Usage Guide
-
A Beginner’s Guide to Babel
-
Moving to ES6 — Babel and Transpilers
Typescript
Learn how to use Typescript and how it can help making your code typesafe.
-
Typescript - Documentation
-
Typescript: Why should one use i?
-
Why TypeScript is the best way to write Front-end in 2019
CSS Pre-processors
Learn about CSS pre-processors and why we need them.
SASS
Learn about SASS and how you can use it to simplify your styles.
PostCSS
Learn about PostCSS and how you can use its ecosystem of plugins to extend your CSS build pipeline.
Node.js
Learn how to use Node.js.
➤ Frameworks & Libraries
lit-element
Learn how to use lit-element for creating fast, lightweight web components.
-
lit-element
-
Google Devs - Lightning-fast templates
-
Vaadin - Creating a LitElement project
-
dev.to - Web Components: from zero to hero, part three
Vue
Learn about Vue and how you can use it for building web apps.
React
Learn about React and how you can use it for building web apps.
Angular
Learn about Angular and how you can use it for building web apps.
Svelte
Learn about Svelte and how it can convert your component into highly efficient imperative code.
Stencil
Learn how Stencil can be used for generating small, fast web components.
-
Stencil
-
Alligator - Getting Started With Stencil
-
How to Build Reusable Web Components Using Stenciljs
➤ Testing
Testing Methodologies
Learn about various software testing methodologies and why it is important to test your code.
Unit Testing
Learn about unit testing and how it can be used to test individual units of code.
-
Unit Testing Tutorial
-
Wikipedia - Unit testing
-
What is Unit Testing?
-
The Arrange, Act and Assert (AAA) Pattern
Integration Testing
Learn about integration testing and how it can be used to test modules as a group.
System Testing
Learn about system testing and how it can be used to test the fully integrated software product.
Acceptance Testing
Learn about acceptance testing and how it can be used to test the software for acceptability
Smoke Testing
Learn about smoke testing and how it can be used to ensure that critical functionalities of the program are working fine.
Performance Testing
Learn about performance testing and how it can be used to determine the responsiveness and stability of a program.
Usability Testing
Learn about usability testing and how it can be used to determine if the system is easily usable for the end-user.
White Box Testing
Learn about white box testing and how it can be used to test the software's internal structure, design, and coding.
Black Box Testing
Learn about black box testing and how a test can be carried out without looking at the internal code.
Automated Testing
Learn about automated testing and when it should be applied.
Manual Testing
Learn about manual testing and when it should be applied.
Continuous integration
Learn about continuous integration and it can enable iterative software development.
-
dev.to - Continuous Integration Explained
-
Continuous Integration Tutorial
-
Wikipedia - Continuous integration
A/B Testing
Learn about A/B testing and how it can be used to optimize your web app.
-
dev.to - A/B testing: introduction
-
dev.to - When Not To A/B Test
-
A/B Testing
-
Wikipedia - A/B testing
Test Runners
Learn about test runners and how they can help running tests.
Karma
Learn about the Karma test runner.
Mocha
Learn about the Mocha testing framework.
Jasmine
Learn about the Jasmine testing frameworks.
Cypress
Learn how to use Cypress for end-to-end-testing.
Ava
Learn about the Ava test runner.
-
Github - Ava
-
A Fresh Take On JavaScript Testing
-
Freecodecamp - How you can test your Node.js applications
Best Practices
Learn about the best practices when it comes to testing.