From 5b446af6dc82286db5673df79baf210aed2c50d0 Mon Sep 17 00:00:00 2001 From: SillyLossy Date: Thu, 1 Jun 2023 14:34:40 +0300 Subject: [PATCH] Speed-up extensions loading. Add tracking of response times --- package-lock.json | 21 ++++++++++++ package.json | 1 + public/scripts/extensions.js | 34 ++++++++++++++------ public/scripts/extensions/objective/index.js | 5 ++- server.js | 2 ++ 5 files changed, 52 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index c173fdb3b..4fa845908 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,6 +36,7 @@ "png-chunk-text": "^1.0.0", "png-chunks-encode": "^1.0.0", "png-chunks-extract": "^1.0.0", + "response-time": "^2.3.2", "rimraf": "^3.0.2", "sanitize-filename": "^1.6.3", "sentencepiece-js": "^1.1.0", @@ -2695,6 +2696,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/response-time": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", + "integrity": "sha512-MUIDaDQf+CVqflfTdQ5yam+aYCkXj1PY8fjlPDQ6ppxJlmgZb864pHtA750mayywNg8tx4rS7qH9JXd/OF+3gw==", + "dependencies": { + "depd": "~1.1.0", + "on-headers": "~1.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/response-time/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", diff --git a/package.json b/package.json index eb96619db..1c128c881 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "png-chunk-text": "^1.0.0", "png-chunks-encode": "^1.0.0", "png-chunks-extract": "^1.0.0", + "response-time": "^2.3.2", "rimraf": "^3.0.2", "sanitize-filename": "^1.6.3", "sentencepiece-js": "^1.1.0", diff --git a/public/scripts/extensions.js b/public/scripts/extensions.js index cf51469dd..daf51109e 100644 --- a/public/scripts/extensions.js +++ b/public/scripts/extensions.js @@ -108,19 +108,29 @@ async function disableExtension(name) { async function getManifests(names) { const obj = {}; - for (const name of names) { - const response = await fetch(`/scripts/extensions/${name}/manifest.json`); + const promises = []; - if (response.ok) { - const json = await response.json(); - obj[name] = json; - } + for (const name of names) { + const promise = new Promise((resolve, reject) => { + fetch(`/scripts/extensions/${name}/manifest.json`).then(async response => { + if (response.ok) { + const json = await response.json(); + obj[name] = json; + resolve(); + } + }).catch(err => reject() && console.log('Could not load manifest.json for ' + name, err)); + }); + + promises.push(promise); } + + await Promise.allSettled(promises); return obj; } async function activateExtensions() { const extensions = Object.entries(manifests).sort((a, b) => a[1].loading_order - b[1].loading_order); + const promises = []; for (let entry of extensions) { const name = entry[0]; @@ -138,9 +148,11 @@ async function activateExtensions() { const li = document.createElement('li'); if (!isDisabled) { - await addExtensionScript(name, manifest); - await addExtensionStyle(name, manifest); - activeExtensions.add(name); + const promise = Promise.all([addExtensionScript(name, manifest), addExtensionStyle(name, manifest)]); + promise + .then(() => activeExtensions.add(name)) + .catch(err => console.log('Could not activate extension: ' + name, err)); + promises.push(promise); } else { li.classList.add('disabled'); @@ -157,6 +169,8 @@ async function activateExtensions() { } } } + + await Promise.allSettled(promises); } async function connectClickHandler() { @@ -353,7 +367,7 @@ async function runGenerationInterceptors(chat) { if (typeof window[interceptorKey] === 'function') { try { await window[interceptorKey](chat); - } catch(e) { + } catch (e) { console.error(`Failed running interceptor for ${manifest.display_name}`, e); } } diff --git a/public/scripts/extensions/objective/index.js b/public/scripts/extensions/objective/index.js index 916efc796..1799bd3c8 100644 --- a/public/scripts/extensions/objective/index.js +++ b/public/scripts/extensions/objective/index.js @@ -5,9 +5,12 @@ import { eventSource, event_types, } from "../../../script.js"; +import { debounce } from "../../utils.js"; const MODULE_NAME = "Objective" +const saveMetadataDebounced = debounce(async () => await context.saveMetadata(), 1000); + let globalObjective = "" let globalTasks = [] let currentChatId = "" @@ -201,7 +204,7 @@ function saveState() { hideTasks: $('#objective-hide-tasks').prop('checked'), } - context.saveMetadata(); + saveMetadataDebounced(); } // Dump core state diff --git a/server.js b/server.js index fa52ae996..c716579f1 100644 --- a/server.js +++ b/server.js @@ -28,7 +28,9 @@ process.chdir(directory); const express = require('express'); const compression = require('compression'); const app = express(); +const responseTime = require('response-time') app.use(compression()); +app.use(responseTime()); const fs = require('fs'); const readline = require('readline');