LayerwiseLayerwise
  • Features
  • Pricing
  • Templates
  • Docs
DownloadDownload
FeaturesPricingTemplatesDocsAI Website BuilderVibe CodingPersonal Software
DownloadDownload
  1. Glossary
  2. /
  3. Motion principles

Perceived performance

Also called perceived speed or perceived load time

How fast an app feels to people, which skeleton screens, instant feedback, and progressive loading can improve even when the real wait stays the same.

import { useEffect, useState } from 'react';
import { motion } from 'motion/react';

const PAGE_SIZE = 4;
const SKELETON_DELAY_MS = 300; // fast responses skip the loading state

type Post = { id: string; author: string; text: string; avatar: string };

// Posts stream in one by one while `loading` is true. Skeleton rows hold the
// final layout, and each real row fades in at the same size, so nothing jumps.
export function Feed({ posts, loading }: { posts: Post[]; loading: boolean }) {
  const [slow, setSlow] = useState(false);

  useEffect(() => {
    if (!loading) return;
    const timer = setTimeout(() => setSlow(true), SKELETON_DELAY_MS);
    return () => {
      clearTimeout(timer);
      setSlow(false);
    };
  }, [loading]);

  const placeholders =
    loading && slow ? Math.max(PAGE_SIZE - posts.length, 0) : 0;

  return (
    <ul aria-busy={loading} className='flex w-80 flex-col gap-2'>
      {posts.map((post) => (
        <motion.li
          key={post.id}
          initial={{ opacity: 0 }}
          animate={{ opacity: 1 }}
          transition={{ duration: 0.2 }}
          className='flex h-16 items-center gap-3 rounded-xl border px-3'
        >
          <img src={post.avatar} alt='' className='size-10 rounded-full' />
          <div className='min-w-0'>
            <p className='text-sm font-medium'>{post.author}</p>
            <p className='truncate text-sm text-muted-foreground'>
              {post.text}
            </p>
          </div>
        </motion.li>
      ))}
      {Array.from({ length: placeholders }, (_, i) => (
        <li
          key={`skeleton-${i}`}
          aria-hidden
          className='flex h-16 animate-pulse items-center gap-3 rounded-xl border px-3'
        >
          <div className='size-10 rounded-full bg-muted' />
          <div className='flex flex-col gap-2'>
            <div className='h-3 w-24 rounded bg-muted' />
            <div className='h-3 w-44 rounded bg-muted' />
          </div>
        </li>
      ))}
    </ul>
  );
}
Replace the full-page spinner on the feed with a skeleton screen that matches the real layout: gray blocks for the avatar, name, photo, and two text lines. Fill in each part as soon as its data arrives, fade content in over 200ms, keep the same sizes so nothing shifts, and show no loading state at all if the data arrives within 300ms.

Paste into Layerwise or any AI coding tool.

What is Perceived performance?

Perceived performance is the speed people feel, which can differ a lot from the speed a stopwatch measures. A blank screen with a spinner makes every second noticeable. A screen that shows its layout right away and fills in piece by piece feels faster, even when the content finishes loading at the same moment.

Common techniques: respond to every tap within about 100ms, show a skeleton screen shaped like the real content, load the most important part first, use optimistic UI so actions look done before the server confirms, and keep animations short so they never add to the wait.

These techniques work alongside real speed. Keep measuring actual load times, give skeletons the same size as the final content so nothing jumps when it arrives, and skip the loading state for anything that finishes within about 300ms, where a quick flash of a spinner feels slower than showing nothing.

Often confused with

Skeleton screen
A skeleton screen is one technique for improving perceived performance. Perceived performance is the overall goal of making waits feel shorter.

Related terms

All terms

Skeleton screen

A loading placeholder made of gray blocks shaped like the content on its way, often with a soft shimmer, that the real content replaces.

Optimistic UI

A pattern where the interface shows the result of an action right away, before the server confirms it, and rolls it back if the request fails.

Loading state

The view a screen shows while its data is on the way, designed together with the outcomes that follow: loaded, empty, or error.

Spinner

A small looping animation, usually a rotating ring, that shows the app is busy with a short task of unknown length.

Build it with Layerwise

Describe your app, watch it run in a live preview, and publish it with a database, storage, and sign-in built in.

DownloadDownloadRead the docs
LayerwiseLayerwise

Build full-stack web apps in minutes with AI.

Product

  • Features
  • Pricing
  • Download
  • Templates

Solutions

  • AI Website Builder
  • Vibe Coding
  • Personal Software

Resources

  • Documentation
  • Changelog
  • Blog
  • Vibe Coding Glossary
  • llms.txt
  • llms-full.txt

Company

  • About
  • Contact

Legal

  • Privacy
  • Analytics Privacy
  • Terms
  • Security
  • Abuse

© 2026 Layerwise. All rights reserved.

Entrances & exits

  • Fade in
  • Slide in
  • Scale in
  • Pop in
  • Blur in
  • Reveal animation
  • Enter and exit animations

Timing & sequencing

  • Duration
  • Delay
  • Keyframes
  • Tweening
  • Stagger
  • Orchestration
  • Fill mode
  • Stepped animation
  • Looping animation
  • Yoyo animation

Easing

  • Easing
  • Linear easing
  • Ease-in
  • Ease-out
  • Ease-in-out
  • Cubic-bezier
  • Asymmetric easing
  • Overshoot easing

Springs & physics

  • Spring animation
  • Stiffness
  • Damping
  • Mass
  • Bounce
  • Velocity
  • Momentum
  • Interruptible animation
  • Rubber-banding

Transforms

  • Translate
  • Scale
  • Rotate
  • Skew
  • 3D flip
  • Perspective
  • Transform origin
  • Origin-aware animation

State transitions

  • Crossfade
  • Morph
  • Shared element transition
  • Layout animation
  • Height auto animation
  • Direction-aware transition
  • Continuity transition
  • Page transition
  • View Transitions API

Scroll effects

  • Scroll reveal
  • Scroll-driven animation
  • Parallax scrolling
  • Scrollytelling
  • Scroll pinning
  • Horizontal scroll section
  • Scroll progress bar
  • Scroll snap
  • Smooth scrolling

Interaction feedback

  • Hover effect
  • Press feedback
  • Ripple effect
  • Shake animation
  • Hold to confirm
  • Drag gesture
  • Drag to reorder
  • Swipe to dismiss
  • Pull to refresh
  • Magnetic button
  • Custom cursor
  • 3D tilt card
  • Spotlight card

Text effects

  • Typewriter effect
  • Text scramble
  • Split text animation
  • Text morph
  • Rotating words
  • Gradient text
  • Shimmer text
  • Number ticker
  • Tabular numbers
  • Underline animation

Loops & ambient motion

  • Marquee
  • Pulse animation
  • Float animation
  • Orbit animation
  • Idle animation
  • Particle background
  • Border beam
  • Confetti
  • Animated gradient

Visual effects

  • Blur
  • Clip-path
  • Mask
  • Before/after slider
  • SVG line drawing
  • Lottie animation

Motion principles

  • Purposeful animation
  • Anticipation
  • Follow-through
  • Squash and stretch
  • Perceived performance
  • Frequency of use
  • Spatial consistency
  • Reduced motion

Animation performance

  • Frame rate (FPS)
  • Jank
  • GPU acceleration
  • will-change
  • Layout thrashing

Layout

  • Hero section
  • Above the fold
  • Sticky header
  • Sidebar
  • Bento grid
  • Card
  • Flexbox
  • CSS Grid
  • Padding vs margin
  • Responsive design
  • Container
  • Masonry layout
  • Split screen
  • Z-index
  • Overflow

Components

  • Button variants
  • Modal
  • Drawer
  • Popover
  • Tooltip
  • Dropdown menu
  • Context menu
  • Toast notification
  • Tabs
  • Segmented control
  • Accordion
  • Carousel
  • Command palette
  • Combobox
  • Toggle switch
  • Checkbox
  • Radio button
  • Date picker
  • Breadcrumb
  • Pagination
  • Infinite scroll
  • Badge
  • Avatar stack
  • Empty state
  • Skeleton screen
  • Spinner
  • Progress bar
  • Data table
  • Stepper
  • Floating label
  • Inline validation
  • Alert banner
  • Tag input

States & patterns

  • Interaction states
  • Focus ring
  • Loading state
  • Optimistic UI
  • Debounce
  • Lazy loading
  • Dark mode
  • Micro-interaction
  • Affordance
  • Undo
  • Drag and drop
  • Keyboard shortcut

Visual styles

  • Glassmorphism
  • Liquid glass
  • Neumorphism
  • Claymorphism
  • Neo-brutalism
  • Skeuomorphism
  • Flat design
  • Mesh gradient
  • Aurora background
  • Grain texture
  • Glow effect
  • Drop shadow
  • Border radius
  • Grid background
  • Typographic hierarchy
  • Accent color
  • Color contrast

Vibe coding & AI

  • Vibe coding
  • Prompt
  • Context window
  • Token
  • AI agent
  • Tool call
  • Hallucination
  • Diff
  • Live preview
  • Checkpoint
  • Git commit
  • Deploy
  • Frontend and backend
  • API
  • Database
  • Rules file
  • MCP
  • Plan mode
  • Visual edit
Spinner

0.0s

Skeleton

0.0s