我有一個網頁很少的頁面。
其中一些頁面需要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