Frontend Development
Foydalanuvchi ko'radigan va muloqot qiladigan qism - HTML, CSS, JavaScript dan React, Vue, Performance va Accessibility gacha to'liq qo'llanma.
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)
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.
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:
<!-- ❌ 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:
/* 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)
/* 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:
// 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() { }
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.
Vue.js
O'rganish oson. Yaxshi dokumentatsiya.
Angular
Google tomonidan. Enterprise loyihalar uchun.
Svelte
Compile-time. Eng yengil bundle.
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
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.
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. |
# 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 (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:
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
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.
<!-- ❌ 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.
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.
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
2024 Frontend Trendlari
React Server Components (RSC)
Serverda render, client'ga HTML yuborish. Bundle size kamayadi, SEO yaxshilanadi.
Server Actions
Form submission serverda. API endpoint yaratish shart emas.
Islands Architecture
Astro, Fresh. Sahifaning faqat interaktiv qismlari hydrate qilinadi.
AI-Powered Development
v0.dev, GitHub Copilot. UI generatsiya qilish, kod yozishda yordam.
Edge Computing
Vercel Edge, Cloudflare Workers. Foydalanuvchiga yaqin joyda kod ishga tushadi.
Frontend Xavfsizlik
- XSS (Cross-Site Scripting): Foydalanuvchi inputini sanitize qiling. React avtomatik escape qiladi, lekin
dangerouslySetInnerHTMLdan 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
alt, aria-label, semantic HTML unutiladi. 15% foydalanuvchi yo'qotiladi + huquqiy muammolar.
Landing page uchun Redux, GraphQL, Microservices kerak emas. Loyiha hajmiga mos tool tanlang.
"Keyin mobile qilamiz" - xato! Mobile-first yondashuv bilan boshlang.
React.memo, useMemo, useCallback ishlatmaslik. Performance monitoring qiling.
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
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.