gpt4 book ai didi

javascript - 在不破坏缓存的情况下使 userId 可用于 JavaScript 的模式

转载 作者:行者123 更新时间:2023-11-29 15:36:56 26 4
gpt4 key购买 nike

我有一个只有几页的网站。
其中一些页面需要 userId 和 userName 才能在 JavaScript 上下文中进行任何处理。

注意:用户 ID 不用于安全性,也不会被发送回服务器,因此欺骗不是问题。

问题:将 userId 和 userName 传递给 JavaScript 上下文的好方法是什么。

更新理想情况下,我想要一个可用于将任何数据(例如列表排序和过滤器设置的默认值)从服务器传递到 JavaScript 代码的通用模式,这样我就不会以不同于传递 initialSort 和初始过滤器值。

以下是我能想到的一些方法。我知道所有这些都会起作用,但我希望有一个更好的模式。我也有兴趣了解我正在考虑的解决方案的其他缺点:

<强>1。从服务器传递 userId 和 userName 作为非服务器 cookie。
缺点:每次请求都会将 cookie 发送回服务器,这是一种浪费(虽然不是很大)。

<强>2。使用自定义 header
缺点:对于初始请求, header 不可用于 javascript。

<强>3。发出 AJAX 请求以获取数据
缺点:需要额外的 HTTP 行程。

<强>4。在初始页面 HTML 中内嵌呈现数据
缺点:破坏缓存并使页面不可缓存。

<强>5。切换极性(在《星际迷航》中每次都有效),到目前为止我最喜欢的
与其在初始行程中获取大部分 HTML,不如重写页面,以便初始页面返回大部分数据,同时单独加载(和缓存)标记。例如:

<html><body>
<div data-bind="template: 'pages/invoices'" /> <!-- using KO external template to load markup -->
<script src="require.js"></script>
<script>
require([...], function (...) {
var vm = new PageViewModel('userId-bob', 'Bob Smart'); // <-- content rendered by server
ko.applyBindings(vm);
});
</script></body></html>

缺点:页面是敌对的搜索爬虫(在我的情况下不是问题)。

最佳答案

我会做的是让它使用 sessionStorage。

当页面加载时,检查 sessionStorage 对象是否有您需要的数据。

如果数据不存在于 sessionStorage 中,那么您知道这是第一次加载页面(至少对于本次 session )。然后您可以执行 ajax 调用来获取这些数据并存储它们。

如果数据确实存在于 sessionStorage 中,那么您不需要执行任何额外的 ajax 调用。

这应该可以将您减少到每个 session 一次且仅一次额外的 HTTP 行程,这对我来说似乎很合理。

有点像

if(sessionStorage.userId && sessionStorage.userName) {
//the data exist, assign them to a global var or pass to the function that needs them
} else {
//the data do not exist, make an ajax request to get the data and store them
}

关于javascript - 在不破坏缓存的情况下使 userId 可用于 JavaScript 的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27234925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com