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.js
ve
chunk.d15e7fdfc91b34bb78c4.js
gibi, 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-plugin
aş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 script
etiket veya link
etiket belirlediğimizde tarayıcının davranışını görelim
- bir tarayıcı bir
script
etiketle karşılaştığında etiketi yükler ve hemen yürütür
- ayrıştırma ve değerlendirmeyi yalnızca etkinlik
async
ve
defer
etiket 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 string
veya comment
(yorum veya dize değerlendirme süresi yok denecek kadar azdır çünkü) ile kendinizin kullanabileceği yürütmek gerektiğinde Function() constructor
veya eval
her 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 worker
bir 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?