
Progressive Web Application (PWA) là một loại ứng dụng web tiên tiến, được xây dựng bằng công nghệ web chuẩn (HTML, CSS, JavaScript) nhưng cung cấp trải nghiệm gần native: có thể cài đặt lên thiết bị, hoạt động ngoại tuyến, nhận push notification và thực thi trong cửa sổ riêng tách rời khỏi trình duyệt. PWA mang lại lợi thế phát triển một lần, chạy trên mọi nền tảng, đồng thời tiết kiệm chi phí so với phát triển ứng dụng native riêng cho Android và iOS.
Khái niệm cốt lõi
PWA được định hình bởi ba công nghệ nền tảng:
- Service Worker: Tập lệnh JavaScript chạy riêng trong background, làm proxy lập trình có thể can thiệp vào yêu cầu mạng, lưu trữ nội dung và đồng bộ dữ liệu.
- Web App Manifest: Tệp JSON mô tả tên, biểu tượng, màu chủ đề và cách hiển thị ứng dụng khi cài đặt (fullscreen, standalone).
- HTTPS: Bắt buộc để bảo mật kết nối, vì service worker có khả năng can thiệp vào yêu cầu mạng.

Service Worker là gì?
Service worker là một loại web worker, tức là tập lệnh JavaScript chạy trong luồng riêng, không chặn giao diện người dùng. Nó đi kèm với khả năng can thiệp vào các yêu cầu HTTP/HTTPS, cho phép:
- Đọc và ghi vào bộ nhớ cache (Cache Storage API)
- Chặn, sửa đổi hoặc tạo mới phản hồi mạng
- Đăng ký và xử lý sự kiện push
- Đồng bộ dữ liệu nền (Background Sync)
- Chuyển đổi ứng dụng sang ngoại tuyến khi mất kết nối
Vòng đời service worker bao gồm ba giai đoạn: đăng ký (registration), cài đặt (installation) và kích hoạt (activation). Khi trang web được tải, trình duyệt sẽ tìm tệp service worker được chỉ định trong manifest và thực hiện đăng ký. Khi đăng ký thành công, service worker sẽ được cài đặt — trong giai đoạn này, nó thường mở rộng bộ nhớ cache trước với các tài nguyên tĩnh cần thiết. Sau khi cài đặt và khi không còn trang nào điều khiển nó (tất cả các tab đã đóng), service worker sẽ được kích hoạt và bắt đầu lắng nghe sự kiện.
Web App Manifest – manifest.json
Manifest là tệp JSON khai báo siêu dữ liệu về ứng dụng khi được cài đặt. Các trường quan trọng bao gồm:
{
"name": "Tên ứng dụng",
"short_name": "Tên hiển thị dưới biểu tượng",
"description": "Mô tả ngắn",
"start_url": "URL mở đầu khi khởi động",
"display": "standalone | fullscreen | minimal-ui | browser",
"background_color": "#ffffff",
"theme_color": "#000000",
"icons": [
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
]
}
Thuộc tính display quyết định giao diện hiển thị: standalone mô phỏng app native (không thấy thanh địa chỉ trình duyệt); fullscreen chiếm toàn màn hình; còn browser giữ nguyên giao diện trang web.

Ảnh chụp màn hình minh họa PWA chạy ở chế độ fullscreen trên điện thoại, trông như một ứng dụng native thật.
Lợi ích của PWA so với ứng dụng web truyền thống và native
| Tiêu chí | PWA | Web truyền thống | Ứng dụng native |
|---|---|---|---|
| Cài đặt | Một lần từ trình duyệt | Không | Từ App Store / Google Play |
| Ngoại tuyến | Hoạt động với cache | Không | Có |
| Push notification | Có (service worker) | Không | Có |
| Cập nhật tự động | Luôn lấy phiên bản mới nhất khi tải lại | Luôn mới nhất | Cần phiên bản mới từ store |
| Tài nguyên thiết bị | GPS, camera, microphone (qua API) | Không | Có đầy đủ |
| Phát triển | HTML/CSS/JS một lần | HTML/CSS/JS | Java/Kotlin (Android), Swift/Objective-C (iOS) |
| Kích thước | Nhỏ (chỉ cần manifest và service worker) | Nhỏ | Đến hàng chục đến trăm MB |
Hỗ trợ trên các trình duyệt chính
Nhờ sự cam kết của Google, Microsoft và Mozilla, PWA hiện được hỗ trợ tốt trên hầu hết các trình duyệt hiện đại:
- Chrome & Edge: Đầy đủ tính năng kể cả trên desktop (Windows, macOS, Linux, ChromeOS).
- Safari: Hỗ trợ PWA trên iOS và macOS từ phiên bản 11.3, bao gồm service worker và manifest (từ iOS 16.4 bắt đầu cho phép push notification trên desktop).
- Firefox: Hỗ trợ tốt trên Android; trên desktop Firefox đã tạm ngừng phát triển PWA (2020) nhưng từ Firefox 143.0 (tháng 9/2025) đã thêm hỗ trợ trên Windows.
- Opera: Tương tự Chromium.
Để kiểm tra tính năng PWA trong trình duyệt của bạn, truy cập Can I use và tìm “Service Workers”.
Ví dụ thực tế của PWA thành công
- Twitter Lite: Phiên bản nhẹ của Twitter, giảm sử dụng dữ liệu 70%, tăng tương tác người dùng.
- Starbucks: Hệ thống đặt món trực tuyến hoạt động mà không cần kết nối ổn định.
- Pinterest: Tăng thời gian tham gia 40% sau khi triển khai PWA.
- Uber: Ứng dụng web đặt xe cho khu vực có mạng yếu.
- Forbes: Tăng tốc tải trang từ 12 giây xuống dưới 2 giây.
Các rủi ro và hạn chế cần biết
- Tích hợp sâu với hệ thống: Truy cập vào một số tính năng phần cứng (NFC, Bluetooth Low Energy) vẫn còn hạn chế trên một số trình duyệt.
- Phân mảnh iOS: Trên iOS một số tính năng như background sync và push notification có thể không khả dụng hoặc khác biệt giữa các phiên bản.
- Không thể thay thế hoàn toàn native: Đối với ứng dụng đòi hỏi hiệu suất đồ họa cao (game 3D) hoặc truy cập sâu vào hệ thống, native vẫn là lựa chọn tốt nhất.
- Cập nhật background: Một số nền tảng không cho phép service worker chạy liên tục khi ứng dụng không được mở.
Bắt đầu với PWA
Nếu bạn đã có một ứng dụng web hiện đại, việc chuyển sang PWA chỉ cần thêm hai tệp:
- manifest.json – khai báo siêu dữ liệu như trên.
- service-worker.js – ít nhất là logic cache cơ bản.
Một số công cụ hỗ trợ tự động hóa:
- Workbox (Google): Thư viện JavaScript giúp tạo chiến lược cache nâng cao.
- Angular PWA: Angular CLI có sẵn lệnh
ng add @angular/pwa. - Create React App: Đã tích hợp PWA từ bản 2.0.0.
- Vue CLI: Thêm plugin
vue-cli-plugin-pwa.
Kết luận
Progressive Web App không phải là một xu hướng tạm thời, mà là một bước tiến logic trong phát triển ứng dụng web. Khi các trình duyệt ngày càng mạnh mẽ và các API web tiếp tục mở rộng, sự chênh lệch giữa trải nghiệm web và native sẽ ngày càng thu hẹp. PWA mang lại giá trị kinh tế rõ ràng: phát triển một lần, triển khai trên mọi nền tảng, giảm chi phí duy trì và mở rộng phạm vi người dùng tới những người có kết nối mạng không ổn định. Nếu bạn đang xây dựng một ứng dụng web hiện đại — bao gồm blog, thương mại điện tử, công cụ nội bộ — hãy cân nhắc nâng cấp lên PWA để mang lại trải nghiệm tốt nhất cho người dùng mà không cần đầu tư kép cho các bản dùng riêng trên Android và iOS.
Nguồn: web.dev PWA guide, MDN Web Docs, W3C Manifest for Web Application, Wikipedia
