diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml
index 659295ebf5a..8c88d2d64fe 100644
--- a/app/views/home/index.html.haml
+++ b/app/views/home/index.html.haml
@@ -3,8 +3,6 @@
%link{ href: asset_pack_path('features/compose.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/
%link{ href: asset_pack_path('features/home_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/
%link{ href: asset_pack_path('features/notifications.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/
- %link{ href: asset_pack_path('features/community_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/
- %link{ href: asset_pack_path('features/public_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/
%meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key}
%script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
diff --git a/config/webpack/production.js b/config/webpack/production.js
index cd1dd91dc74..6de79c811c3 100644
--- a/config/webpack/production.js
+++ b/config/webpack/production.js
@@ -48,7 +48,37 @@ module.exports = merge(sharedConfig, {
}),
new OfflinePlugin({
publicPath: publicPath, // sw.js must be served from the root to avoid scope issues
- caches: { }, // do not cache things, we only use it for push notifications for now
+ caches: {
+ main: [':rest:'],
+ additional: [':externals:'],
+ optional: [
+ '**/locale_*.js', // don't fetch every locale; the user only needs one
+ '**/*_polyfills-*.js', // the user may not need polyfills
+ '**/*.woff2', // the user may have system-fonts enabled
+ // images/audio can be cached on-demand
+ '**/*.png',
+ '**/*.jpg',
+ '**/*.jpeg',
+ '**/*.svg',
+ '**/*.mp3',
+ '**/*.ogg',
+ ],
+ },
+ externals: [
+ '/emoji/1f602.svg', // used for emoji picker dropdown
+ '/emoji/sheet.png', // used in emoji-mart
+ ],
+ excludes: [
+ '**/*.gz',
+ '**/*.map',
+ 'stats.json',
+ 'report.html',
+ // any browser that supports ServiceWorker will support woff2
+ '**/*.eot',
+ '**/*.ttf',
+ '**/*-webfont-*.svg',
+ '**/*.woff',
+ ],
ServiceWorker: {
entry: path.join(__dirname, '../../app/javascript/mastodon/service_worker/entry.js'),
cacheName: 'mastodon',