我有一个网页很少的页面。
其中一些页面需要userId和userName以用于JavaScript上下文中的任何处理。使userId可用于JavaScript而不会破坏缓存的模式
注意:用户标识没有被用于安全性,也没有被发送回服务器,所以欺骗不是问题。
问题:什么是将userId和userName传递给JavaScript上下文的好方法。
UPDATE 我非常希望能够用于从服务器到JavaScript代码传递任何数据(例如默认值列表,排序和过滤设置)的通用模式,这样我就没有解决用户id问题与传递initialSort和initialFilter值的问题不同。
以下是我能想到的一些方法。我明白,所有这些都会起作用,但我希望有一个更好的模式。我也有兴趣在学习解决方案的其他缺点我正在考虑在这里:
1通行证帐户及从服务器用户名作为非服务器cookie。
缺点:cookie会被发送回服务器与每个请求,这是一种浪费(虽然并不重要)。
2.使用自定义标头
缺点:标头不适用于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>
缺点:页面是search-crawlers敌对(在我的情况下不是问题)。
凡大部分数据来自何处的时刻?它是被包含在初始页面中,还是以后通过AJAX加载?根据你的情况,*该数据不可能被缓存,所以我建议将它包含在内(这也可能是userId在没有数据的情况下是无用的,反之亦然,所以这个解决方案使得这个解决方案更合适)。 – Matt 2014-12-01 18:40:21
本地存储是否有可能? – danronmoon 2014-12-01 18:43:03
我想为userId做一个额外的请求,而不是修改这个特定问题的最小代码更改。如果这种情况一直持续下去,那就值得用不同的方式来处理 - 在HTML中渲染数据,或者在服务器渲染的模板代码中添加一些用户证书中间件。对于一次或首次使用它的情况,我认为AJAX请求已足够好。也许修改PageViewModel的构造函数来获取用户信息,如果它没有给出?如果情况再次发生,请先修复并制定模式。 – 2014-12-01 18:57:42