Web
น้องๆ เคยไหม? อยากใช้แอป แต่ขี้เกียจโหลด! สมัยผมทำร้านเน็ตนะ (SiamCafe) คนอยากเล่นเกมก็ต้องโหลดเกมลงเครื่องก่อนถึงจะเล่นได้ ยิ่งเกมใหญ่ๆ นี่รอกันเหงือกแห้ง
PWA เนี่ยแหละ คือทางออก! มันคือเว็บที่ "ฉลาด" ขึ้น ทำตัวเหมือนแอปได้เลย ไม่ต้องโหลด! เปิดใน Browser ได้เลย แถมยังทำงาน Offline ได้ด้วยนะ! สำคัญยังไง? สำคัญตรงที่ User Experience นี่แหละ! คนขี้เกียจโหลด ก็ใช้ PWA แทนไง!
Service Worker คือ "คนรับใช้" ประจำ PWA ของเรา มันทำงานอยู่เบื้องหลัง คอยจัดการ Cache, Push Notification และฟีเจอร์อื่นๆ ที่ทำให้ PWA ของเราฉลาดขึ้น
คิดง่ายๆ เหมือนตอนผมดูแลร้านเน็ต Service Worker ก็เหมือนเด็กเสิร์ฟ คอยจัดการทุกอย่างในร้าน ให้ลูกค้า (User) ได้รับประสบการณ์ที่ดีที่สุด
Manifest File คือ "ใบรับรอง" ของ PWA บอกว่า PWA ของเราชื่ออะไร ไอคอนเป็นยังไง เปิดแบบไหนได้บ้าง
สมัยผมทำร้านเน็ต Manifest File ก็เหมือนป้ายหน้าร้าน บอกว่าร้านเราชื่อ SiamCafe ขายอะไรบ้าง เปิดกี่โมง ปิดกี่โมง
ง่ายมาก! ถ้าเทียบกับสมัยก่อนที่ต้องลง Windows ใหม่ทุกเครื่อง PWA นี่แค่เขียนโค้ดเพิ่มนิดหน่อยเอง!
สร้างไฟล์ manifest.json แล้วใส่ข้อมูลพื้นฐานของ PWA ของเราลงไป
{
"name": "My Awesome PWA",
"short_name": "Awesome PWA",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#000000",
"icons": [
{
"src": "/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
อย่าลืมเปลี่ยน name, short_name, start_url และ icons ให้ตรงกับ PWA ของเรานะ
Register Service Worker ในไฟล์ JavaScript ของเรา
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/service-worker.js')
.then((registration) => {
console.log('Service Worker registered: ', registration);
})
.catch((error) => {
console.log('Service Worker registration failed: ', error);
});
});
}
โค้ดนี้จะเช็คว่า Browser รองรับ Service Worker ไหม ถ้ามีก็จะ Register Service Worker ของเรา
อยากอ่านบทความ Web ดีๆ อีกไหม? ลองแวะไปดูที่ SiamCafe Blog นะครับ
สร้างไฟล์ service-worker.js แล้วเขียนโค้ดเพื่อจัดการ Cache และฟีเจอร์อื่นๆ
const CACHE_NAME = 'my-pwa-cache-v1';
const urlsToCache = [
'/',
'/index.html',
'/style.css',
'/script.js',
'/icon-192x192.png',
'/icon-512x512.png'
];
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(CACHE_NAME)
.then((cache) => {
console.log('Opened cache');
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request)
.then((response) => {
if (response) {
return response;
}
return fetch(event.request);
})
);
});
โค้ดนี้จะ Cache ไฟล์ที่จำเป็นตอน Install และจะพยายามดึงไฟล์จาก Cache ก่อน ถ้าไม่มีค่อยไปดึงจาก Server
PWA ไม่ได้มีอยู่ตัวเดียวนะ ยังมี Native App และ Web App แบบเดิมๆ อีก แต่ละอย่างก็มีข้อดีข้อเสียต่างกัน
| คุณสมบัติ | Native App | Web App | PWA |
|---|---|---|---|
| ติดตั้ง | ต้องโหลดจาก App Store | ไม่ต้องติดตั้ง เปิดใน Browser | ไม่ต้องติดตั้ง เปิดใน Browser (Installable) |
| Offline | รองรับ Offline เต็มรูปแบบ | ไม่รองรับ Offline | รองรับ Offline (บางส่วน) |
| Push Notification | รองรับ | ไม่รองรับ | รองรับ |
| Performance | ดีที่สุด | ขึ้นอยู่กับ Browser | ดี (ใกล้เคียง Native App) |
| Development Cost | สูง | ปานกลาง | ปานกลาง |
Native App เหมาะกับแอปที่ต้องการ Performance สูงๆ และใช้ Feature ของเครื่องเต็มที่ แต่ PWA เหมาะกับแอปที่ต้องการเข้าถึงง่ายและทำงานได้บนทุก Platform
Web App แบบเดิมๆ ก็ยังใช้งานได้ แต่ PWA ให้ประสบการณ์ที่ดีกว่า เพราะทำงาน Offline ได้และ Installable ได้
ถ้าอยากรู้เรื่อง PWA เพิ่มเติม ลองค้นหาคำว่า "Progressive Web App" ใน SiamCafe Blog ดูนะครับ อาจจะมีบทความที่น้องๆ สนใจอยู่
เอาล่ะน้องๆ มาถึงส่วนสำคัญแล้ว สมัยผมทำร้านเน็ตคาเฟ่ SiamCafe เนี่ย บอกเลยว่า "ประสบการณ์" สำคัญกว่าตำราเยอะ! PWA ก็เหมือนกัน อ่านทฤษฎีอย่างเดียวไม่พอ ต้องลองผิดลองถูกกันไป
ผมจะเล่าจากประสบการณ์จริงที่เจอมา และสรุปเป็นเคล็ดลับง่ายๆ ให้เอาไปใช้กันได้เลย รับรองว่าช่วยให้การพัฒนา PWA ของน้องๆ ลื่นขึ้นเยอะ
สมัยก่อนเน็ตเต่า ใครโหลดเว็บช้าก็ปิดหนี! PWA ก็เหมือนกัน น้องๆ ต้องทำให้มันโหลดเร็วที่สุดเท่าที่จะทำได้ Optimize รูปภาพ ลดขนาด Javascript ใช้ Service Worker Cache ให้เป็นประโยชน์
ลองนึกภาพ ลูกค้ากำลังเล่นเกมออนไลน์อยู่ แล้ว PWA ที่น้องทำ โหลดช้า หน่วง กระตุก... จบเห่! เค้าไม่กลับมาใช้อีกแน่นอน
อย่าเทสแค่ในคอม! สมัยผมทำร้านเน็ต ต้องลองทุกเครื่อง ทุกสเปค PWA ก็เหมือนกัน น้องๆ ต้องทดสอบบนมือถือ แท็บเล็ต รุ่นเก่า รุ่นใหม่ Android iOS ให้ครบ
เคยเจอเคส ลูกค้าบ่นว่าเว็บแสดงผลเพี้ยนบนมือถือ Android รุ่นนึง เพราะ CSS มันดันไปตีกันกับ default style ของ browser นั่นแหละ! ต้องแก้กันหน้ามืด
นี่แหละคือจุดเด่นของ PWA! สมัยก่อนเน็ตหลุด ลูกค้าโวยวายทั้งร้าน! PWA ต้องทำงานได้แม้ไม่มีเน็ต น้องๆ ต้องออกแบบ Offline Mode ให้ดี ให้ผู้ใช้ยังสามารถใช้งานฟีเจอร์หลักๆ ได้
ลองคิดดู ลูกค้ากำลังอ่านข่าวอยู่บนรถไฟฟ้า แล้วเน็ตหลุด... ถ้า PWA น้องทำ Offline Mode ไว้ดี เค้าก็ยังอ่านข่าวต่อได้ ไม่เสียอารมณ์
สมัยนี้เรื่องความปลอดภัยสำคัญมากๆ PWA ต้องใช้ HTTPS เท่านั้น! และต้องระวังเรื่อง XSS, CSRF เหมือนเว็บทั่วไป
เคยเจอเคส Hacker มาเจาะระบบร้านเน็ต เอาข้อมูลลูกค้าไป! PWA ก็เหมือนกัน ถ้าไม่ระวังโดน Hack ขึ้นมา ความน่าเชื่อถือหายหมด
PWA เหมาะกับเว็บที่ต้องการให้ผู้ใช้เข้าถึงได้ง่าย ใช้งานได้แม้ไม่มีเน็ต และต้องการ Engagement สูงๆ เช่น เว็บข่าว เว็บ E-commerce แอพสำหรับงาน Event
PWA ไม่ต้องติดตั้ง ไม่ต้องผ่าน App Store/Play Store ใช้งานผ่าน Browser ได้เลย แต่ Native App เข้าถึง Hardware ได้มากกว่า และ Performance อาจจะดีกว่าในบางกรณี
ถ้าพื้นฐาน Web Development แน่น ก็ไม่ยากเกินไปหรอกน้อง! แต่ต้องศึกษาเรื่อง Service Worker, Cache API เพิ่มเติม
Service Worker คือ Javascript ที่ทำงานอยู่เบื้องหลัง Browser ทำหน้าที่จัดการ Cache และ Push Notifications
PWA อาจจะเข้าถึง Hardware ได้ไม่เท่า Native App และ Browser บางตัวอาจจะยังไม่รองรับ Feature บางอย่าง
PWA คืออนาคตของ Web Development! น้องๆ ต้องศึกษาและลองทำดู รับรองว่าไม่เสียเปล่า SiamCafe Blog มีบทความดีๆ เกี่ยวกับ Web Development เยอะแยะ ลองเข้าไปอ่านดูได้
PWA ไม่ใช่แค่เทรนด์ แต่เป็นเครื่องมือที่จะช่วยให้น้องๆ สร้างเว็บที่ User Friendly และตอบโจทย์ผู้ใช้มากขึ้น iCafeForex ก็ใช้ PWA ในการพัฒนาเว็บเหมือนกันนะ