๐ŸŒ Frontend Web Development ยท subject

Frontend Web Development Tooling, Performance & Deployment Syllabus

The Tooling, Performance & Deployment syllabus for Frontend Web Development in full: 6 chapters and 24 topics, every one listed below, plus 73 Tooling, Performance & Deployment flashcards with answers.

6Chapters
24Topics
73Flashcards

Tooling, Performance & Deployment syllabus: all 6 chapters

Expand any chapter to see its topics and sub-topics.

  1. Version Control with Git

    4 topics
    • Git Basics & Commits
    • Branching & Merging
    • Remote Repositories & GitHub
    • Resolving Merge Conflicts
  2. Package Managers & Build Tools

    4 topics
    • npm, yarn & pnpm
    • Modules & Bundling Concepts
    • Vite & Webpack
    • Transpilation (Babel) & ESBuild
  3. Code Quality & Testing

    4 topics
    • Linting & Formatting (ESLint, Prettier)
    • Unit Testing (Jest, Vitest)
    • Component Testing (React Testing Library)
    • End-to-End Testing (Playwright, Cypress)
  4. Web Performance

    4 topics
    • Core Web Vitals (LCP, INP, CLS)
    • Asset Optimization & Lazy Loading
    • Caching & CDNs
    • Lighthouse & DevTools Profiling
  5. Accessibility & Standards

    4 topics
    • WCAG Principles
    • ARIA Roles & Attributes
    • Keyboard Navigation & Focus Management
    • Screen Reader Testing
  6. Deployment & Hosting

    4 topics
    • Static Hosting (Netlify, Vercel, GitHub Pages)
    • CI/CD Pipelines
    • Environment Variables & Secrets
    • Domains, HTTPS & Performance Monitoring

Frontend Web Development Tooling, Performance & Deployment flashcards โ€” 73 questions with answers

  1. In Git, what is the difference between the working directory, the staging area (index), and the repository?

    The working directory holds your actual files; the staging area (index) holds a snapshot of changes queued for the next commit (added via `git add`); the repository stores committed snapshots permanently (created via `git commit`).

  2. What does `git commit -m "message"` do, and what makes each commit unique?

    It records the staged snapshot as a new commit with a message. Each commit is uniquely identified by a SHA-1 (or SHA-256) hash computed from its content, tree, parent(s), author, and timestamp.

  3. What is the difference between `git add .` and `git commit -a`?

    `git add .` stages new and modified (and, with newer Git, deleted) files in the current directory into the index. `git commit -a` automatically stages modifications and deletions of already-tracked files and commits them, but it does NOT stage new (untracked) files.

  4. What is HEAD in Git?

    HEAD is a pointer to the current commit/branch you have checked out โ€” normally it points to the tip of the current branch. A 'detached HEAD' means it points directly to a commit rather than a branch.

  5. What does `git status` show versus `git log`?

    `git status` shows the current state of the working directory and staging area (tracked/untracked, staged/unstaged changes, current branch). `git log` shows the commit history with hashes, authors, dates, and messages.

  6. In Git, what is a branch, technically?

    A branch is a lightweight, movable pointer (reference) to a specific commit. Creating a branch just creates a new pointer; the branch pointer advances automatically as you commit.

  7. What is the difference between `git merge` and `git rebase`?

    `git merge` joins two branches by creating a merge commit that preserves the original history. `git rebase` replays your branch's commits on top of another branch, producing a linear history but rewriting commit hashes.

  8. What is a fast-forward merge in Git?

    When the target branch has not diverged (the current branch's tip is a direct ancestor of the branch being merged), Git simply moves the branch pointer forward to the new commit with no merge commit created.

  9. What is the difference between `git switch`/`git checkout` and `git branch`?

    `git branch <name>` creates (or lists/deletes) a branch pointer but does not move HEAD. `git switch <name>` (or `git checkout <name>`) moves HEAD to that branch, changing your working directory to match it. `git switch -c <name>` creates and switches in one step.

  10. What does a three-way merge use to combine branches?

    It uses three snapshots: the two branch tips being merged and their common ancestor (merge base). Git compares changes on each side relative to the base to produce the merged result.

  11. What is the difference between `git fetch` and `git pull`?

    `git fetch` downloads new commits and refs from a remote but does not change your working branch. `git pull` runs `git fetch` and then merges (or rebases with `--rebase`) the fetched changes into your current branch.

  12. What is `origin` in Git?

    `origin` is the default conventional name for the remote repository you cloned from. It is an alias for the remote's URL, used in commands like `git push origin main`.

  13. What does `git push -u origin main` accomplish?

    It pushes the local `main` branch to `origin` and, with `-u` (`--set-upstream`), sets `origin/main` as the tracking branch so future `git push`/`git pull` can be run without arguments.

  14. On GitHub, what is the difference between a fork and a clone?

    A fork is a server-side copy of a repository under your own GitHub account, used to propose changes to projects you don't own. A clone is a local copy of a repository on your machine created with `git clone`.

  15. What is a pull request (PR) on GitHub?

    A pull request is a proposal to merge changes from one branch (or fork) into another, providing a place for code review, discussion, CI checks, and approval before the changes are merged.

  16. When does a Git merge conflict occur?

    A conflict occurs when two branches modify the same lines of a file (or one edits a file the other deletes) in incompatible ways, so Git cannot automatically decide which change to keep.

  17. What do the conflict markers `<<<<<<<`, `=======`, and `>>>>>>>` indicate?

    `<<<<<<< HEAD` marks the start of your current branch's version, `=======` separates the two versions, and `>>>>>>>` marks the end with the incoming branch's version. You edit to resolve, then remove the markers.

  18. What are the steps to resolve a merge conflict in Git?

    1) Run the merge and see conflicting files via `git status`. 2) Open each file and edit to keep the desired content, removing conflict markers. 3) `git add` the resolved files. 4) `git commit` (or `git merge --continue`) to finalize.

  19. What is the purpose of a package.json file in a Node.js project?

    It is the manifest describing the project: name, version, scripts, and dependencies (`dependencies`, `devDependencies`, `peerDependencies`). Package managers use it to install and manage packages.

  20. Compare npm, yarn, and pnpm in how they store dependencies.

    npm and (classic) yarn install a flattened copy of packages into each project's `node_modules`. pnpm uses a global content-addressable store and hard links/symlinks packages into a non-flat `node_modules`, saving disk space and enforcing stricter dependency resolution.

Show the other 53 Tooling, Performance & Deployment flashcards
  1. What is the purpose of a lockfile (package-lock.json, yarn.lock, pnpm-lock.yaml)?

    It records the exact resolved versions and integrity hashes of every installed dependency (including transitive ones), ensuring reproducible, deterministic installs across machines and over time.

  2. In semantic versioning (`MAJOR.MINOR.PATCH`), what does each part signify?

    MAJOR increments for incompatible/breaking API changes, MINOR for backward-compatible new features, and PATCH for backward-compatible bug fixes.

  3. In an npm version range, what is the difference between `^1.2.3` and `~1.2.3`?

    `^1.2.3` allows updates that do not change the leftmost non-zero digit โ€” i.e. `>=1.2.3 <2.0.0` (minor + patch). `~1.2.3` allows only patch updates โ€” i.e. `>=1.2.3 <1.3.0`.

  4. What is the difference between ES Modules (ESM) and CommonJS (CJS) module systems?

    CommonJS uses `require()`/`module.exports`, is synchronous, and is the traditional Node format. ESM uses `import`/`export`, is the standard for browsers and modern Node, supports static analysis (tree-shaking), and can load asynchronously.

  5. What is 'tree-shaking' in the context of bundling?

    Tree-shaking is dead-code elimination that removes unused exports from the final bundle. It relies on the static structure of ES Modules (static `import`/`export`) to determine which code is actually reachable.

  6. What problem does a module bundler solve?

    A bundler resolves the dependency graph of many source modules and combines them into optimized output files, handling transpilation, minification, asset handling, and code splitting so browsers load fewer, optimized files.

  7. What is code splitting, and why is it useful?

    Code splitting breaks a bundle into smaller chunks that are loaded on demand (e.g., per route or via dynamic `import()`), reducing the initial payload and improving load performance.

  8. How does Vite differ from Webpack during development?

    In dev, Vite serves source over native ES modules using esbuild for fast, on-demand transformation with no full bundling, giving near-instant startup and HMR. Webpack bundles the whole app up front, which is slower for large projects. For production, Vite bundles with Rollup.

  9. What is Hot Module Replacement (HMR)?

    HMR updates modules in a running application in the browser without a full page reload, preserving application state while reflecting code changes instantly during development.

  10. What does Webpack use 'loaders' and 'plugins' for?

    Loaders transform individual files/modules as they are imported (e.g., transpiling TS, handling CSS or images). Plugins hook into the broader build lifecycle to perform wider tasks like bundle optimization, asset injection, or environment definition.

  11. What is Babel used for?

    Babel is a JavaScript transpiler that converts modern JavaScript (and JSX/TypeScript syntax) into backward-compatible versions so code runs in older browsers/environments, using presets (e.g., @babel/preset-env) and plugins.

  12. What is esbuild, and why is it fast?

    esbuild is a JavaScript/TypeScript bundler and transpiler written in Go. It is extremely fast due to being compiled to native code, using parallelism, and minimizing passes over the source, making it 10โ€“100x faster than JS-based tools for many tasks.

  13. What is the difference between transpilation and polyfilling?

    Transpilation converts new syntax into equivalent older syntax (e.g., arrow functions to `function`). Polyfilling adds runtime implementations of missing APIs/features (e.g., `Promise`, `Array.prototype.includes`) that syntax transforms cannot provide.

  14. What is the difference between a linter and a formatter?

    A linter (e.g., ESLint) analyzes code for bugs, anti-patterns, and style/quality rule violations. A formatter (e.g., Prettier) automatically rewrites code layout (spacing, quotes, line breaks) to a consistent style without judging correctness.

  15. What is ESLint and how is it configured?

    ESLint is a pluggable static-analysis tool for JavaScript/TypeScript that flags problematic patterns. It is configured (e.g., in `eslint.config.js` or `.eslintrc`) with rules set to 'off', 'warn', or 'error', plus plugins, parsers, and shareable configs.

  16. Why are Prettier and ESLint often used together, and how is conflict avoided?

    ESLint enforces code quality while Prettier handles formatting. To avoid overlapping/conflicting formatting rules, tools like `eslint-config-prettier` disable ESLint's stylistic rules so Prettier owns formatting.

  17. What is unit testing, and what is a common tool for it in JS?

    Unit testing verifies the smallest isolated pieces of code (functions/modules) in isolation from dependencies. Common JS tools include Jest and Vitest.

  18. How does Vitest differ from Jest?

    Vitest is a Vite-native test runner with a Jest-compatible API, using Vite's transform pipeline and ESM support for fast execution and shared config. Jest is a mature, standalone framework with its own transformer (babel-jest) and larger ecosystem, historically CJS-oriented.

  19. In testing, what is the difference between a mock, a stub, and a spy?

    A stub returns predefined responses for calls; a spy records how a function was called (arguments, call count) while optionally calling through; a mock is a preprogrammed object with expectations about how it should be used. Jest/Vitest `fn()` and `spyOn` cover these roles.

  20. What is the guiding philosophy of React Testing Library (RTL)?

    RTL encourages testing components the way a user interacts with them โ€” querying by accessible roles, labels, and text rather than implementation details (like state or internal methods) โ€” so tests remain robust to refactors.

  21. In React Testing Library, what is the difference between `getBy`, `queryBy`, and `findBy` queries?

    `getBy` returns the element and throws if not found (sync). `queryBy` returns the element or `null` if not found (useful for asserting absence, sync). `findBy` returns a Promise that resolves when the element appears (async, for elements that render later).

  22. What is end-to-end (E2E) testing?

    E2E testing validates complete user flows through the full running application (frontend, backend, and integrations) in a real or headless browser, verifying the system behaves correctly from the user's perspective.

  23. Compare Playwright and Cypress for E2E testing.

    Playwright runs across Chromium, Firefox, and WebKit, supports multiple languages, parallel multi-tab/multi-context testing, and runs out-of-process. Cypress runs in-browser (primarily Chromium-family, plus WebKit/Firefox), offers a strong interactive test runner and time-travel debugging, and is JS/TS-only.

  24. What are the three Core Web Vitals and what does each measure?

    LCP (Largest Contentful Paint) measures loading performance; INP (Interaction to Next Paint) measures responsiveness; CLS (Cumulative Layout Shift) measures visual stability.

  25. What is the 'good' threshold for Largest Contentful Paint (LCP)?

    An LCP of $\leq 2.5$ seconds (measured at the 75th percentile of page loads) is considered good; $2.5\text{โ€“}4.0$ s needs improvement, and $> 4.0$ s is poor.

  26. What is the 'good' threshold for Interaction to Next Paint (INP)?

    An INP of $\leq 200$ ms is considered good; $200\text{โ€“}500$ ms needs improvement, and $> 500$ ms is poor (measured at the 75th percentile).

  27. How is Cumulative Layout Shift (CLS) calculated, and what is the good threshold?

    Each layout shift score is $\text{impact fraction} \times \text{distance fraction}$; CLS is the largest cluster (session window) of such shift scores. A CLS of $\leq 0.1$ is good, $0.1\text{โ€“}0.25$ needs improvement, and $> 0.25$ is poor.

  28. What is lazy loading, and how is it enabled for images natively?

    Lazy loading defers loading of offscreen resources until they are needed (e.g., near the viewport), reducing initial load. Native image lazy loading is enabled with the `loading="lazy"` attribute on `<img>`/`<iframe>`.

  29. Name three common asset optimization techniques for faster page loads.

    Minification (removing whitespace/comments), compression (gzip/Brotli), image optimization (modern formats like WebP/AVIF, responsive `srcset`), plus bundling/code splitting and caching. Any of these reduce transferred bytes or requests.

  30. What is a CDN and how does it improve performance?

    A Content Delivery Network is a geographically distributed set of edge servers that cache and serve content from locations near users, reducing latency, offloading the origin server, and improving availability.

  31. What is the difference between the HTTP `Cache-Control` directives `max-age`, `no-cache`, and `no-store`?

    `max-age=N` allows caching for N seconds. `no-cache` allows storing but requires revalidation with the server before reuse. `no-store` forbids caching the response entirely.

  32. What is the difference between a cache 'hit' and 'miss', and how does revalidation (ETag) work?

    A hit serves content from cache; a miss requires fetching from origin. Revalidation uses validators like `ETag`/`Last-Modified`: the client sends `If-None-Match`/`If-Modified-Since`, and the server responds `304 Not Modified` (reuse cache) or `200` with new content.

  33. What is Lighthouse and what categories does it audit?

    Lighthouse is an automated tool (in Chrome DevTools, CLI, or PageSpeed Insights) that audits a page and scores categories: Performance, Accessibility, Best Practices, and SEO (historically also PWA).

  34. What is the difference between lab data and field data in performance measurement?

    Lab data comes from controlled synthetic tests (e.g., Lighthouse) in a fixed environment, good for debugging. Field data (RUM / CrUX) is collected from real users' devices and networks, reflecting actual experience used for Core Web Vitals assessment.

  35. In Chrome DevTools Performance profiling, what does the Flame Chart / main-thread track show?

    It visualizes call stacks over time on the main thread, showing which functions ran, how long they took, and where long tasks, scripting, rendering, and painting occur โ€” used to find bottlenecks like long tasks blocking interactivity.

  36. What do the letters in WCAG's POUR principles stand for?

    Perceivable, Operable, Understandable, and Robust โ€” the four foundational principles under which all WCAG success criteria are organized.

  37. What are the three WCAG conformance levels?

    Level A (minimum), Level AA (addresses major barriers; the common legal/target standard), and Level AAA (highest, strictest). Each higher level includes all criteria of the lower levels.

  38. What is the WCAG minimum contrast ratio requirement (AA) for normal text?

    A contrast ratio of at least $4.5:1$ for normal text, and at least $3:1$ for large text (about $18\text{pt}$, or $14\text{pt}$ bold) under WCAG 2.x Level AA.

  39. How is the WCAG contrast ratio between two colors defined?

    $$\text{ratio} = \frac{L_1 + 0.05}{L_2 + 0.05}$$ where $L_1$ is the relative luminance of the lighter color and $L_2$ that of the darker color; it ranges from $1:1$ to $21:1$.

  40. What is the purpose of ARIA (Accessible Rich Internet Applications)?

    ARIA is a set of roles, states, and properties added to HTML to make dynamic content and custom UI widgets more accessible to assistive technologies when native HTML semantics are insufficient.

  41. What is the 'first rule of ARIA'?

    If a native HTML element or attribute with the needed semantics and behavior already exists, use it instead of repurposing an element and adding an ARIA role โ€” i.e., prefer native semantics over ARIA.

  42. What is the difference between ARIA roles, states, and properties?

    Roles define what an element is (e.g., `role="button"`, `role="navigation"`). Properties define characteristics (e.g., `aria-label`, `aria-required`). States define current conditions that can change (e.g., `aria-expanded`, `aria-checked`, `aria-disabled`).

  43. What does `aria-live` do, and what are its common values?

    `aria-live` marks a region whose dynamic updates should be announced by assistive tech. Values: `off` (no announcement), `polite` (announce when idle), and `assertive` (announce immediately, interrupting).

  44. What is the difference between `aria-label` and `aria-labelledby`?

    `aria-label` provides an accessible name via a string directly on the element. `aria-labelledby` sets the accessible name by referencing the id(s) of other visible element(s) whose text becomes the label.

  45. What does `aria-hidden="true"` do?

    It removes an element (and its descendants) from the accessibility tree so assistive technologies ignore it, while it remains visually present. It should not be applied to focusable/interactive elements.

  46. What is a merge commit and how many parents does it have?

    A merge commit is the commit created by a non-fast-forward merge; it records the combined result and has two (or more) parent commits โ€” one for each branch being joined โ€” preserving branch history.

  47. What does `git stash` do?

    It temporarily shelves (saves) uncommitted changes in the working directory and index, reverting them to a clean state; the changes can be reapplied later with `git stash pop` or `git stash apply`.

  48. What is the difference between `devDependencies` and `dependencies` in package.json?

    `dependencies` are packages required at runtime by the shipped application. `devDependencies` are needed only during development/build (e.g., test runners, bundlers, linters) and are excluded when the package is installed as a dependency of another project.

  49. What is minification and how does it differ from compression?

    Minification rewrites source code to be smaller (removing whitespace, comments, shortening names) while keeping it valid. Compression (gzip/Brotli) is a reversible byte-level encoding applied during transfer and decompressed by the browser. They are complementary.

  50. What is the difference between integration testing and unit testing?

    Unit tests verify a single isolated unit with dependencies mocked. Integration tests verify that multiple units/modules work correctly together (e.g., a component with real child components or a service hitting a real database), covering their interactions.

  51. What does the 'testing pyramid' recommend about test distribution?

    It recommends many fast, cheap unit tests at the base, fewer integration tests in the middle, and a small number of slow, expensive end-to-end tests at the top โ€” balancing coverage, speed, and maintenance cost.

  52. Why does the order of `dependencies` in Webpack matter less than the module dependency graph?

    Webpack builds output from the dependency graph starting at entry points, following `import`/`require` statements, not from listing order. It resolves each module once and includes only what is reachable from the entry, then applies optimizations like tree-shaking.

  53. What is the purpose of source maps in a production build?

    Source maps map minified/transpiled bundled code back to the original source, enabling meaningful debugging (readable stack traces, breakpoints) in DevTools even though the shipped code is transformed and compressed.

Frontend Web Development Tooling, Performance & Deployment FAQ

What is in the Frontend Web Development Tooling, Performance & Deployment syllabus?

Frontend Web Development Tooling, Performance & Deployment is split into 6 chapters: Version Control with Git, Package Managers & Build Tools, Code Quality & Testing, Web Performance, Accessibility & Standards and Deployment & Hosting. Together they contain 24 topics.

How many chapters are in Frontend Web Development Tooling, Performance & Deployment?

6 chapters, containing 24 topics. The largest chapter is Version Control with Git, with 4 topics.

Are there flashcards for Frontend Web Development Tooling, Performance & Deployment?

Yes โ€” a 73-card Tooling, Performance & Deployment deck, printed in full in the flashcards section of this page and available in the Examius app with spaced repetition. The free plan covers one exam of your choice, including its flashcards; Examius Pro, a one-time purchase, unlocks every other exam and deck.