MEMPERBARUI
Anda dapat menggunakan preload-webpack-plugin dengan html-webpack-plugin itu akan memungkinkan Anda menentukan apa yang harus dimuat di konfigurasi dan secara otomatis akan memasukkan tag untuk preload potongan Anda
perhatikan jika Anda menggunakan webpack v4 sekarang Anda harus menginstal plugin ini menggunakan preload-webpack-plugin@next
contoh
plugins: [
new HtmlWebpackPlugin(),
new PreloadWebpackPlugin({
rel: 'preload',
include: 'asyncChunks'
})
]
Untuk proyek yang menghasilkan dua skrip async dengan nama yang dihasilkan secara dinamis, seperti chunk.31132ae6680e598f8879.js
dan
chunk.d15e7fdfc91b34bb78c4.js
, preload berikut akan disuntikkan ke dalam dokumenhead
<link rel="preload" as="script" href="chunk.31132ae6680e598f8879.js">
<link rel="preload" as="script" href="chunk.d15e7fdfc91b34bb78c4.js">
PEMBARUAN 2
jika Anda tidak ingin memuat semua potongan async tetapi hanya spesifik sekali Anda dapat melakukannya juga
Anda dapat menggunakan plugin babel migcoder atau dengan preload-webpack-plugin
seperti berikut
pertama Anda harus memberi nama potongan async itu dengan bantuan webpack
magic comment
contoh
import(/* webpackChunkName: 'myAsyncPreloadChunk' */ './path/to/file')
dan kemudian dalam konfigurasi plugin gunakan nama seperti itu
plugins: [
new HtmlWebpackPlugin(),
new PreloadWebpackPlugin({
rel: 'preload',
include: ['myAsyncPreloadChunk']
})
]
Pertama-tama mari kita lihat perilaku browser ketika kita menentukan script
tag atau link
tag untuk memuat skrip
- setiap kali browser menemukan
script
tag, tag akan memuatnya untuk menguraikannya dan menjalankannya dengan segera
- Anda hanya dapat menunda penguraian dan evaluasi hanya dengan bantuan
async
dan
defer
tag hinggaDOMContentLoaded
acara
- Anda dapat menunda eksekusi (evaluasi) jika Anda tidak memasukkan tag skrip (hanya dengan preload dengan
link
)
sekarang ada beberapa cara hackey lain yang tidak disarankan adalah Anda mengirimkan seluruh skrip Anda dan string
atau comment
(karena waktu evaluasi komentar atau string hampir dapat diabaikan) dan ketika Anda perlu mengeksekusi yang dapat Anda gunakan Function() constructor
atau eval
keduanya tidak direkomendasikan
Pekerja Layanan Pendekatan Lainnya : (ini akan membuat Anda menyimpan aktivitas cache setelah pemuatan ulang halaman atau pengguna offline setelah cache dimuat)
Di peramban modern, Anda dapat menggunakan service worker
untuk mengambil dan men-cache jalan lain (JavaScript, gambar, css apa saja) dan ketika permintaan utas utama untuk jalan itu Anda dapat mencegat permintaan itu dan mengembalikan jalan lain dari cache dengan cara ini Anda tidak mengurai dan mengevaluasi skrip saat Anda memuatnya ke dalam cache, baca lebih lanjut tentang pekerja layanan di sini
contoh
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
});
}
}));
});
karena Anda dapat melihat ini bukan hal yang tergantung webpack ini berada di luar lingkup webpack namun dengan bantuan webpack Anda dapat membagi bundel Anda yang akan membantu memanfaatkan pekerja layanan dengan lebih baik
if (false) import(…)
- Saya ragu webpack melakukan analisis kode mati?