วิธีเพิ่มประสิทธิภาพเว็บแอปแบบโปรเกรสซีฟ: ก้าวไปไกลกว่าพื้นฐาน

เผยแพร่แล้ว: 2022-03-10
สรุปโดยย่อ ↬ เว็บแอปพลิเคชันแบบก้าวหน้าได้รับการพิสูจน์แล้วว่าช่วยเพิ่มการมีส่วนร่วมของผู้ใช้และลดต้นทุนได้อย่างมีประสิทธิภาพ การสร้าง PWA ที่ทันสมัยนั้นต้องการมากกว่าแค่การตั้งค่าหลักเพื่อให้ทันกับความคาดหวังของผู้ใช้ ดังนั้น มาดูโดยตรงเกี่ยวกับการเพิ่มคุณลักษณะร่วมสมัยให้กับ PWA ตั้งแต่การทำงานแบบออฟไลน์ไปจนถึงคำขออนุญาตที่เป็นมิตรกับผู้ใช้

เว็บแอปพลิเคชันโปรเกรสซีฟ (PWA) ยังคงได้รับความนิยมในปี 2020 ไม่น่าแปลกใจเลยเมื่อพิจารณาถึงประโยชน์ของอัตรา Conversion ที่สูงขึ้น การมีส่วนร่วมกับลูกค้า ความเร็วในการโหลดหน้าเว็บที่ลดลง และต้นทุนในการพัฒนาและค่าใช้จ่ายที่ลดลง

เราสามารถเห็นบริษัทที่เคารพนับถือยังประสบความสำเร็จกับ PWA ของพวกเขา เช่น Twitter, Uber, Tinder, Pinterest และ Forbes และพวกเขาทั้งหมดโอ้อวดเกี่ยวกับประโยชน์มหาศาลจากการใช้แอพโปรเกรสซีฟ

ข่าวดีก็คือการพัฒนา กปภ. ไม่ใช่สิ่งที่มีเพียงบริษัทที่มีงบประมาณสูงเท่านั้นที่สามารถจ่ายได้ แอปพลิเคชันเหล่านี้ให้บริการธุรกิจขนาดเล็กและขนาดกลางอย่างเท่าเทียมกัน และไม่ซับซ้อนในการสร้าง

คุณสามารถหาคู่มือสำหรับผู้เริ่มต้นใช้งานเว็บแอปแบบก้าวหน้าแบบครอบคลุมได้ที่ Smashing Magazine ซึ่งเน้นที่การสร้างแกนหลักของ PWA

อย่างไรก็ตาม มาต่ออีกขั้นและเรียนรู้วิธีปรับใช้คุณสมบัติที่ทันสมัยกับ PWA เช่น ฟังก์ชันออฟไลน์ การเพิ่มประสิทธิภาพตามเครือข่าย ประสบการณ์ผู้ใช้ข้ามอุปกรณ์ ความสามารถ SEO และการแจ้งเตือนและคำขอที่ไม่ล่วงล้ำ คุณยังจะพบโค้ดตัวอย่างหรือการอ้างอิงถึงคำแนะนำที่เจาะจงมากขึ้น เพื่อให้คุณสามารถนำคำแนะนำเหล่านี้ไปใช้กับการประปาส่วนภูมิภาคของคุณได้

ภาพรวมโดยย่อของ Progressive Web Applications (PWA)

อย่าข้ามพื้นฐานและข้ามไปที่หัวใจของ กปภ.

กปภ. คืออะไร?

“Progressive Web Apps (PWA) ถูกสร้างและปรับปรุงด้วย API ที่ทันสมัยเพื่อมอบความสามารถ ความน่าเชื่อถือ และความสามารถในการติดตั้งที่ได้รับการปรับปรุง ในขณะที่เข้าถึงใครก็ได้ ทุกที่ บนอุปกรณ์ใดก็ได้ด้วยฐานรหัสเดียว”

— นักพัฒนาของ Google

กล่าวอีกนัยหนึ่ง PWAs คือเว็บไซต์ที่ผู้ใช้สามารถใช้เป็นแอปพลิเคชันแบบสแตนด์อโลนได้ ต่างจากแอปเนทีฟส่วนใหญ่เนื่องจาก PWA ไม่จำเป็นต้องติดตั้งและสามารถใช้กับอุปกรณ์ต่างๆ ได้ แอปที่มาพร้อมเครื่องนั้นสร้างมาเพื่ออุปกรณ์มือถือเป็นหลัก

กปภ. ทำงานอย่างไร?

แกนหลักของ PWA ประกอบด้วยสามองค์ประกอบ: รายการแอปบนเว็บ พนักงานบริการ และเปลือกแอปพลิเคชัน คุณสามารถดูคำแนะนำโดยละเอียดสำหรับการสร้างสิ่งเหล่านี้ได้ในคู่มือสำหรับผู้เริ่มต้นใช้งานที่กล่าวถึงข้างต้น

นี่คือสิ่งที่ส่วนประกอบเหล่านี้ทำ

รายการแอปบนเว็บ

รายการเว็บแอปเป็นแกนหลักในการทำให้เว็บไซต์ทำงานเป็นแอปพลิเคชันแบบสแตนด์อโลนในโหมดเต็มหน้าจอ คุณสามารถกำหนดรูปลักษณ์ของ PWA ปรับให้เหมาะสมสำหรับอุปกรณ์ต่างๆ และกำหนดไอคอนที่แสดงหลังจากการติดตั้งแอปพลิเคชัน

พนักงานบริการ

เจ้าหน้าที่ให้บริการเปิดใช้งานการใช้งานออฟไลน์ของ PWA โดยการดึงข้อมูลแคชหรือแจ้งผู้ใช้เกี่ยวกับการขาดการเชื่อมต่ออินเทอร์เน็ต พนักงานบริการยังดึงข้อมูลล่าสุดเมื่อมีการคืนค่าการเชื่อมต่อเซิร์ฟเวอร์

สถาปัตยกรรมเปลือกแอปพลิเคชัน

เปลือกแอปพลิเคชันคือสิ่งที่ผู้ใช้เห็นเมื่อเข้าถึงการประปาส่วนภูมิภาค เป็น HTML ขั้นต่ำ CSS และ JavaScript ที่จำเป็นในการขับเคลื่อนส่วนต่อประสานผู้ใช้ เมื่อพัฒนา PWA คุณสามารถแคชทรัพยากรและทรัพย์สินของเปลือกแอปพลิเคชันในเบราว์เซอร์ได้

เพิ่มเติมหลังกระโดด! อ่านต่อด้านล่าง↓

การนำคุณลักษณะสมัยใหม่ไปใช้กับ PWA . ของคุณ

นอกเหนือจากคุณสมบัติหลักแล้ว PWAs ที่ทันสมัยยังมีคุณลักษณะเพิ่มเติมที่ช่วยขับเคลื่อนผู้ใช้ไปสู่ประสบการณ์ผู้ใช้ที่พิเศษยิ่งขึ้น

มาดูลักษณะเฉพาะที่ทันสมัยบางประการของ กปภ. และเรียนรู้เกี่ยวกับการเพิ่มสิ่งเหล่านี้ใน กปภ. คุณสมบัติต่อไปนี้ถือเป็นส่วนเสริมที่ยอดเยี่ยมใน PWA ขั้นพื้นฐานโดยนักพัฒนา Google

แอปพลิเคชันทำงานแบบออฟไลน์เหมือนออนไลน์

เมื่อสร้าง PWA คุณยังสามารถพัฒนาเพจออฟไลน์ที่กำหนดเองซึ่งเป็นส่วนหนึ่งของแกนหลักได้ อย่างไรก็ตาม จะเป็นมิตรต่อผู้ใช้มากกว่ามาก หาก PWA ของคุณยังคงทำงานแม้ไม่มีการเชื่อมต่ออินเทอร์เน็ต จนถึงจุดที่จำเป็นต้องมีการเชื่อมต่อ มิฉะนั้น ประสบการณ์ของผู้ใช้อาจน่าหงุดหงิดพอๆ กับการทดสอบของ Ankita Masand ในการสั่งซื้อเค้ก ตามที่เธออธิบายในบทความเกี่ยวกับจุดบอดของ กปปส.

คุณสามารถบรรลุประสบการณ์ผู้ใช้ที่สำคัญยิ่งขึ้นโดยใช้เนื้อหาที่แคช การซิงค์พื้นหลัง และหน้าจอโครงกระดูก มาดูทีละอย่างกัน

เนื้อหาแคชด้วย IndexedDB

IndexedDB คือระบบจัดเก็บข้อมูล NoSQL ในเบราว์เซอร์ที่คุณสามารถใช้เพื่อแคชและดึงข้อมูลที่จำเป็นเพื่อให้ PWA ของคุณทำงานแบบออฟไลน์ได้

อย่างไรก็ตาม ไม่ใช่ทุกเบราว์เซอร์ที่รองรับ IndexedDB ดังนั้นสิ่งแรกที่คุณต้องทำคือตรวจสอบว่าเบราว์เซอร์ของผู้ใช้รองรับหรือไม่

 if (!('indexedDB' in window)) { console.log('This browser doesn\'t support IndexedDB'); return; }

หลังจากนี้ คุณสามารถสร้างเนื้อหาแคชด้วย IndexedDB API นี่คือตัวอย่างจากนักพัฒนา Google ในการเปิดฐานข้อมูล การเพิ่มที่เก็บอ็อบเจ็กต์ และเพิ่มรายการในสโตร์นี้

 var db; var openRequest = indexedDB.open('test_db', 1); openRequest.onupgradeneeded = function(e) { var db = e.target.result; console.log('running onupgradeneeded'); if (!db.objectStoreNames.contains('store')) { var storeOS = db.createObjectStore('store', {keyPath: 'name'}); } }; openRequest.onsuccess = function(e) { console.log('running onsuccess'); db = e.target.result; addItem(); }; openRequest.onerror = function(e) { console.log('onerror!'); console.dir(e); }; function addItem() { var transaction = db.transaction(['store'], 'readwrite'); var store = transaction.objectStore('store'); var item = { name: 'banana', price: '$2.99', description: 'It is a purple banana!', created: new Date().getTime() }; var request = store.add(item); request.onerror = function(e) { console.log('Error', e.target.error.name); }; request.onsuccess = function(e) { console.log('Woot! Did it'); }; }

ซิงค์พื้นหลัง

หาก PWA ของคุณซิงค์ข้อมูลในเบื้องหลัง ผู้ใช้สามารถดำเนินการขณะออฟไลน์ ซึ่งจะดำเนินการเมื่อการเชื่อมต่ออินเทอร์เน็ตกู้คืน ตัวอย่างง่ายๆคือแอปส่งข้อความ ผู้ใช้สามารถส่งข้อความขณะออฟไลน์โดยไม่จำเป็นต้องรอจนกว่าจะมีการส่ง การซิงค์ในพื้นหลังจะส่งข้อความโดยอัตโนมัติเมื่อการเชื่อมต่อกลับคืนมา

ต่อไปนี้คือตัวอย่างวิธีพัฒนาคุณลักษณะการซิงค์พื้นหลังโดย Jake Archibald

 // Register your service worker: navigator.serviceWorker.register('/sw.js'); // Then later, request a one-off sync: navigator.serviceWorker.ready.then(function(swRegistration) { return swRegistration.sync.register('myFirstSync'); });

จากนั้นฟังเหตุการณ์ใน /sw.js :

 self.addEventListener('sync', function(event) { if (event.tag == 'myFirstSync') { event.waitUntil(doSomeStuff()); } });

หน้าจอโครงกระดูก

ข้อดีอย่างหนึ่งของการใช้หน้าจอโครงกระดูกคือ ผู้ใช้รับรู้ว่าแอปพลิเคชันทำงานมากกว่าการนั่งเฉยๆ แม้ว่าผู้ใช้จะไม่มีการเชื่อมต่อ แต่หน้าจอโครงกระดูกจะดึงอินเทอร์เฟซออกโดยไม่มีเนื้อหา ซึ่งจะเติมเต็มเมื่อการเชื่อมต่อกลับคืนมา

Code My UI มีตัวอย่างโค้ดที่ยอดเยี่ยมให้คุณใช้สร้างหน้าจอโครงร่างสำหรับ PWA ของคุณได้

ตัวอย่างหน้าจอโครงกระดูกใน Code My UI
ตัวอย่างหน้าจอโครงกระดูกใน Code My UI (ตัวอย่างขนาดใหญ่)

การเพิ่มประสิทธิภาพตามการใช้งานเครือข่าย

ประโยชน์หลักของการประปาส่วนภูมิภาคคือการมอบประสบการณ์การใช้งานที่รวดเร็วยิ่งขึ้นแก่ผู้ใช้ คุณสามารถปรับความเร็วในการโหลดให้เหมาะสมเพิ่มเติมโดยให้ PWA ใช้เครือข่ายที่เน้นแคช จัดลำดับความสำคัญของทรัพยากร และใช้การโหลดแบบปรับได้ตามคุณภาพเครือข่าย

มาดูกันว่าคุณจะพัฒนาสิ่งเหล่านี้ให้ กปภ. ได้อย่างไร

แคชก่อนแล้วจึงเครือข่าย

การใช้เนื้อหาที่แคชก่อนทำให้ PWA ของคุณทำงานแบบออฟไลน์ได้ และปูทางให้ผู้ใช้เข้าถึงเนื้อหาได้แม้ในพื้นที่ครอบคลุมเครือข่ายต่ำ คุณสามารถทำได้โดยสร้างพนักงานบริการเพื่อแคชเนื้อหาแล้วดึงข้อมูล

นี่คือตัวอย่างจาก Jeff Posnick เกี่ยวกับการแคช HTML แบบคงที่โดยใช้พนักงานบริการ

 self.addEventListener('fetch', event => { if (event.request.mode === 'navigate') { // See /web/fundamentals/getting-started/primers/async-functions // for an async/await primer. event.respondWith(async function() { // Optional: Normalize the incoming URL by removing query parameters. // Instead of https://example.com/page?key=value, // use https://example.com/page when reading and writing to the cache. // For static HTML documents, it's unlikely your query parameters will // affect the HTML returned. But if you do use query parameters that // uniquely determine your HTML, modify this code to retain them. const normalizedUrl = new URL(event.request.url); normalizedUrl.search = ''; // Create promises for both the network response, // and a copy of the response that can be used in the cache. const fetchResponseP = fetch(normalizedUrl); const fetchResponseCloneP = fetchResponseP.then(r => r.clone()); // event.waitUntil() ensures that the service worker is kept alive // long enough to complete the cache update. event.waitUntil(async function() { const cache = await caches.open('my-cache-name'); await cache.put(normalizedUrl, await fetchResponseCloneP); }()); // Prefer the cached response, falling back to the fetch response. return (await caches.match(normalizedUrl)) || fetchResponseP; }()); } });

จัดลำดับความสำคัญของทรัพยากร

ตามค่าเริ่มต้น PWA จะมีประสิทธิภาพมากกว่าแอปที่มาพร้อมเครื่องที่คล้ายคลึงกันเนื่องจากมีลักษณะเป็น Lite นอกจากนี้ เนื่องจาก PWAs ใช้แคชของเบราว์เซอร์ จึงเป็นไปได้ที่จะระบุว่าทรัพยากรใดมีความสำคัญและจำเป็นต้องแสดงผลก่อนที่จะถูกใช้ วิธีนี้ใช้งานได้กับองค์ประกอบแบบคงที่เป็นหลัก เนื่องจากเนื้อหาแบบไดนามิกจำเป็นต้องอัปเดตก่อนที่จะดึงข้อมูล

คุณสามารถระบุลำดับความสำคัญขององค์ประกอบโดยใช้สตริง <link> ใน HTML คุณยังสามารถระบุไฟล์เซิร์ฟเวอร์ของบริษัทอื่นได้โดยใช้ rel=”preconnect” และ rel=”dns-prefetch.”

Maximiliano Firtman ให้ตัวอย่างง่ายๆ โดยการจัดลำดับความสำคัญของเว็บฟอนต์ภายในเอ็นจิ้นของเบราว์เซอร์:

 <link rel=”preload” as=”font” href=”font.woff” crossorigin>

กำลังดำเนินการโหลดแบบปรับได้

ความเร็วอินเทอร์เน็ตของ WiFi และ 4G ไม่สามารถเข้าถึงได้ทุกที่ และผู้ใช้ยังคงใช้อินเทอร์เน็ตด้วยการเชื่อมต่อ 2G และ 3G เนื่องจากคุณต้องการให้ผู้คนจำนวนมากสามารถเข้าถึง PWA ของคุณได้ คุณอาจต้องการเพิ่มประสิทธิภาพ PWA ให้ทำงานด้วยความเร็วอินเทอร์เน็ตที่ต่ำลงเช่นกัน

คุณสามารถทำสิ่งนี้ได้โดยใช้การโหลดแบบปรับได้ ซึ่งจะโหลดองค์ประกอบ PWAs ตามประเภทการเชื่อมต่อที่ผู้ใช้มี

ภาพประกอบการโหลดแบบปรับได้โดย Google
ภาพประกอบการโหลดแบบปรับได้โดย Google (ตัวอย่างขนาดใหญ่)

วิธีที่ง่ายที่สุดคือการใช้เครื่องมือ Workbox ของ Google ซึ่งรวมถึงปลั๊กอินสำเร็จรูปจำนวนมากสำหรับกลยุทธ์การแคช

สมมติว่าคุณต้องการกำหนดกลยุทธ์การแคชแบบกำหนดเอง นี่คือวิธีที่คุณสามารถทำได้เป็นตัวอย่างจาก Demian Renzulli และ Jeff Posnick:

 const adaptiveLoadingPlugin = { requestWillFetch: async ({request}) => { const urlParts = request.url.split('/'); let imageQuality; switch ( navigator && navigator.connection ? navigator.connection.effectiveType : '' ) { //... case '3g': imageQuality = 'q_30'; break; //... } const newUrl = urlParts .splice(urlParts.length - 1, 0, imageQuality) .join('/') .replace('.jpg', '.png'); const newRequest = new Request(newUrl.href, {headers: request.headers}); return newRequest; }, };

ถัดไป ส่งปลั๊กอินไปที่กลยุทธ์ cacheFirst ที่มีนิพจน์ทั่วไปเพื่อจับคู่ URL รูปภาพ (เช่น /img/ ):

 workbox.routing.registerRoute( new RegExp('/img/'), workbox.strategies.cacheFirst({ cacheName: 'images', plugins: [ adaptiveLoadingPlugin, workbox.expiration.Plugin({ maxEntries: 50, purgeOnQuotaError: true, }), ], }), );

ประสบการณ์ผู้ใช้ที่ยอดเยี่ยมบนทุกแพลตฟอร์ม

PWA ที่ยอดเยี่ยมทำงานได้อย่างราบรื่นบนเบราว์เซอร์ มือถือ และแท็บเล็ต แม้ว่าการใช้อุปกรณ์ Android จะเป็นวิธีที่ได้รับความนิยมมากที่สุด (ด้วยส่วนแบ่งตลาด 38.9%) ในการเข้าถึงอินเทอร์เน็ต การเพิ่มประสิทธิภาพแอปพลิเคชันของคุณสำหรับแพลตฟอร์มทั้งหมดเป็นส่วนหนึ่งของการพัฒนาฟังก์ชันหลักของ PWAs

คุณสามารถดำเนินการขั้นตอนเพิ่มเติมเพื่อเพิ่มความสามารถในการใช้งานและนำเสนอประสบการณ์การใช้งานที่ยอดเยี่ยมแก่ผู้ใช้ เช่น ลดความกระวนกระวายใจเมื่อโหลด PWA ของคุณ และทำให้แน่ใจว่า PWA ของคุณทำงานกับวิธีการป้อนข้อมูลใดๆ

ต่อไปนี้คือวิธีที่คุณจะเข้าถึงแต่ละแง่มุมเหล่านั้นได้

ลดการโหลดเนื้อหาที่ "กระตุก"

แม้แต่กับอินเทอร์เน็ตความเร็วสูง เนื้อหาของไซต์สามารถเปลี่ยนแปลงได้ในขณะโหลด เนื่องจากองค์ประกอบของไซต์โหลดตามลำดับ ผลกระทบนี้จะยิ่งแย่ลงด้วยความเร็วการเชื่อมต่อที่ช้าลงและส่งผลเสียต่อประสบการณ์ของผู้ใช้

องค์ประกอบที่พบบ่อยที่สุดที่ทำให้เนื้อหาเปลี่ยนไปขณะโหลดคือรูปภาพ เนื่องจากโดยทั่วไปแล้วจะมีขนาดใหญ่กว่าและไม่สำคัญเมื่อโหลดเนื้อหา คุณสามารถแก้ไขปัญหานี้ด้วย "การโหลดแบบ Lazy Loading" โดยใช้รูปภาพตัวยึดตำแหน่งที่มีขนาดเล็กลง ซึ่งคุณสามารถจัดลำดับความสำคัญได้หลังจากแสดงผลโครงสร้าง HTML แล้ว

ต่อไปนี้คือตัวอย่างโดยนักพัฒนาของ Mozilla เกี่ยวกับวิธีที่คุณสามารถเพิ่มรูปภาพที่มีน้ำหนักเบาซึ่งโหลดไว้ก่อนรูปภาพจริงใน JavaScript:

 <img src='data/img/placeholder.png' data-src='data/img/SLUG.jpg' alt='NAME'>

ไฟล์ app.js ประมวลผลแอตทริบิวต์ data-src ดังนี้:

 let imagesToLoad = document.querySelectorAll('img[data-src]'); const loadImages = (image) => { image.setAttribute('src', image.getAttribute('data-src')); image.onload = () => { image.removeAttribute('data-src'); }; };

แล้วสร้างลูป:

 imagesToLoad.forEach((img) => { loadImages(img); });

คุณยังสามารถดูคำแนะนำอย่างละเอียดเกี่ยวกับ Smashing Magazine เกี่ยวกับการลดการกระโดดข้ามเนื้อหาด้วยองค์ประกอบอื่นๆ ได้อีกด้วย

กปภ. ใช้ได้กับทุกวิธีการป้อนข้อมูล

เราได้กล่าวถึงว่าการประปาส่วนภูมิภาคควรทำงานกับอุปกรณ์ต่างๆ ได้อย่างไร ในการก้าวไปอีกขั้น คุณจะต้องคำนึงถึงวิธีการป้อนข้อมูลอื่นๆ ที่ผู้ใช้สามารถใช้ได้บนอุปกรณ์เหล่านี้ เช่น ระบบสัมผัส เมาส์ และสไตลัส

การเพิ่ม Pointer Events API ให้กับ PWA จะช่วยแก้ปัญหานี้ได้ นี่คือวิธีที่คุณสามารถเข้าถึงได้ตามนักพัฒนาของ Google

ก่อนอื่น ให้ตรวจสอบว่าเบราว์เซอร์รองรับเหตุการณ์ตัวชี้หรือไม่:

 if (window.PointerEvent) { // Yay, we can use pointer events! } else { // Back to mouse and touch events, I guess. }

ถัดไป คุณสามารถกำหนดการดำเนินการที่วิธีการป้อนข้อมูลต่างๆ สามารถทำได้:

 switch(ev.pointerType) { case 'mouse': // Do nothing. break; case 'touch': // Allow drag gesture. break; case 'pen': // Also allow drag gesture. break; default: // Getting an empty string means the browser doesn't know // what device type it is. Let's assume mouse and do nothing. break; }

เนื่องจากเบราว์เซอร์ส่วนใหญ่มีคุณลักษณะที่เปิดใช้งานระบบสัมผัสอยู่แล้ว คุณจึงไม่จำเป็นต้องเพิ่มอะไรอีก

ค้นพบได้ผ่านการค้นหา

ประโยชน์หลักประการหนึ่งของ กปภ. เหนือแอปพลิเคชันดั้งเดิมคือ การประปาส่วนภูมิภาคเป็นเว็บไซต์โดยธรรมชาติและเครื่องมือค้นหาสามารถจัดทำดัชนีได้ วิธีนี้ช่วยให้คุณปรับใช้กลยุทธ์ SEO เพื่อทำให้เนื้อหา PWA ของคุณถูกค้นพบได้มากขึ้น

คุณสามารถเริ่มต้นด้วยการทำให้มั่นใจว่าแต่ละ URL ใน PWA ของคุณมีชื่อที่สื่อความหมายและคำอธิบายเมตาที่ไม่ซ้ำกัน ซึ่งเป็นพื้นฐานของกิจกรรมการเพิ่มประสิทธิภาพ SEO ใดๆ

มาดูขั้นตอนอื่นๆ ที่คุณสามารถทำได้เพื่อให้ PWA ของคุณค้นหาได้

วิเคราะห์ความสามารถในการค้นหา PWA . ของคุณ

Google มีเครื่องมือที่ยอดเยี่ยมใน Search Console ที่วิเคราะห์ไซต์ของคุณ (PWA) และรายงานผลลัพธ์ คุณสามารถใช้เพื่อเรียกใช้การสแกนไซต์ของคุณแบบพื้นฐานและค้นพบจุดอ่อนใดๆ ที่คุณสามารถเริ่มแก้ไขได้

หรือคุณสามารถใช้ Lighthouse ในเบราว์เซอร์ Chrome เพื่อเรียกใช้การตรวจสอบ SEO

ขั้นแรก ไปที่ URL เป้าหมาย จากนั้นกด Control+Shift+J (หรือ Command+Option+J บน Mac) เพื่อเปิดเมนูเครื่องมือของนักพัฒนา เลือกแท็บ Lighthouse ทำเครื่องหมายในช่องหมวดหมู่ SEO และสร้างรายงาน

เบราว์เซอร์ Google Chrome เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ประเภทภาพหน้าจอ SEO
เบราว์เซอร์ Google Chrome เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ประเภทภาพหน้าจอ SEO (ตัวอย่างขนาดใหญ่)

ใช้ข้อมูลที่มีโครงสร้าง

เครื่องมือค้นหาของ Google ใช้ข้อมูลที่มีโครงสร้างเพื่อทำความเข้าใจวัตถุประสงค์ของเนื้อหาบนหน้าเว็บของคุณ

ข้อมูลที่มีโครงสร้างเป็นรูปแบบมาตรฐานสำหรับการให้ข้อมูลเกี่ยวกับหน้าและการจัดประเภทเนื้อหาของหน้า ตัวอย่างเช่น ในหน้าสูตรอาหาร ส่วนผสมคืออะไร เวลาและอุณหภูมิในการปรุงอาหาร แคลอรี่ และอื่นๆ
- Google

ก่อนที่คุณจะเริ่มเขียนโค้ด Google ยังได้รวบรวมรายการข้อผิดพลาดทั่วไปของข้อมูลที่มีโครงสร้างและหลักเกณฑ์ที่เกี่ยวข้องเพื่อแก้ไข การศึกษาเนื้อหานี้ควรให้พื้นฐานที่ดีเกี่ยวกับสิ่งที่ควรหลีกเลี่ยง

Frederick O'Brien ได้เขียนคำแนะนำที่ยอดเยี่ยมเกี่ยวกับ Smashing Magazine, Baking Structured Data Into The Design Process ซึ่งอธิบายวิธีสร้างข้อมูลที่มีโครงสร้างตั้งแต่เริ่มต้น

การแจ้งเตือนและคำขออนุญาตที่ใช้งานง่าย

สุดท้ายแต่ไม่ท้ายสุด คุณสามารถเพิ่มประสบการณ์ผู้ใช้โดยเพิ่มประสิทธิภาพการแจ้งเตือนและคำขอสิทธิ์ เพื่อให้ให้บริการแก่ผู้ใช้ของคุณ แทนที่จะสร้างความสับสนและน่ารำคาญ

แม้ว่าโดยทั่วไปแล้วคุณสามารถใช้สามัญสำนึกได้ แต่ก็มีเคล็ดลับที่นำไปใช้ได้จริงเช่นกัน เช่น การสร้างข้อความ Push ที่ไม่ล่วงล้ำ และให้ตัวเลือกแก่ผู้ใช้ในการยกเลิกรับข้อความ

คำขออนุญาตที่ละเอียดอ่อนสำหรับการสื่อสาร

มีสองวิธีที่ทันสมัยในการสื่อสารอัตโนมัติระหว่างเว็บไซต์และผู้ใช้ — แชทบอทและการแจ้งเตือน

ในบริบทของ PWAs ข้อดีหลักของแชทบอทคือไม่ต้องได้รับอนุญาตจากผู้ใช้ในการโต้ตอบกับผู้ใช้ อย่างไรก็ตาม ขึ้นอยู่กับแอปพลิเคชันแชทบอทที่คุณใช้ ผู้ใช้อาจพลาดข้อความที่ละเอียดอ่อน ในทางกลับกัน การแจ้งเตือนต้องได้รับอนุญาตจากผู้ใช้ แต่มองเห็นได้ชัดเจนกว่ามาก

เนื่องจากคุณสามารถเพิ่มแชทบอทเป็นแอปพลิเคชันบุคคลที่สามที่แยกจากกัน ให้เน้นที่การสร้างการแจ้งเตือนแบบพุชที่ใช้งานง่าย ในกรณีที่คุณต้องการคำแนะนำเกี่ยวกับวิธีสร้างการแจ้งเตือนแบบพุชในตอนแรก Indrek Lasn มีคำแนะนำที่ดี

วิธีที่ตรงไปตรงมาที่สุดในการสร้างคำขอสิทธิ์ที่ไม่ล่วงล้ำคือการใช้คำขอสองครั้ง ซึ่งหมายความว่าคุณใส่การโต้ตอบที่กำหนดเองไปยังไซต์ของคุณที่ด้านบนของการโต้ตอบเริ่มต้นจากระบบปฏิบัติการของผู้ใช้

Matt Gaunt นำเสนอภาพประกอบที่สมบูรณ์แบบสำหรับเอฟเฟกต์นี้ด้วยภาพต่อไปนี้

นี่คือคำขออนุญาตการแจ้งเตือนเริ่มต้นที่ไม่มีบริบท:

ตัวอย่างคำขออนุญาต UX ที่ไม่ถูกต้อง
ตัวอย่างการขออนุญาต UX ที่ไม่ถูกต้องโดย Permission UX (ตัวอย่างขนาดใหญ่)

และนี่คือการโต้ตอบแบบกำหนดเองที่เพิ่มก่อนการอนุญาตการแจ้งเตือนเริ่มต้นที่อธิบายไว้ข้างต้น:

ตัวอย่างคำขออนุญาต UX ที่ดี
ตัวอย่างคำขออนุญาต UX ที่ดี โดย Permission UX (ตัวอย่างขนาดใหญ่)

การเพิ่มการแจ้งเตือนที่กำหนดเองก่อนการแจ้งเตือนเริ่มต้นของระบบปฏิบัติการ ทำให้คุณสามารถอธิบายวัตถุประสงค์ของการแจ้งเตือนให้ผู้ใช้ทราบได้ชัดเจนยิ่งขึ้น ซึ่งจะเพิ่มโอกาสที่ผู้ใช้จะเลือกรับการแจ้งเตือนจากไซต์ของคุณ

ให้ผู้ใช้เลือกไม่รับการแจ้งเตือน

สำหรับผู้ใช้ การปิดใช้งานการแจ้งเตือนแบบพุชของไซต์ค่อนข้างน่ารำคาญโดยไม่คำนึงถึงอุปกรณ์ที่ใช้ ดังนั้น การให้ผู้ใช้เลือกไม่รับข้อความจึงมีประโยชน์อย่างมากในแง่ของประสบการณ์ของผู้ใช้

นี่คือตัวอย่างจาก Matt Gaunt เกี่ยวกับวิธีใช้งานฟังก์ชันยกเลิกการสมัครรับข้อมูลในโค้ดและ UI ของคุณ:

ขั้นแรก กำหนด click listener ของ pushButton :

 pushButton.addEventListener('click', function() { pushButton.disabled = true; if (isSubscribed) { unsubscribeUser(); } else { subscribeUser(); } });

จากนั้น เพิ่มฟังก์ชันใหม่:

 function unsubscribeUser() { swRegistration.pushManager.getSubscription() .then(function(subscription) { if (subscription) { // TODO: Tell application server to delete subscription return subscription.unsubscribe(); } }) .catch(function(error) { console.log('Error unsubscribing', error); }) .then(function() { updateSubscriptionOnServer(null); console.log('User is unsubscribed.'); isSubscribed = false; updateBtn(); }); }

นี่คือลักษณะที่ปรากฏในคอนโซลหลังจากใช้ปุ่มสมัครรับข้อมูลเพื่อปิดการแจ้งเตือนหากผู้ใช้เลือกสำเร็จ

ตัวอย่าง Console.log ของฟังก์ชันเปิด/ปิดการแจ้งเตือนที่ประสบความสำเร็จ
ตัวอย่าง Console.log ของฟังก์ชันเปิด/ปิดการแจ้งเตือนที่ประสบความสำเร็จโดย Matt Gaunt (ตัวอย่างขนาดใหญ่)

บทสรุป

PWA อาจมีประสิทธิภาพอย่างมากในการเพิ่มการเข้าชมไซต์ของคุณและขยายประสบการณ์ผู้ใช้ เพื่อเพิ่มประสิทธิภาพ PWA ของคุณต่อไป คุณสามารถใช้โซลูชันที่ทันสมัยเหล่านี้ที่อธิบายไว้ในบทความนี้เพื่อเพิ่มประสิทธิภาพและฟังก์ชันการทำงาน

คุณไม่จำเป็นต้องดำเนินการทุกอย่างพร้อมกัน อย่าลังเลที่จะเลือกตัวเลือกที่เกี่ยวข้องมากที่สุด เนื่องจากคำแนะนำแต่ละข้อเหล่านี้จะช่วยให้คุณพัฒนา PWA ต่อไปได้

แหล่งข้อมูลเพิ่มเติม

  • การฝึกอบรมเว็บแอปแบบก้าวหน้าโดย Google
  • Progressive Web Apps โดย web.dev
  • เว็บแอปโปรเกรสซีฟ (PWA) โดย Mozilla