perf: move indexeddb operations to async module (#813)
This commit is contained in:
parent
89566cacaa
commit
dbd6c35a88
19
src/routes/_database/asyncDatabase.js
Normal file
19
src/routes/_database/asyncDatabase.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// All database functions are asynchronous, so we can just proxy here and
|
||||||
|
// put an async import of the database, to avoid including it in the main bundle
|
||||||
|
// (which doesn't need to run when the user isn't logged in).
|
||||||
|
|
||||||
|
import { importDatabase } from '../_utils/asyncModules'
|
||||||
|
|
||||||
|
const handler = {
|
||||||
|
get: function (obj, prop) {
|
||||||
|
return async function (...args) {
|
||||||
|
if (!obj[prop]) {
|
||||||
|
let database = await importDatabase()
|
||||||
|
obj[prop] = database[prop]
|
||||||
|
}
|
||||||
|
return obj[prop].apply(null, args)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const asyncDatabase = new Proxy({}, handler)
|
|
@ -1,3 +1,5 @@
|
||||||
// this used to be workerized, hence the API looks like this
|
// The proxy stuff doesn't play well with IDEs, so use this as
|
||||||
|
// the dev mode database.js, but swap out the other one in Webpack.
|
||||||
|
|
||||||
import * as database from './databaseApis'
|
import * as database from './databaseApis'
|
||||||
export { database }
|
export { database }
|
||||||
|
|
2
src/routes/_database/database.prod.js
Normal file
2
src/routes/_database/database.prod.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
import { asyncDatabase } from './asyncDatabase'
|
||||||
|
export { asyncDatabase as database }
|
|
@ -47,3 +47,7 @@ export const importStatusVirtualListItem = () => import(
|
||||||
export const importNotificationVirtualListItem = () => import(
|
export const importNotificationVirtualListItem = () => import(
|
||||||
/* webpackChunkName: 'NotificationVirtualListItem.html' */ '../_components/timeline/NotificationVirtualListItem.html'
|
/* webpackChunkName: 'NotificationVirtualListItem.html' */ '../_components/timeline/NotificationVirtualListItem.html'
|
||||||
).then(getDefault)
|
).then(getDefault)
|
||||||
|
|
||||||
|
export const importDatabase = () => import(
|
||||||
|
/* webpackChunkName: 'database.js' */ '../_database/databaseApis.js'
|
||||||
|
)
|
||||||
|
|
|
@ -60,6 +60,10 @@ module.exports = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
|
new webpack.NormalModuleReplacementPlugin(
|
||||||
|
/\/_database\/database\.js$/, // this version plays nicer with IDEs
|
||||||
|
'./database.prod.js'
|
||||||
|
),
|
||||||
new LodashModuleReplacementPlugin({
|
new LodashModuleReplacementPlugin({
|
||||||
paths: true
|
paths: true
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue