diff --git a/main.js b/main.js index 03f5ccc7746..2520afb71ed 100644 --- a/main.js +++ b/main.js @@ -121,6 +121,9 @@ const { Environment } = require('./ts/environment'); const sql = new MainSQL(); +let sqlInitTimeStart = 0; +let sqlInitTimeEnd = 0; + let appStartInitialSpellcheckSetting = true; const defaultWebPrefs = { @@ -963,10 +966,12 @@ app.on('ready', async () => { // from when it's first ready until the loading screen disappears. ipc.once('signal-app-loaded', () => { const loadTime = Date.now() - startTime; + const sqlInitTime = sqlInitTimeEnd - sqlInitTimeStart; console.log('App loaded - time:', loadTime); + console.log('SQL init - time:', sqlInitTime); if (enableCI) { - console._log('ci: app_loaded=%j', { loadTime }); + console._log('ci: app_loaded=%j', { loadTime, sqlInitTime }); } }); @@ -1027,6 +1032,8 @@ app.on('ready', async () => { key = crypto.randomBytes(32).toString('hex'); userConfig.set('key', key); } + + sqlInitTimeStart = Date.now(); const sqlInitPromise = sql.initialize({ configDir: userDataPath, key, @@ -1074,6 +1081,7 @@ app.on('ready', async () => { try { await sqlInitPromise; + sqlInitTimeEnd = Date.now(); } catch (error) { console.log('sql.initialize was unsuccessful; returning early'); const buttonIndex = dialog.showMessageBoxSync({ diff --git a/ts/sql/Server.ts b/ts/sql/Server.ts index aad78947b28..f1b523e0133 100644 --- a/ts/sql/Server.ts +++ b/ts/sql/Server.ts @@ -313,7 +313,7 @@ function getSQLCipherIntegrityCheck(db: Database): Array | undefined { } function getSQLIntegrityCheck(db: Database): string | undefined { - const checkResult = db.pragma('integrity_check', { simple: true }); + const checkResult = db.pragma('quick_check', { simple: true }); if (checkResult !== 'ok') { return checkResult; } @@ -1618,6 +1618,11 @@ async function close(): Promise { const dbRef = globalInstance; globalInstance = undefined; + + // SQLLite documentation suggests that we run `PRAGMA optimize` right before + // closing the database connection. + dbRef.pragma('optimize'); + dbRef.close(); }