Как использовать хранилище Dojo для кэширования данных на стороне клиента?
Мне трудно понять, как реализовать кэширование на стороне клиента. В моем примере кода каждый вызов с помощью store.get(id)
создает новый HTTP-запрос. Насколько я могу судить, данные не извлекаются из локальной памяти.
В документации для dojo/store/Cache ясно указано, что данные хранятся в локальном кэше памяти после завершения первого запроса GET. Последующие запросы извлекаются из локальной памяти.
Однако, используя Firefox Web Inspector, я вижу мой код создает новый HTTP-запрос каждый раз. Что я делаю не так?
Код:
require(["dojo/store/JsonRest", "dojo/store/Memory", "dojo/store/Cache", "dojo/domReady!"], function(JsonRest, Memory, Cache) {
var restStore = new JsonRest({target:"/rest/Vendor/"});
var memoryStore = new Memory({});
var store = new Cache(restStore, memoryStore);
var object = store.get("5").then(function(value) {
console.log("Vendor Name: ", value.name);
});
var object = store.get("5").then(function(value) {
console.log("Vendor Name: ", value.name);
});
var object = store.get("5").then(function(value) {
console.log("Vendor Name: ", value.name);
});
});
Вывод Веб-Инспектора
[22:28:59.585] GET http://my-website-url.com/rest/Vendor/5 [HTTP/1.1 200 OK 596ms]
[22:28:59.588] GET http://my-website-url/rest/Vendor/5 [HTTP/1.1 200 OK 40ms]
[22:28:59.153] "Vendor Name: " "Company E"
[22:28:59.589] GET http://my-website-url/rest/Vendor/5 [HTTP/1.1 200 OK 36ms]
[22:28:59.196] "Vendor Name: " "Company E"
[22:28:59.235] "Vendor Name: " "Company E"
Вывод JSON из вызова Rest
[
{"name":"Company A","vendorId":1,"active":1},
{"name":"Company B","vendorId":2,"active":1},
{"name":"Company C","vendorId":3,"active":1},
{"name":"Company D","vendorId":4,"active":1},
{"name":"Company E","vendorId":5,"active":1}
]
1 ответ:
Я думаю, что вы должны предоставить "idProperty" как в хранилище JsonRest, так и в хранилище памяти, потому что "кэш" попытается найти объект с идентификатором "5" в своем кэше. Поскольку вы не указали, какое свойство идентифицирует объект, он не найдет запись в кэше и не выполнит запрос HTTP снова.
Короче говоря: я ожидал бы, что он будет работать, когда вы указываете idProperty для магазина, например:
var restStore = new JsonRest({target:"/rest/Vendor/", idProperty: "vendorId"}); var memoryStore = new Memory({idProperty: "vendorId"});