From b91961803216037aa60bbca71db522a5d4cbab09 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Sun, 16 Jul 2023 11:51:07 +0530 Subject: [PATCH 1/3] perf: eliminate request for user permissions This is ALWAYS required, then it can just be part of boot. Eliminates 1 unnecessary request. --- frappe/core/doctype/user_permission/user_permission.py | 4 ++++ frappe/hooks.py | 1 + frappe/public/js/frappe/defaults.js | 8 ++++++++ frappe/public/js/frappe/desk.js | 2 +- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/frappe/core/doctype/user_permission/user_permission.py b/frappe/core/doctype/user_permission/user_permission.py index 57214b82e2..805242325f 100644 --- a/frappe/core/doctype/user_permission/user_permission.py +++ b/frappe/core/doctype/user_permission/user_permission.py @@ -60,6 +60,10 @@ class UserPermission(Document): frappe.throw(_("{0} has already assigned default value for {1}.").format(ref_link, self.allow)) +def send_user_permissions(bootinfo): + bootinfo.user["user_permissions"] = get_user_permissions() + + @frappe.whitelist() def get_user_permissions(user=None): """Get all users permissions for the user as a dict of doctype""" diff --git a/frappe/hooks.py b/frappe/hooks.py index fe430918d0..af801e9e7b 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -427,4 +427,5 @@ after_job = [ extend_bootinfo = [ "frappe.utils.telemetry.add_bootinfo", + "frappe.core.doctype.user_permission.user_permission.send_user_permissions", ] diff --git a/frappe/public/js/frappe/defaults.js b/frappe/public/js/frappe/defaults.js index fa92ef45f0..bca2b0dad4 100644 --- a/frappe/public/js/frappe/defaults.js +++ b/frappe/public/js/frappe/defaults.js @@ -130,4 +130,12 @@ frappe.defaults = { } }); }, + + load_user_permission_from_boot: function () { + if (frappe.boot.user.user_permissions) { + this._user_permissions = Object.assign({}, frappe.boot.user.user_permissions); + } else { + frappe.defaults.update_user_permissions(); + } + }, }; diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index 0238e00f96..9af2998c72 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -277,7 +277,7 @@ frappe.Application = class Application { } load_user_permissions() { - frappe.defaults.update_user_permissions(); + frappe.defaults.load_user_permission_from_boot(); frappe.realtime.on( "update_user_permissions", From 54b36e8604eed2538d12afddf9dabcc78ce4a54e Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Sun, 16 Jul 2023 12:14:21 +0530 Subject: [PATCH 2/3] perf: lazy load tag list for awesome bar In last 7 days not a single person has used this feature on FC (based on endpoint logs). fix: When user knowingly triggers by typing text starting with `#` we fire request to get tags lazily. --- frappe/public/js/frappe/ui/toolbar/awesome_bar.js | 1 - frappe/public/js/frappe/ui/toolbar/tag_utils.js | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/ui/toolbar/awesome_bar.js b/frappe/public/js/frappe/ui/toolbar/awesome_bar.js index 4a3c88403f..5f01edf578 100644 --- a/frappe/public/js/frappe/ui/toolbar/awesome_bar.js +++ b/frappe/public/js/frappe/ui/toolbar/awesome_bar.js @@ -127,7 +127,6 @@ frappe.search.AwesomeBar = class AwesomeBar { } }); frappe.search.utils.setup_recent(); - frappe.tags.utils.fetch_tags(); } add_help() { diff --git a/frappe/public/js/frappe/ui/toolbar/tag_utils.js b/frappe/public/js/frappe/ui/toolbar/tag_utils.js index 29a0864036..ae1aa97670 100644 --- a/frappe/public/js/frappe/ui/toolbar/tag_utils.js +++ b/frappe/public/js/frappe/ui/toolbar/tag_utils.js @@ -8,6 +8,11 @@ frappe.tags.utils = { txt = txt.slice(1); let out = []; + if (!frappe.tags.tags) { + frappe.tags.utils.fetch_tags(); + return []; + } + for (let i in frappe.tags.tags) { let tag = frappe.tags.tags[i]; let level = frappe.search.utils.fuzzy_search(txt, tag); From d9a698d4c54b0d9c39dc4525ffab5f657e357d24 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Sun, 16 Jul 2023 11:22:46 +0530 Subject: [PATCH 3/3] fix: lower rapid-reload threshold --- frappe/public/js/frappe/assets.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/assets.js b/frappe/public/js/frappe/assets.js index dcb945bacd..6d85dd019e 100644 --- a/frappe/public/js/frappe/assets.js +++ b/frappe/public/js/frappe/assets.js @@ -32,7 +32,7 @@ frappe.assets = { // Evict cache every 2 days // Evict cache if page is reloaded within 10 seconds. Which could be user trying to // refresh if things feel broken. - if ((not_updated_since < 10000 && is_reload()) || not_updated_since > 2 * 86400000) { + if ((not_updated_since < 5000 && is_reload()) || not_updated_since > 2 * 86400000) { frappe.assets.clear_local_storage(); } } else {