Webpack ile performans bütçeleri belirleme

Milica Mihajlija
Milica Mihajlija

Webpack, içe aktarılan tüm dosyalarınızı birleştirip paket adı verilen bir veya daha fazla çıkış dosyasına paketler. Paket kullanımı güzeldir ancak uygulamanız büyüdükçe paketleriniz de büyür. Paket boyutlarının çok fazla büyümediğinden ve uygulamanızın yüklenmesinin ne kadar sürdüğünü etkilemediğinden emin olmak için paket boyutlarını izlemeniz gerekir. Webpack, öğe boyutuna göre performans bütçeleri belirlemeyi destekler ve paket boyutlarını sizin için izleyebilir.

Bu özelliğin nasıl kullanıldığını görmek için yeni yıla kalan günleri sayan bir uygulamayı inceleyebilirsiniz. React ve moment.js ile oluşturulmuştur. (Tıpkı giderek daha fazla çerçeve ve kitaplığa dayanan gerçek dünyadaki uygulamalar gibi. 😉)

Yeni yıla kalan günleri sayan bir uygulama

Ölçüm

Bu kod laboratuvarı, webpack ile paketlenmiş uygulamayı zaten içerir.

  1. Projeyi düzenlenebilir hale getirmek için Düzenlemek için remiks oluştur'u tıklayın.
  2. Terminal'i tıklayın (not: Terminal düğmesi görünmüyorsa Tam Ekran seçeneğini kullanmanız gerekebilir).
  3. Öğelerin ve boyutlarının renk kodlu bir listesini almak için konsola webpack yazın.
webpack

Ana paket, 244 KiB'den (250 KB) büyük olduğu için sarı renkle vurgulanmıştır.

323 KiB'lik paket boyutunu gösteren Webpack çıkışı
Webpack, büyük JS paketi hakkında sizi uyarıyor ⚠️

Bu uyarılar üretim modunda varsayılan olarak etkindir ve varsayılan eşik hem öğeler hem de giriş noktaları (bir sayfanın ilk yüklenmesinde kullanılan tüm öğelerin birleşimi) için 244 KiB sıkıştırılmamış'tır.

Öğenin önerilen boyut sınırını aştığına dair Webpack uyarısı
Webpack, hantal JS paketi hakkında sizi uyarıyor ⚠️

Webpack yalnızca sizi uyarmakla kalmaz, aynı zamanda paketlerinizi nasıl küçültebileceğiniz konusunda size bir öneride bulunur. Önerilen teknikler hakkında daha fazla bilgiyi Web Temel Bilgileri bölümünde bulabilirsiniz.

Webpack performans optimizasyonu önerisi
Webpack performans optimizasyonu önerisi 💁

Özel performans bütçesi ayarlama

Uygun performans bütçesi, projenizin yapısına bağlıdır. Her zaman için kendi araştırmanızı yapmanız en iyisidir. Kural olarak, sıkıştırılmış/küçültülmüş kritik yol kaynaklarının 170 KB'den az olması gerekir.

Bu basit demo için daha da ihtiyatlı davranıp bütçeyi 100 KB (97, 7 KiB) olarak ayarlayın. webpack.config.js alanına şunları ekleyin:

module.exports = {
  //...
  performance: {
    maxAssetSize: 100000,
    maxEntrypointSize: 100000,
    hints: "warning"
  }
};

Yeni performans bütçesi bayt cinsinden belirlenir:

  • Tekil öğeler için 100.000 bayt (maxAssetSize)
  • Giriş noktası için 100.000 bayt (maxEntrypointSize)

Bu durumda, giriş noktası olarak da işlev gören yalnızca bir paket vardır.

ipucları için olası değerler:

  1. warning (varsayılan): Sarı bir uyarı mesajı gösterilir ancak derleme geçer. Bunun geliştirme ortamlarında kullanılması en iyisidir.
  2. error: Kırmızı bir hata mesajı gösterilir ancak derleme yine de geçer. Bu ayar, üretim derlemeleri için önerilir.
  3. false: Uyarı veya hata gösterilmez.
Kırmızı yazı tipinde Webpack performans hatası
Webpack performans ipucu "error" 🚨

Optimize etme

Performans bütçesinin amacı, düzeltilmesi çok zor hale gelmeden önce sizi performans sorunları hakkında uyarmaktır. Uygulama oluşturmanın her zaman birden fazla yolu vardır ve bazı teknikler yükleme sürelerini kısaltır. (Bunların birçoğu JavaScript'inizi Optimize Etme bölümünde bulabilirsiniz. 🤓)

Çerçeveler ve kitaplıklar geliştiricilerin hayatını kolaylaştırır ancak son kullanıcılar uygulamaların nasıl oluşturulduğuyla değil, işlevsel ve hızlı olmasıyla ilgilenir. Performans bütçesini aştığınızı fark ederseniz olası optimizasyonları düşünmenin zamanı gelmiştir.

Gerçek dünyada, istemci tarafı büyük çerçevelerin değiştirilmesi genellikle zordur. Bu nedenle, bunları akıllıca kullanmak önemlidir. Biraz araştırma yaparak bu işi yapan popüler kitaplıklara genellikle daha küçük alternatifler bulabilirsiniz (date-fns, moment.js için iyi bir alternatiftir). Bazen, performans üzerinde önemli bir etkisi olan bir çerçeveyi veya kitaplığı hiç kullanmamak daha mantıklı olabilir.

Kullanılmayan kodu kaldırmak, büyük üçüncü taraf kitaplıkları içeren uygulamaları optimize etmenin iyi bir yoludur. Kullanılmayan kodu kaldırma kılavuzunda bu süreç ayrıntılı olarak açıklanmaktadır. Geri sayım kodunu moment.js kullanmadan yeniden yazmanın hızlı bir yolu aşağıda verilmiştir.

app/components/Countdown.jsx dosyasından şunları kaldırın:

const today = moment();
const yearEnd = moment().endOf('year');
const daysLeft = yearEnd.diff(today, 'days');

Ardından şu satırı silin:

const moment = require('moment');

Biraz matematik gerektirir ancak aynı geri sayımı basit JavaScript ile de uygulayabilirsiniz:

const today = new Date();
const year = today.getFullYear();
const yearEnd = new Date(year,11,31); //months are zero indexed in JS
const timeDiff = Math.abs(yearEnd.getTime() - today.getTime());
const daysLeft = Math.ceil(timeDiff / (1000 * 3600 * 24));

Şimdi moment.js dosyasını package.json dosyasından kaldırın ve optimize edilmiş paketi oluşturmak için konsolda webpack'i tekrar çalıştırın.

İşte bu! 223 KB (230 KB) tasarruf ettiniz ve uygulama bütçenin altında.🎉

Optimizasyondan sonra Webpack paket boyutu çıkışı 97,7 KiB

Gözle

Webpack'te performans bütçesi oluşturmak için yalnızca birkaç satır kod gerekir ve yanlışlıkla büyük bir bağımlılık eklerseniz sizi uyarır. "Gözden ırak olan gönülden ırak olur" denir ancak webpack, performansla ilgili sonuçların her zaman farkında olmanızı sağlayabilir.