🔴 Phần 5: JavaScript trong Thực tế (Browser & Optimization)

Dưới đây là đáp án chi tiết cho phần 🔴 Phần 5: JavaScript trong Thực tế (Browser & Optimization) – rất phù hợp cho lập trình viên muốn ứng dụng JS hiệu quả trong sản phẩm thực tế:


1. LocalStorage, SessionStorage và Cookies khác nhau như thế nào?

Tính năng

LocalStorage

SessionStorage

Cookies

Dung lượng

~5MB

~5MB

~4KB

Thời gian lưu

Vĩnh viễn

Trong session/tab

Có thể đặt thời gian hết hạn

Truy cập từ server

❌ Không

❌ Không

✅ Có (gửi theo HTTP request)

Ứng dụng phổ biến

Lưu user settings

Lưu data tab tạm thời

Lưu token login, tracking


2. AJAX là gì? So sánh với Fetch API

  • AJAX (Asynchronous JavaScript and XML): kỹ thuật giao tiếp server mà không cần reload trang.

So sánh: XMLHttpRequest vs Fetch API

Tiêu chí

XMLHttpRequest

Fetch API

Cú pháp

Phức tạp, dài dòng

Gọn gàng, dựa trên Promise

Hỗ trợ Promise

❌ Không

✅ Có

Xử lý JSON

Cần parse tay (JSON.parse)

.json() method

📌 Ví dụ với Fetch:

fetch('/api/data')
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err));

3. CORS là gì? Khi nào gặp lỗi CORS?

  • CORS (Cross-Origin Resource Sharing): cơ chế bảo mật cho phép/không cho phép truy cập tài nguyên từ domain khác.

📌 Gặp lỗi CORS khi:

  • Gửi request từ frontend (origin A) đến backend khác (origin B) mà server B không cho phép A truy cập.

Cách khắc phục:

  • Cấu hình header Access-Control-Allow-Origin ở backend.


4. Service Worker là gì? Ứng dụng trong PWA?

  • Service Worker là một script chạy ở background (không phụ thuộc UI), dùng để:

    • Cache nội dung offline

    • Push Notification

    • Background sync

📱 Ứng dụng trong PWA (Progressive Web App):

  • Cho phép ứng dụng web hoạt động offline như app gốc.

  • Tăng tốc độ tải nhờ cache thông minh.


5. Các kỹ thuật tối ưu hiệu suất JS trên trình duyệt:

  • Lazy loading: tải nội dung/ảnh chỉ khi cần (scroll tới).

  • Code splitting: chia nhỏ bundle để tải từng phần khi cần (webpack, vite).

  • Tree shaking: loại bỏ code không dùng đến.

  • Debounce/throttle: giới hạn tần suất gọi hàm.

  • Minify JS: dùng terser hoặc build tools để rút gọn mã.


6. Làm sao để debug hiệu quả trong JavaScript?

  • Console log: console.log(), console.error(), console.table()

  • Chrome DevTools:

    • Breakpoint trong tab Sources

    • Tab Network để kiểm tra API

    • Tab Performance để phân tích hiệu năng

  • Debugger statement:

function test() {
  debugger; // Tạm dừng khi mở DevTools
}

7. Làm sao để bảo vệ mã JavaScript khỏi bị xem source?

  • Không thể hoàn toàn bảo vệ vì JS chạy phía client.

Các kỹ thuật làm khó:

  • Obfuscation: làm rối mã (javascript-obfuscator, uglifyjs)

  • Minification: rút gọn tên biến, xoá khoảng trắng

  • Tách logic nhạy cảm sang backend (server-side)

📌 Gợi ý: Không nên đặt business logic, token, key bí mật trong frontend vì người dùng luôn có thể xem source.


Last updated