Mainline Menswear, PWA'yı uygulayarak dönüşüm oranında% 55 artış elde etti

Mainline, moda alanında en büyük tasarımcı markalarını sunan bir online giyim perakendecisidir. Birleşik Krallık merkezli şirket, herkese sorunsuz bir alışveriş deneyimi sunmak için şirket içi uzmanlardan oluşan ekibine güveniyor ve önemli iş ortaklarıyla stratejik olarak harmanlanıyor. Mainline, özel olarak oluşturulmuş yedi bölgesel web sitesi ve bir uygulama aracılığıyla 100'den fazla ülkede pazar varlığıyla, e-ticaret tekliflerinin rakipleri arasında olduğundan emin olmaya devam edecek.

Zorluk

Mainline Menswear'in hedefi, mobil cihazlar için optimize edilmiş mevcut web sitesini, giderek büyüyen akıllı telefon pazarı göz önünde bulundurularak mobil uyumlu tasarıma ve işlevselliğe odaklanarak, "mobil cihazlara öncelik veren" vizyonlarına bağlı olacak ilerlemeli özelliklerle tamamlamaktı.

Çözüm

Amaç, Mainline Menswear web sitesinin orijinal mobil uyumlu sürümünü tamamlayan bir PWA oluşturup kullanıma sunmak ve daha sonra istatistikleri şu anda Android ve iOS'te kullanılabilen hibrit mobil uygulamalarıyla karşılaştırmaktı.

Uygulama kullanıma sunulduğunda ve Mainline Menswear kullanıcılarının küçük bir bölümü tarafından kullanıldığında, PWA, uygulama ve web arasındaki temel istatistikler arasındaki farkı belirleyebildiler.

Web sitesini PWA'ya dönüştürürken Mainline'ın benimsediği yaklaşım, web sitesi için seçtikleri çerçevenin (Vue.js'yi kullanan Nuxt.js) geleceğe hazır olmasını ve hızlı değişen web teknolojisinden yararlanmalarını sağlamaktı.

Sonuçlar

%139

Web'e kıyasla PWA'da oturum başına daha fazla sayfa görüntülenir.

%161

PWA'da web'e kıyasla daha uzun oturum süreleri.

%10

Web'e kıyasla PWA'daki hemen çıkma oranındaki düşüş

%12,5

Web'e kıyasla PWA'da daha yüksek ortalama sipariş değeri

%55

Web'e kıyasla PWA'da daha yüksek dönüşüm oranı.

%243

Web'e kıyasla PWA'da oturum başına daha yüksek gelir.

Ayrıntılı teknik inceleme

Mainline Menswear, tek sayfalık bir uygulama (SPA) olan sitesini paketlemek ve oluşturmak için Nuxt.js çerçevesini kullanıyor.

Service Worker dosyası oluşturuluyor

Mainline Menswear, hizmet çalışanı oluşturmak için nuxt/pwa Workbox modülünün özel bir uygulaması aracılığıyla yapılandırma ekledi.

nuxt/pwa modülünü çatallamalarının nedeni, ekibin standart sürümü kullanırken yapamadığı veya sorun yaşadığı Service Worker dosyasına daha fazla özelleştirme eklemesine olanak tanımaktı. Bu optimizasyonlardan biri, sitenin çevrimdışı işlevselliği çerçevesindeydi (örneğin, varsayılan bir çevrimdışı sayfa sunma ve çevrimdışıyken analiz toplama).

Web uygulaması manifestinin anatomisi

Ekip, farklı mobil uygulama simge boyutları ve name, description ve theme_color gibi diğer web uygulaması ayrıntıları için simgeler içeren bir manifest oluşturdu:

{
  "name": "Mainline Menswear",
  "short_name": "MMW",
  "description": "Shop mens designer clothes with Mainline Menswear. Famous brands including Hugo Boss, Adidas, and Emporio Armani.",
  "icons": [
    {
      "src": "/_nuxt/icons/icon_512.c2336e.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ],
  "theme_color": "#107cbb"
}

Web uygulaması yüklendikten sonra, tarayıcı müdahale etmeden ana ekrandan başlatılabilir. Bu işlem, web uygulaması manifest dosyasına display parametresi eklenerek gerçekleştirilir:

{
  "display": "standalone"
}

Son olarak, şirket artık kaç kullanıcının web uygulamasını ana ekrandan ziyaret ettiğini kolayca izlemek için manifest dosyasının start_url alanına utm_source parametresini ekliyor:

{
  "start_url": "/?utm_source=pwa"
}

Daha hızlı gezinme için çalışma zamanını önbelleğe alma

Web uygulamalarının önbelleğe alınması, sayfa hızı optimizasyonu ve geri gelen kullanıcılara daha iyi bir kullanıcı deneyimi sağlamak için bir zorunluluktur.

Web'de önbelleğe alma için birçok farklı yaklaşım vardır. Ekip, istemci tarafında öğeleri önbelleğe almak için HTTP önbelleği ile Cache API'nin bir karışımını kullanır.

Cache API, Mainline Menswear'a önbelleğe alınan öğeler üzerinde daha hassas bir kontrol sağlayarak her dosya türüne karmaşık stratejiler uygulamasına olanak tanır. Tüm bunlar kulağa karmaşık ve bakımı ve bakımı zor gelebilir ancak Workbox, bu tür karmaşık stratejileri kolayca bildirmelerine olanak tanır ve bakım zorluğunu azaltır.

CSS ve JS'yi önbelleğe alma

Ekip, CSS ve JS dosyaları için bunları önbelleğe almayı ve StaleWhileRevalidate Çalışma Kutusu stratejisini kullanarak önbellekte sunmayı seçti. Bu strateji, tüm Nuxt CSS ve JS dosyalarını hızlı bir şekilde sunmalarını sağlayarak sitelerinin performansını önemli ölçüde artırır. Aynı zamanda dosyalar da bir sonraki ziyaret için arka planda en son sürüme güncelleniyor:

/* sw.js */
workbox.routing.registerRoute(
  /\/_nuxt\/.*(?:js|css)$/,
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'css_js',
  }),
  'GET',
);

Google yazı tipleri önbelleğe alınıyor

Google Fonts'u önbelleğe alma stratejisi iki dosya türüne bağlıdır:

  • @font-face bildirimlerini içeren stil sayfası.
  • Temel yazı tipi dosyaları (yukarıda belirtilen stil sayfasında istenir).
// Cache the Google Fonts stylesheets with a stale-while-revalidate strategy.
workbox.routing.registerRoute(
  /https:\/\/fonts\.googleapis\.com\/*/,
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'google_fonts_stylesheets',
  }),
  'GET',
);

// Cache the underlying font files with a cache-first strategy for 1 year.
workbox.routing.registerRoute(
  /https:\/\/fonts\.gstatic\.com\/*/,
  new workbox.strategies.CacheFirst({
    cacheName: 'google_fonts_webfonts',
    plugins: [
      new workbox.cacheableResponse.CacheableResponsePlugin({
        statuses: [0, 200],
      }),
      new workbox.expiration.ExpirationPlugin({
        maxAgeSeconds: 60 * 60 * 24 * 365, // 1 year
        maxEntries: 30,
      }),
    ],
  }),
  'GET',
);

Görüntüleri önbelleğe alma

Mainline Menswear, resimler konusunda iki stratejiyle devam etmeye karar verdi. İlk strateji genellikle ürün resimleri olan CDN'den gelen tüm resimler için geçerlidir. Sayfalarında çok fazla resim olduğundan, kullanıcılarının cihaz depolama alanını çok fazla kullanmadıklarını bilmektedirler. Bu nedenle Workbox'ı kullanarak ExpirationPlugin aracılığıyla en fazla 60 resim ile yalnızca CDN'lerinden gelen resimleri önbelleğe alma stratejisinden yararlandılar.

İstenen 61. (en yeni) resim, 1. (en eski) resmin yerini alır. Böylece, herhangi bir zamanda 60'tan fazla ürün resmi önbelleğe alınmaz.

workbox.routing.registerRoute(
  ({ url, request }) =>
    url.origin === 'https://mainline-menswear-res.cloudinary.com' &&
    request.destination === 'image',
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'product_images',
    plugins: [
      new workbox.expiration.ExpirationPlugin({
        // Only cache 60 images.
        maxEntries: 60,
        purgeOnQuotaError: true,
      }),
    ],
  }),
);

İkinci resim stratejisi, kaynak tarafından istenen diğer resimleri işler. Bu resimler, kaynağın tamamında çok az ve küçük olma eğilimindedir. Ancak, güvenliği sağlama amacıyla, önbelleğe alınan bu resimlerin sayısı da 60 ile sınırlandırılmıştır.

workbox.routing.registerRoute(
  /\.(?:png|gif|jpg|jpeg|svg|webp)$/,
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'images',
    plugins: [
      new workbox.expiration.ExpirationPlugin({
        // Only cache 60 images.
        maxEntries: 60,
        purgeOnQuotaError: true,
      }),
    ],
  }),
);

Çevrimdışı işlevsellik sağlama

Hizmet çalışanı yüklenip etkinleştirildikten hemen sonra çevrimdışı sayfa önbelleğe alınır. Bunu, çevrimdışı HTML dosyası ve çevrimdışı SVG simgesi olmak üzere tüm çevrimdışı bağımlılıkların bir listesini oluşturarak yaparlar.

const OFFLINE_HTML = '/offline/offline.html';
const PRECACHE = [
  { url: OFFLINE_HTML, revision: '70f044fda3e9647a98f084763ae2c32a' },
  { url: '/offline/offline.svg', revision: 'efe016c546d7ba9f20aefc0afa9fc74a' },
];

Daha sonra ön önbellek listesi, URL'leri önbelleğe ekleme, düzeltme uyuşmazlığı olup olmadığını kontrol etme, önceden önbelleğe alınan dosyaları güncelleme ve dosyaları bir CacheFirst stratejisiyle sunma gibi işlerin tümünü halleden Workbox'a aktarılır.

workbox.precaching.precacheAndRoute(PRECACHE);

Çevrimdışı gezinmeleri işleme

Service Worker etkinleştikten ve çevrimdışı sayfa önbelleğe alındıktan sonra kullanıcının çevrimdışı gezinme isteklerine yanıt vermek için kullanılır. Mainline Menswear web uygulaması bir SPA olsa da çevrimdışı sayfa yalnızca sayfa yeniden yüklendiğinde, kullanıcı tarayıcı sekmesini kapatıp yeniden açtığında veya web uygulaması internete bağlı değilken ana ekrandan başlatıldığında gösteriliyor.

Bunu başarmak için Mainline Menswear, önceden önbelleğe alınmış çevrimdışı sayfayla başarısız NavigationRoute isteklerine bir yedek sağladı:

const htmlHandler = new workbox.strategies.NetworkOnly();
const navigationRoute = new workbox.routing.NavigationRoute(({ event }) => {
    const request = event.request;
    // A NavigationRoute matches navigation requests in the browser, i.e. requests for HTML
    return htmlHandler.handle({ event, request }).catch(() => caches.match(OFFLINE_HTML, {
        ignoreSearch: true
    }));
});
workbox.routing.registerRoute(navigationRoute);

Demo

www.mainlinemenswear.co.uk'de görüldüğü şekliyle çevrimdışı sayfa örneği.

Başarılı yüklemeleri raporlama

Web uygulaması, ana ekran başlatma izleme özelliğinin yanı sıra (web uygulaması manifest dosyasında "start_url": "/?utm_source=pwa" ile) window üzerinde appinstalled etkinliğini dinleyerek başarılı uygulama yüklemelerini raporlar:

window.addEventListener('appinstalled', (evt) => {
  ga('send', 'event', 'Install', 'Success');
});

Web sitenize PWA özellikleri eklemek, müşterilerinizin sizinle alışveriş yapma deneyimini daha da iyileştirir ve [platforma özel] bir uygulamaya kıyasla pazara daha hızlı sunulur.

Andy Hoyle, Geliştirme Başkanı

Sonuç

Progresif web uygulamaları ve bunların nasıl geliştirileceği hakkında daha fazla bilgi edinmek için web.dev'de Progresif Web Uygulamaları bölümüne gidin.

Progresif Web Uygulamaları ile ilgili diğer örnek olayları okumak için örnek olaylar bölümüne göz atın.