diff --git a/src/client/app/boot.js b/src/client/app/boot.js
index 190ff255c38b6873af173fa3f1f5ffd486ba0b4e..8a79880fb43d9d625b703522350704cb2fedcf40 100644
--- a/src/client/app/boot.js
+++ b/src/client/app/boot.js
@@ -78,11 +78,16 @@
 	const raw = (localStorage.getItem('useRawScript') == 'true' && isDebug)
 		|| ENV != 'production';
 
+	// Get salt query
+	const salt = localStorage.getItem('salt')
+		? '?salt=' + localStorage.getItem('salt')
+		: '';
+
 	// Load an app script
 	// Note: 'async' make it possible to load the script asyncly.
 	//       'defer' make it possible to run the script when the dom loaded.
 	const script = document.createElement('script');
-	script.setAttribute('src', `/assets/${app}.${ver}.${lang}.${raw ? 'raw' : 'min'}.js`);
+	script.setAttribute('src', `/assets/${app}.${ver}.${lang}.${raw ? 'raw' : 'min'}.js${salt}`);
 	script.setAttribute('async', 'true');
 	script.setAttribute('defer', 'true');
 	head.appendChild(script);
@@ -118,6 +123,9 @@
 	function refresh() {
 		localStorage.setItem('shouldFlush', 'false');
 
+		// Random
+		localStorage.setItem('salt', Math.random().toString());
+
 		// Clear cache (serive worker)
 		try {
 			navigator.serviceWorker.controller.postMessage('clear');