|
132 | 132 | This is a nuke cache option. Though mostly safe, Use it wisely to prevent slow startup when resetting. |
133 | 133 | */ |
134 | 134 | const urlParams = new URLSearchParams(window.location.search || ""); |
| 135 | + const LESS_REFRESH_SCHEDULED_KEY = "lessRefreshScheduled"; |
| 136 | + const shouldRefreshLess = window.localStorage.getItem(LESS_REFRESH_SCHEDULED_KEY) === 'yes'; |
135 | 137 | const CACHE_NAME_EVERYTHING = "everything"; |
136 | 138 | function _resetCacheIfNeeded() { |
137 | 139 | window.cacheClearError; |
|
165 | 167 | return Promise.all(promises); |
166 | 168 | }).then(() => { |
167 | 169 | console.log("CacheStorage Reset: Cache successfully reset"); |
168 | | - setInterval(()=>{ |
| 170 | + let totalWaitTime = 0, waitTime = 100, maxWaitTime = 3000; |
| 171 | + let intervalTimer = setInterval(()=>{ |
169 | 172 | // wait for less to get loaded. less caches css in local storage in production urls |
170 | 173 | // and might not load new css classes if we don't reset. less doesn't cache in localhost. |
171 | | - if(window.less){ |
| 174 | + totalWaitTime += waitTime; |
| 175 | + if(window.less && less.refresh){ |
172 | 176 | less.refresh(true).finally(()=>{ |
173 | 177 | localStorage.setItem(cacheKey, newCacheVersion); |
174 | 178 | location.reload(); |
175 | 179 | }); |
| 180 | + clearInterval(intervalTimer); |
| 181 | + } else if(totalWaitTime > maxWaitTime){ |
| 182 | + // ignore less refresh, the app load itself is critical. less refresh we will try later |
| 183 | + localStorage.setItem(cacheKey, newCacheVersion); |
| 184 | + localStorage.setItem(LESS_REFRESH_SCHEDULED_KEY, "yes"); |
| 185 | + location.reload(); |
176 | 186 | } |
177 | | - }, 100); |
| 187 | + }, waitTime); |
178 | 188 | }).catch( e => { |
179 | 189 | console.error("Error while resetting cache", e); |
180 | 190 | window.cacheClearError = e; |
|
188 | 198 | throw e; |
189 | 199 | }); |
190 | 200 | } |
| 201 | + if(shouldRefreshLess){ |
| 202 | + let lessRefreshInterval = setInterval(()=>{ |
| 203 | + // wait for less to get loaded. less caches css in local storage in production urls |
| 204 | + // and might not load new css classes if we don't reset. less doesn't cache in localhost. |
| 205 | + if(window.less && less.refresh){ |
| 206 | + less.refresh(true).finally(()=>{ |
| 207 | + localStorage.setItem(LESS_REFRESH_SCHEDULED_KEY, "no"); |
| 208 | + }); |
| 209 | + clearInterval(lessRefreshInterval); |
| 210 | + } |
| 211 | + }, 500); |
| 212 | + } |
191 | 213 | } |
192 | 214 | _resetCacheIfNeeded(); |
193 | 215 | </script> |
|
0 commit comments