Ship less
The easiest byte to load is the byte you never send. Remove unused libraries, avoid shipping large frameworks for simple pages, and split code when an application genuinely needs multiple routes or features.
Optimize images
Use appropriately sized images, modern formats where supported, meaningful dimensions and lazy loading for content that starts below the fold. A portfolio rarely needs a full-resolution photograph delivered to a small mobile viewport.
Keep the critical path simple
The browser needs HTML, CSS, fonts and scripts before the page becomes interactive. Keep critical CSS small, avoid blocking scripts when possible, and make the initial document useful even before enhancements finish loading.
Measure real bottlenecks
Use browser performance tools and field data instead of guessing. Look at loading, interaction and visual stability. Fix the largest bottlenecks first; micro-optimizations are rarely worth more than removing one heavy dependency.
Performance is part of UX
A fast site is easier to browse, especially on slower networks and mobile devices. Good performance is therefore both a technical quality and a usability feature.