[英]How do I speed up Dark mode delay on website?
我想加快暗模式在我的网站上生效。 当我当前加载页面时,页面加载和暗模式生效之间存在延迟。 这是我的 jQuery.js 代码
onload = function () {
if (localStorage.getItem("darkMode") === "true") {
var mode = localStorage.getItem("darkMode");
enableDarkMode();
}
}
function enableDarkMode() {
$("body").addClass("dark");
$("nav").removeClass("navbar navbar-expand-md navbar-light");
$("nav").addClass("navbar navbar-expand-md navbar-dark");
$('.inner-switch').text("ON");
var mode = localStorage.setItem("darkMode", "true");
}
function disableDarkMode() {
$("body").removeClass("dark");
$("nav").removeClass("navbar navbar-expand-md navbar-dark");
$("nav").addClass("navbar navbar-expand-md navbar-light");
$('.inner-switch').text("OFF");
var mode = localStorage.setItem("darkMode", "false");
}
$('.inner-switch').on("click", function () {
if ($("body").hasClass("dark")) {
disableDarkMode();
} else {
enableDarkMode();
}
});
您可以使用Smarty之类的模板引擎,并在显示网站之前检查暗模式。 然后,您可以分配一个 smarty 变量并在网站的 HTML 内构建一个 IF 语句。
例子:
<body {if darkMode} dark {/if}>
所以它会从一开始就加载暗模式。
你需要知道:
localStorage.getItem();
localStorage.setItem();
都是读取和写入设备硬盘驱动器的同步进程。
相对于您将使用 javascript 运行的大多数事情,这使得它们的过程相当缓慢 - 您可以观察到这种效果,因为由于是同步的,这些过程需要在 javascript 线程中的其他任何东西可以运行之前完成。
1)至少,我会在开始时将onload
替换为onDOMContentLoaded
。
2)此外,我还会考虑使用另一种(更快)方法在不是webStorage
的页面之间持久化数据:
2a) IndexedDB:在页面之间存储 state 的最佳方法是indexedDB
,但它是相当复杂的 API 并且一点也不容易理解。
2b) Cookies:老派,但他们工作。 不过,在这种情况下可能有点矫枉过正。
2c) URL 查询字符串:一个客户端选项(比indexedDB
更快更容易,并且没有不必要的额外的 cookie 来回机制)可能是使用查询字符串,例如: https://example.com/this-is/my-webpage/?mode=dark
在这种情况下,我可能会使用上面的第三个选项URL 查询字符串代替webStorage
。
几年来,web 开发人员社区一直在呼吁一种解决方案来在页面之间持久化数据,该解决方案具有IndexedDB
的所有技术优势,但与localStorage
一样易于实现。
Google 提出了一个解决方案( Keyword-Value Storage或KV Storage
),目前处于实验阶段,2020 年或 2021 年之前不会在浏览器中正确建立(作为内置模块,不少于):
延伸阅读:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.