02-bosqich

Frontend Development

Foydalanuvchi ko'radigan va muloqot qiladigan qism - HTML, CSS, JavaScript dan React, Vue, Performance va Accessibility gacha to'liq qo'llanma.

45 daqiqa o'qish 21 ta mavzu 20+ misol
Boshlang'ich Junior Middle Senior

Frontend nima?

Frontend - bu foydalanuvchi bevosita ko'radigan va muloqot qiladigan qism. Brauzerda ochilgan veb-sahifa, mobil ilovaning ekrani, hatto bankomatning interfeysi - bularning barchasi frontend hisoblanadi.

Oddiy qilib aytganda:

  • Backend - oshxona (ovqat tayyorlanadi, lekin ko'rinmaydi)
  • Frontend - restoran zali (mijoz ko'radi, muloqot qiladi)
  • API - ofitsiant (oshxona va zal orasida aloqa)
Frontend = UX + UI + Code

Yaxshi frontend dasturchisi faqat kod yozmaydi - u foydalanuvchi tajribasini (UX), vizual dizaynni (UI) va texnik implementatsiyani birlashtiradi.

Nega kerak?

Frontend - bu biznesning yuzasi. Foydalanuvchilar birinchi bo'lib frontendni ko'rishadi va shu asosida qaror qilishadi.

0.05s
Birinchi taassurot
Foydalanuvchi shu vaqtda sayt haqida fikr qiladi
53%
Bounce rate
3+ soniya yuklanish = foydalanuvchi ketadi
1%
Sotuvlar pasayishi
Har 100ms kechikish (Amazon statistikasi)

Birinchi taassurot

Yomon dizayn = ishonchsizlik. Foydalanuvchi 3 soniyada qaror qiladi.

Mobile-first

Trafikning 60%+ mobil. Responsive bo'lmasa, foydalanuvchilarni yo'qotasiz.

Accessibility

15% odamlar nogironlikka ega. A11y - huquqiy talab va katta bozor.

SEO

Google Core Web Vitals ranking faktor. Tez sayt = yuqori o'rin.

HTML, CSS, JavaScript asoslari

Frontend uchta asosiy texnologiyaga qurilgan - ularni "web trio" deb atashadi:

HTML

Struktura (skelet)

CSS

Dizayn (tashqi ko'rinish)

JavaScript

Interaktivlik (xatti-harakat)

HTML - Semantic Tags

To'g'ri HTML yozish SEO va Accessibility uchun muhim:

html
<!-- ❌ Yomon - faqat div ishlatish -->
<div class="header">...</div>
<div class="nav">...</div>
<div class="content">...</div>

<!-- ✅ Yaxshi - semantic HTML -->
<header>
    <nav aria-label="Main navigation">
        <ul>
            <li><a href="/">Home</a></li>
        </ul>
    </nav>
</header>

<main>
    <article>
        <h1>Sarlavha</h1>
        <section>...</section>
    </article>
    <aside>Sidebar</aside>
</main>

<footer>...</footer>

Muhim HTML elementlari

  • <header>, <footer>, <nav> - sahifa qismlari
  • <main>, <article>, <section> - kontent tuzilishi
  • <figure>, <figcaption> - rasm va izoh
  • <time>, <address> - maxsus ma'lumotlar
  • <button> vs <a> - action vs navigation

CSS chuqurroq

Flexbox va Grid

Zamonaviy layout uchun ikki asosiy usul:

css
/* FLEXBOX - bir o'qli layout */
.flex-container {
    display: flex;
    justify-content: space-between;  /* gorizontal */
    align-items: center;           /* vertikal */
    gap: 1rem;
    flex-wrap: wrap;               /* keyingi qatorga o'tish */
}

/* CSS GRID - ikki o'qli layout */
.grid-container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);  /* 3 teng ustun */
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 2rem;
}

/* Responsive grid */
.responsive-grid {
    display: grid;
    grid-template-columns: 1fr;
}

@media (min-width: 768px) {
    .responsive-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (min-width: 1024px) {
    .responsive-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

CSS Methodologiyalari

Metodologiya Tavsifi Misol
BEM Block Element Modifier - eng mashhur .card__title--active
Tailwind Utility-first CSS framework class="flex items-center p-4"
CSS Modules Scoped CSS (React/Vue) import styles from './Button.module.css'
CSS-in-JS JavaScript ichida CSS styled-components, Emotion

CSS Custom Properties (Variables)

css
/* Root da global o'zgaruvchilar */
:root {
    --color-primary: #7C5CFF;
    --color-secondary: #27D7C4;
    --font-size-base: 16px;
    --spacing-unit: 8px;
    --border-radius: 12px;
    --shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
    :root {
        --color-bg: #0B1020;
        --color-text: #E8EEF8;
    }
}

/* Ishlatish */
.button {
    background: var(--color-primary);
    padding: calc(var(--spacing-unit) * 2);
    border-radius: var(--border-radius);
}

JavaScript zamonaviy

ES6+ bilan JavaScript juda kuchli til bo'ldi. Eng muhim xususiyatlar:

javascript
// 1. DESTRUCTURING
const user = { name: 'Ali', age: 25, city: 'Tashkent' };
const { name, age } = user;  // object destructuring

const colors = ['red', 'green', 'blue'];
const [first, second] = colors;  // array destructuring

// 2. SPREAD & REST
const newUser = { ...user, email: 'ali@mail.com' };  // spread
const [head, ...tail] = colors;  // rest

// 3. ARROW FUNCTIONS
const add = (a, b) => a + b;
const greet = name => `Hello, ${name}!`;  // template literal

// 4. ASYNC/AWAIT
async function fetchUser(id) {
    try {
        const response = await fetch(`/api/users/${id}`);
        if (!response.ok) throw new Error('User not found');
        return await response.json();
    } catch (error) {
        console.error('Error:', error);
    }
}

// 5. OPTIONAL CHAINING & NULLISH COALESCING
const city = user?.address?.city ?? 'Unknown';

// 6. ARRAY METHODS
const adults = users
    .filter(u => u.age >= 18)
    .map(u => u.name)
    .sort();

// 7. ES MODULES
import { useState, useEffect } from 'react';
export default function Component() { }
TypeScript o'rganing!

2024-yilda TypeScript deyarli standart. Type safety katta loyihalarda xatolarni 40%+ ga kamaytiradi. JavaScript bilsangiz, 1-2 haftada o'rganasiz.

Frontend Frameworklar

Zamonaviy web-ilovalar framework'lar bilan quriladi. Har birining o'z kuchli tomonlari bor:

React

Meta (Facebook) tomonidan. Eng katta ekotizim.

⭐ 220k+ GitHub | 📦 npm: 20M+/hafta

Vue.js

O'rganish oson. Yaxshi dokumentatsiya.

⭐ 45k+ GitHub | 📦 npm: 4M+/hafta

Angular

Google tomonidan. Enterprise loyihalar uchun.

⭐ 95k+ GitHub | 📦 npm: 3M+/hafta

Svelte

Compile-time. Eng yengil bundle.

⭐ 75k+ GitHub | 📦 npm: 500k+/hafta

Qaysi birini tanlash kerak?

Holat Tavsiya
Ish topish oson bo'lsin React - eng ko'p ish o'rinlari
Tez o'rganish kerak Vue - eng yaxshi dokumentatsiya
Katta enterprise loyiha Angular - to'liq framework
Performance muhim Svelte - eng kichik bundle
SEO + Full-stack Next.js (React) yoki Nuxt (Vue)

React Component misoli

tsx
import { useState, useEffect } from 'react';

interface User {
    id: number;
    name: string;
    email: string;
}

export function UserCard({ userId }: { userId: number }) {
    const [user, setUser] = useState<User | null>(null);
    const [loading, setLoading] = useState(true);
    const [error, setError] = useState<string | null>(null);

    useEffect(() => {
        async function fetchUser() {
            try {
                const res = await fetch(`/api/users/${userId}`);
                if (!res.ok) throw new Error('Failed to fetch');
                setUser(await res.json());
            } catch (e) {
                setError(e.message);
            } finally {
                setLoading(false);
            }
        }
        fetchUser();
    }, [userId]);

    if (loading) return <div>Loading...</div>;
    if (error) return <div>Error: {error}</div>;
    if (!user) return null;

    return (
        <div className="user-card">
            <h2>{user.name}</h2>
            <p>{user.email}</p>
        </div>
    );
}

State Management

Ilova holatini (state) boshqarish - frontend'ning eng murakkab qismlaridan biri.

State turlari

  • Local State - bitta komponentda (useState)
  • Global State - butun ilovada (Redux, Zustand)
  • Server State - API'dan kelgan ma'lumotlar (React Query, SWR)
  • URL State - query parameters
  • Form State - formalar (React Hook Form)

Mashhur state management kutubxonalari

Redux Toolkit

Eng mashhur, katta loyihalar uchun. DevTools bilan debugging oson.

Zustand

Minimal, tez. Redux'ga alternativa. 2KB bundle.

React Query / TanStack

Server state uchun eng yaxshi. Caching, refetching avtomatik.

Jotai / Recoil

Atomic state. Kichik, independent state qismlari.

typescript - Zustand misoli
import { create } from 'zustand';

interface CartStore {
    items: CartItem[];
    addItem: (item: CartItem) => void;
    removeItem: (id: string) => void;
    clearCart: () => void;
    total: () => number;
}

export const useCartStore = create<CartStore>((set, get) => ({
    items: [],
    addItem: (item) => set((state) => ({ 
        items: [...state.items, item] 
    })),
    removeItem: (id) => set((state) => ({ 
        items: state.items.filter(i => i.id !== id) 
    })),
    clearCart: () => set({ items: [] }),
    total: () => get().items.reduce((sum, i) => sum + i.price, 0),
}));

// Ishlatish
function CartButton() {
    const { items, addItem } = useCartStore();
    return <span>Cart: {items.length}</span>;
}

Build Tools

Build tool'lar kodingizni brauzer tushunadigan shaklga o'zgartiradi:

Tool Tezligi Ishlatish Izoh
Vite Juda tez React, Vue, Svelte 2024 standart. ESM-based. Eng mashhur.
Webpack O'rta Hamma uchun Klassik, murakkab konfiguratsiya.
Turbopack Eng tez Next.js Rust'da yozilgan, Webpack'dan 700x tez.
esbuild Eng tez Low-level Go'da yozilgan. Vite uni ishlatadi.
bash - Vite bilan loyiha boshlash
# React + TypeScript
npm create vite@latest my-app -- --template react-ts

# Vue + TypeScript
npm create vite@latest my-app -- --template vue-ts

# Svelte
npm create vite@latest my-app -- --template svelte-ts

# Ishga tushirish
cd my-app
npm install
npm run dev

SPA vs SSR vs SSG

Web-ilovalar turli usullarda render qilinishi mumkin:

Turi Qachon render SEO Qachon ishlatish
CSR/SPA Brauzerda ❌ Yomon Admin panel, dashboard
SSR Har so'rovda serverda ✅ Yaxshi Dynamic content, e-commerce
SSG Build vaqtida ✅ Yaxshi Blog, marketing saytlar
ISR Build + periodic ✅ Yaxshi Katta saytlar, yangilanadigan kontent
Next.js va Nuxt

Next.js (React) va Nuxt (Vue) - bu "meta-framework"lar. Ular SPA, SSR, SSG hammasini qo'llab-quvvatlaydi. Har bir sahifa uchun alohida strategiya tanlash mumkin.

Performance Optimization

Tez sayt = yaxshi UX + yaxshi SEO + ko'proq konversiya.

Core Web Vitals

Google'ning rasmiy performance metrikalari:

LCP
Largest Contentful Paint
< 2.5s yaxshi
INP
Interaction to Next Paint
< 200ms yaxshi
CLS
Cumulative Layout Shift
< 0.1 yaxshi

Optimization usullari

  • Code Splitting: Faqat kerakli kodni yuklash. React.lazy(), dynamic imports
  • Lazy Loading: Rasmlarni viewport'ga kirganda yuklash. loading="lazy"
  • Image Optimization: WebP/AVIF format, responsive images, next/image
  • Minification: CSS/JS fayllarni kichiklashtirish (Terser, cssnano)
  • Caching: Service Workers, Cache-Control headers
  • CDN: Statik fayllarni global tarqatish (Cloudflare, Vercel Edge)
  • Tree Shaking: Ishlatilmagan kodni avtomatik o'chirish
tsx - Lazy Loading Component
import { lazy, Suspense } from 'react';

// Komponentni lazy yuklash
const HeavyChart = lazy(() => import('./HeavyChart'));

function Dashboard() {
    return (
        <div>
            <h1>Dashboard</h1>
            <Suspense fallback={<div>Loading chart...</div>}>
                <HeavyChart />
            </Suspense>
        </div>
    );
}

Accessibility (a11y)

Accessibility - bu saytni barcha odamlar, jumladan nogironligi bo'lganlar ham foydalana olishini ta'minlash.

Keyboard Navigation

Barcha funksiyalar klaviatura orqali ishlasin. Tab, Enter, Space, Arrow keys.

Screen Readers

ARIA labellar, semantic HTML, alt textlar. NVDA, VoiceOver uchun.

Kontrast

Matn va fon orasida yetarli kontrast. WCAG 2.1 AA: 4.5:1 minimum.

Font Size

Relative units (rem, em) ishlating. Foydalanuvchi zoom qila olsin.

html - Accessible Button
<!-- ❌ Yomon -->
<div onclick="submit()">Submit</div>

<!-- ✅ Yaxshi -->
<button
    type="submit"
    aria-label="Submit form"
    disabled={isLoading}
>
    {isLoading ? 'Loading...' : 'Submit'}
</button>

<!-- Image with alt -->
<img
    src="user.jpg"
    alt="John Doe - Software Engineer"
    loading="lazy"
/>

<!-- Form with labels -->
<label for="email">Email address</label>
<input
    id="email"
    type="email"
    aria-describedby="email-hint"
    required
/>
<span id="email-hint">We'll never share your email</span>

Frontend Testing

Frontend uchun testing pyramid:

Unit Tests (70%)

Utility funksiyalar, hooks, helpers. Jest, Vitest.

Integration (20%)

Komponentlar birgalikda. React Testing Library.

E2E Tests (10%)

To'liq user flows. Playwright, Cypress.

typescript - React Testing Library
import { render, screen, fireEvent } from '@testing-library/react';
import { Counter } from './Counter';

describe('Counter', () => {
    it('increments count when button clicked', () => {
        render(<Counter />);
        
        const button = screen.getByRole('button', { name: /increment/i });
        const count = screen.getByText(/count: 0/i);
        
        expect(count).toBeInTheDocument();
        
        fireEvent.click(button);
        
        expect(screen.getByText(/count: 1/i)).toBeInTheDocument();
    });

    it('is accessible', async () => {
        const { container } = render(<Counter />);
        const results = await axe(container);
        expect(results).toHaveNoViolations();
    });
});

API Integration

Backend bilan bog'lanish uchun eng yaxshi usullar:

React Query / TanStack Query

Server state uchun eng yaxshi yechim. Caching, refetching, error handling avtomatik.

typescript - React Query misoli
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';

// GET request
function useUsers() {
    return useQuery({
        queryKey: ['users'],
        queryFn: () => fetch('/api/users').then(r => r.json()),
        staleTime: 5 * 60 * 1000, // 5 min cache
    });
}

// POST request with cache invalidation
function useCreateUser() {
    const queryClient = useQueryClient();
    
    return useMutation({
        mutationFn: (newUser) => fetch('/api/users', {
            method: 'POST',
            body: JSON.stringify(newUser),
        }),
        onSuccess: () => {
            queryClient.invalidateQueries({ queryKey: ['users'] });
        },
    });
}

// Ishlatish
function UserList() {
    const { data, isLoading, error } = useUsers();
    const createUser = useCreateUser();
    
    if (isLoading) return <Skeleton />;
    if (error) return <Error message={error.message} />;
    
    return <ul>{data.map(u => <li key={u.id}>{u.name}</li>)}</ul>;
}

Design System

Katta loyihalarda barcha UI elementlari bitta tizimga bo'ysunadi:

  • Design Tokens: Ranglar, shriftlar, spacing, shadow
  • Component Library: Button, Input, Modal, Card...
  • Documentation: Storybook bilan component showcase
  • Guidelines: Qachon qaysi komponent ishlatish

Mashhur Design System'lar

shadcn/ui Radix UI Chakra UI Material UI Ant Design Headless UI

Frontend Xavfsizlik

  • XSS (Cross-Site Scripting): Foydalanuvchi inputini sanitize qiling. React avtomatik escape qiladi, lekin dangerouslySetInnerHTML dan ehtiyot bo'ling.
  • API kalitlarini yashirmang: Frontend kodi ochiq! Maxfiy kalitlarni backend'da saqlang.
  • HTTPS: Barcha trafik shifrlangan bo'lsin. Mixed content (HTTP resurslar) bo'lmasin.
  • CSP Headers: Content Security Policy bilan qaysi resurslar yuklanishini cheklang.
  • npm audit: Dependency'lardagi zaifliklarni muntazam tekshiring.
  • CORS: Faqat ishonchli domenlardan so'rovlarga ruxsat bering.

Ko'p uchraydigan xatolar

1. Accessibility e'tiborsiz

alt, aria-label, semantic HTML unutiladi. 15% foydalanuvchi yo'qotiladi + huquqiy muammolar.

2. Over-engineering

Landing page uchun Redux, GraphQL, Microservices kerak emas. Loyiha hajmiga mos tool tanlang.

3. Mobile oxirgi o'rinda

"Keyin mobile qilamiz" - xato! Mobile-first yondashuv bilan boshlang.

4. Keraksiz re-renderlar

React.memo, useMemo, useCallback ishlatmaslik. Performance monitoring qiling.

5. Bundle size e'tiborsiz

Ko'p library import qilish. Bundle analyzer ishlatib, keraksiz kodlarni olib tashlang.

Best Practices

  • Semantic HTML: div o'rniga section, article, nav, header ishlating
  • TypeScript: Katta loyihalarda type safety juda muhim
  • Component composition: Katta komponentlarni kichik qismlarga ajrating
  • CSS variables: Ranglar, spacing uchun custom properties ishlating
  • Lazy loading: Og'ir komponentlarni kerak bo'lganda yuklang
  • Error boundaries: Xatolarni gracefully handle qiling
  • Lighthouse audit: Muntazam performance tekshiring, 90+ score
  • Testing: Kritik funksiyalarni test qiling
  • Documentation: Component API'larni hujjatlashtiring
  • Accessibility: axe, WAVE bilan tekshiring

Asboblar va texnologiyalar

React Vue.js Angular Svelte Next.js Nuxt Tailwind CSS shadcn/ui Vite Vitest Playwright Storybook React Query Zustand TypeScript Framer Motion

Ko'p so'raladigan savollar

"Eng yaxshi" yo'q. React - ish bozori katta, ekotizim boy. Vue - o'rganish oson, dokumentatsiya a'lo. Angular - enterprise, to'liq framework. Ish topmoqchi bo'lsangiz React, tez o'rganmoqchi bo'lsangiz Vue.

2024-yilda ha. Ko'p kompaniyalar talab qiladi. Type safety xatolarni 40%+ ga kamaytiradi. JavaScript bilsangiz 1-2 haftada o'rganasiz. Boshlang!

Ikkalasini ham biling! Avval CSS fundamentallarini (Flexbox, Grid) o'rganing. Keyin Tailwind - tez prototyping, consistency uchun juda yaxshi. Ko'p kompaniyalar Tailwind ishlatadi.

SEO muhim bo'lsa (blog, e-commerce) - Next.js. Admin panel, dashboard uchun - oddiy React yetarli. 2024-yilda Next.js de-facto standart bo'lib qolmoqda.

Kichik loyihalarda React Context yetarli. Redux/Zustand katta loyihalarda: ko'p komponentlar shared state, murakkab async logika. Server state uchun React Query eng yaxshi.

1) Rasmlarni optimize (WebP, lazy loading). 2) Code splitting. 3) Unused code o'chirish. 4) CDN. 5) Caching. Lighthouse dan boshlab, Core Web Vitals kuzating.

Testing pyramid: 70% Unit (Vitest), 20% Integration (React Testing Library), 10% E2E (Playwright). Kritik user flows test qiling.

1) Etik - barcha odamlar foydalana olsin. 2) Huquqiy - ko'p davlatlarda qonun (ADA). 3) SEO - accessible saytlar yaxshiroq rank oladi. 4) UX - keyboard navigation barchaga foydali.

Glossary (Atamalar lug'ati)

SPA Single Page Application - sahifa qayta yuklanmaydi, JS kontent almashtirib turadi.
SSR Server Side Rendering - HTML serverda generatsiya qilinadi.
SSG Static Site Generation - HTML build vaqtida yaratiladi.
Hydration SSR HTML ni React/Vue interaktiv qilish - JS "jonlantiradi".
Bundler JS/CSS fayllarni birlashtiruvchi tool (Vite, Webpack).
Tree Shaking Ishlatilmagan kodni avtomatik olib tashlash.
Virtual DOM React'ning memory'dagi DOM nusxasi - o'zgarishlarni optimallashtiradi.
Component UI ning mustaqil, qayta ishlatiluvchi qismi.
Props Parent'dan child'ga uzatiladigan ma'lumotlar.
State Komponentning ichki holati - o'zgarganda UI yangilanadi.
Hook React funksiyalari (useState, useEffect) - state va lifecycle.
Lazy Loading Resurslarni kerak bo'lganda yuklash.
Core Web Vitals Google'ning rasmiy UX metrikalari: LCP, INP, CLS.
a11y Accessibility (a + 11 harf + y). Web'ni barcha uchun accessible qilish.