GÜNCELLEME
Html -webpack-eklentisi ile preload-webpack-eklentisini kullanabilirsiniz , yapılandırmada neyin önceden yükleneceğini tanımlamanıza izin verir ve yığınınızı önceden yüklemek için otomatik olarak etiketler ekler
şu anda webpack v4 kullanıyorsanız, bu eklentiyi kullanarak preload-webpack-plugin@next
misal
plugins: [
new HtmlWebpackPlugin(),
new PreloadWebpackPlugin({
rel: 'preload',
include: 'asyncChunks'
})
]
Dinamik olarak oluşturulmuş adlara sahip iki eşzamansız komut dosyası üreten bir proje için, chunk.31132ae6680e598f8879.jsve
chunk.d15e7fdfc91b34bb78c4.jsgibi, aşağıdaki önyüklemeler belgeye enjekte edilirhead
<link rel="preload" as="script" href="chunk.31132ae6680e598f8879.js">
<link rel="preload" as="script" href="chunk.d15e7fdfc91b34bb78c4.js">
GÜNCELLEME 2
tüm zaman uyumsuz yığınları önceden yüklemek istemezseniz, ancak bunu yapabildiğinizde yalnızca bir kez
Ya kullanabilirsiniz eklentisi en migcoder Babel veya preload-webpack-pluginaşağıdaki gibi
ilk olarak, bu async yığınını webpack
magic commentörnek yardımıyla adlandırmanız gerekecek
import(/* webpackChunkName: 'myAsyncPreloadChunk' */ './path/to/file')
ve eklenti yapılandırmasında şu adı kullanın:
plugins: [
new HtmlWebpackPlugin(),
new PreloadWebpackPlugin({
rel: 'preload',
include: ['myAsyncPreloadChunk']
})
]
Öncelikle komut dosyasını yüklemek için scriptetiket veya linketiket belirlediğimizde tarayıcının davranışını görelim
- bir tarayıcı bir
scriptetiketle karşılaştığında etiketi yükler ve hemen yürütür
- ayrıştırma ve değerlendirmeyi yalnızca etkinlik
asyncve
deferetiket yardımı ile yalnızcaDOMContentLoaded etkinliğe kadar geciktirebilirsiniz
- komut dosyası etiketini eklemezseniz yürütmeyi (değerlendirmeyi) geciktirebilirsiniz (yalnızca ile önceden yükleyin
link)
Şimdi diğer bazı vardır önerilmez hackey yolu tüm komut ve gemi olan stringveya comment(yorum veya dize değerlendirme süresi yok denecek kadar azdır çünkü) ile kendinizin kullanabileceği yürütmek gerektiğinde Function() constructorveya evalher ikisi tavsiye edilmez
Başka Bir Yaklaşım Hizmeti Çalışanları: (sayfa yeniden yüklendikten sonra önbellek olayını koruyacak veya önbellek yüklendikten sonra kullanıcı çevrimdışı duruma gelecektir)
Modern tarayıcıda, service workerbir başvuruyu (JavaScript, resim, css şey) almak ve önbelleğe almak için kullanabilirsiniz ve bu başvuru için ana iş parçacığı talebi söz konusu olduğunda, bu isteği kesebilir ve başvuruyu önbellekten bu şekilde geri gönderemezsiniz. önbelleğe yüklüyorsunuz burada servis çalışanları hakkında daha fazla bilgi edinin
misal
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open('v1').then(function(cache) {
return cache.addAll([
'/sw-test/',
'/sw-test/index.html',
'/sw-test/style.css',
'/sw-test/app.js',
'/sw-test/image-list.js',
'/sw-test/star-wars-logo.jpg',
'/sw-test/gallery/bountyHunters.jpg',
'/sw-test/gallery/myLittleVader.jpg',
'/sw-test/gallery/snowTroopers.jpg'
]);
})
);
});
self.addEventListener('fetch', function(event) {
event.respondWith(caches.match(event.request).then(function(response) {
// caches.match() always resolves
// but in case of success response will have value
if (response !== undefined) {
return response;
} else {
return fetch(event.request).then(function (response) {
// response may be used only once
// we need to save clone to put one copy in cache
// and serve second one
let responseClone = response.clone();
caches.open('v1').then(function (cache) {
cache.put(event.request, responseClone);
});
return response;
}).catch(function () {
// any fallback code here
});
}
}));
});
Gördüğünüz gibi bu webpack bağımlı bir şey değil, bu webpack kapsamı dışındadır, ancak webpack yardımıyla servis çalışanını daha iyi kullanmanıza yardımcı olacak paketinizi bölebilirsiniz
if (false) import(…)- Webpack'in ölü kod analizi yaptığından şüpheliyim?