perf: remove translations from boot

This commit is contained in:
Shrihari Mahabal 2026-03-17 19:08:53 +05:30
parent e6c98b1edb
commit 9ef5aa256b
5 changed files with 31 additions and 5 deletions

View file

@ -342,10 +342,7 @@ def get_user_pages_or_reports(parent, cache=False):
def load_translations(bootinfo):
from frappe.translate import get_messages_for_boot
bootinfo["lang"] = frappe.lang
bootinfo["__messages"] = get_messages_for_boot()
def get_user_info():

View file

@ -30,7 +30,9 @@ frappe.Application = class Application {
this.startup();
}
startup() {
async startup() {
// Wait for translations to be loaded before rendering any UI
if (frappe._translations_loaded) await frappe._translations_loaded;
frappe.realtime.init();
frappe.model.init();

View file

@ -98,6 +98,13 @@
frappe.boot = {{ frappe.utils.orjson_dumps(boot, default=frappe.json_handler) }}
// for backward compatibility of some libs
frappe.sys_defaults = frappe.boot.sysdefaults;
frappe._messages = {};
frappe._translations_loaded = fetch(
`/api/method/frappe.translate.get_boot_translations?v=${window._version_number}&lang=${frappe.boot.lang}`,
{credentials: "same-origin"}
).then(r => r.json()).then(data => {
frappe._messages = data.message || {};
}).catch(() => {});
</script>
{{ include_script('frappe-web.bundle.js') }}
{% endblock %}

View file

@ -132,6 +132,13 @@ def get_messages_for_boot():
return get_all_translations(frappe.local.lang)
@frappe.whitelist(allow_guest=True, methods=["GET"])
def get_boot_translations(lang=None):
"""Return all translations for the current user's language."""
frappe.local.response_headers["Cache-Control"] = "private, max-age=31536000"
return get_all_translations(lang or frappe.local.lang)
def get_all_translations(lang: str) -> dict[str, str]:
"""Load and return the entire translations dictionary for a language from apps + user translations.

View file

@ -52,9 +52,22 @@
if (!window.frappe) window.frappe = {};
frappe.boot = {{ frappe.utils.orjson_dumps(boot, default=frappe.json_handler) }};
frappe._messages = frappe.boot["__messages"];
frappe._messages = {};
frappe.csrf_token = "{{ csrf_token }}";
frappe._translations_loaded = fetch(
`/api/method/frappe.translate.get_boot_translations?v=${window._version_number}&lang=${frappe.boot.lang}`,
{
credentials: "same-origin",
headers: {
"X-Frappe-CSRF-Token": frappe.csrf_token,
"Accept": "application/json"
}
}
).then(r => r.json()).then(data => {
frappe._messages = data.message || {};
}).catch(() => {});
</script>