Tag: caching控制

在JavaScript中closurescaching

大家好,我正试图通过添加一个随机值的请求消息发送的URL的查询string组件来closurescaching。 我有一个服务器发送etag作为string到我的客户端,我想确保没有caching正在进行我已经setRequestHeaders但我也应该添加一个HTTP请求类似于POST /message?x=0.123456789 HTTP / 1.1 这是我的客户端代码 <html> <header><title>This is title</title></header> <body> <span id="ajaxButton" style="cursor: pointer; text-decoration: underline"> Make a request </span> <script type="text/javascript"> (function() { var httpRequest; var x= Math.random(); document.getElementById("ajaxButton").onclick = function() { makeRequest('http://localhost:5000/'); }; function makeRequest(url) { if (window.XMLHttpRequest) { // Mozilla, Safari, … httpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) […]

如何cachingautosuggest组件的结果?

我有一个用户types执行AJAX请求的UI自动提示组件。 例如,如果用户键入mel ,则响应可能是: { suggestions: [{ id: 18, suggestion: 'Melbourne' }, { id: 7, suggestion: 'East Melbourne' }, { id: 123, suggestion: 'North Melbourne' }] } UI组件实现客户端caching。 因此,如果用户现在点击b (检索melb结果),然后Backspace ,浏览器已经在内存中获得了mel结果,所以它们立即可用。 换句话说,每个客户对每个给定的input最多只能做一次AJAX调用。 现在,我想在此之上添加服务器端caching。 因此,如果一个客户端为mel执行一个AJAX调用,并且假设有一些繁重的计算正在准备响应,其他客户端将会得到结果而不会再执行这个繁重的计算。 我可以简单地对查询和结果进行散列,但我不确定这是实现这一点的最佳方式(内存问题)。 数据集中有~20000条build议。 什么是实现服务器端caching的最佳方式?

Node.js中的response.write失败

我正在试图制作一个代理服务器,例如从www.xxx.com获取一个页面,caching响应,然后将其发送到请求的浏览器。 为此,在服务器上创build一个请求来自xxx.com的页面的HTTP客户端。 响应以块(Buffers)的forms返回。 然后,由于块的数量根据网页的不同而不同,所以我把块放在一个缓冲区中。 然后我发送数组的元素。 我的问题不是所有的块都发送成功 。 有没有其他的方式可以caching数据发送之前? (我知道我可以直接发送数据,但是我需要发送caching,因为我想把它发送给多个浏览器) 为了保存我使用的块: function getURL(u) { u = url.parse(u); var client = http.createClient(u.port || 80, u.hostname); var request = client.request('GET', '/', { 'Host': u.hostname, }); var cache ={ }; cache.data = []; request.end(); request.on('response', function(response) { cache.statusCode = response.statusCode; cache.headers = response.headers; response.on('data', function(chunk) { cache.data.push(chunk); } } […]

使用browserify对js文件进行版本控制,以防止客户端使用旧的js文件

我已经开始使用browserify而不是requirejs,在requirejs上我可以在config中使用urlArgs,当我更改js代码时给出新的版本号。 以便浏览器不会使用先前caching的js文件。 我couldntfind如何添加这个。 这是我现在的大嘴文件, ….. gulp.task('browserify', function () { var browserified = transform(function(filename) { var b = browserify(filename); return b.bundle(); }); return gulp.src(['./js/main.js']) .pipe(browserified) // .pipe(uglify()) // commented out on testing environment. .pipe(gulp.dest('./dist/js')); }); …. gulp.task('html', function() { return gulp.src('./src/index.html') .pipe(htmlreplace({ 'css': 'css/main.css', 'js': { src: [ … // infrastructural js files / plugins 'js/main.js' […]

Express:设置maxAge后,单个文件的SetHeader'Cache-Control'

节点新手在这里。 下面的代码导致所有文件都接收到响应头“Cache-Control public,max-age = 31536000”。 我希望索引的最大年龄为0.我尝试了几种不同的方法,但其根源似乎是我的一个更基本的误解。 为什么下面的res.setHeader行不生效(以便我能理解我的误解),以及确保Index.html不被caching的正确方法是什么? var express = require('express'), gzipStatic = require('connect-gzip-static'), app = express(), port= process.env.PORT || 3030, cacheAge = 365 * 24 * 60 * 60 * 1000; app.use(gzipStatic(__dirname + '/public', { maxAge: cacheAge })); app.get('/', function(req, res) { res.setHeader('Cache-Control', 'max-age=0'); res.sendFile('index.html'); });

是否可以在node.js中使用进程内caching(由Buffer支持)?

Node.JS有内存限制1Gb,也有GC,所以用它来存储大量消耗大量内存的对象并不好。 但是,Node.JS也有Buffer类,它存储在v8之外。 而且,虽然单个缓冲区也应该小于1Gb,但可以使用总大小> 1Gb的多个缓冲区。 那么,在Node.js中使用Buffer来创build进程内Cache是​​否可行呢? 在我的情况下,我不需要顶级的performance,平均performance会很好。 我们能期待它会比Redis差十倍吗?

HTTP代理:拒绝半处理的请求

我有基于Node.js的HTTP代理,它以stream的方式转换响应正文。 例如,我的代理像nginx一样工作,它压缩(使用libz作为gzip)响应主体。 但是我有一个疑问:如果数据交换期间上游连接发生错误,该怎么办? 如何通知客户关于en错误,当响应已经发送和正在发送正在进行中。 客户端的错误确定的复杂性基于Content-Length由于源和经转换的数据不匹配而不存在响应的事实。 为了澄清一些细节,我添加了一段简单的代码: var express = require("express"); var http = require("http"); var url = require('url'); var webApp = express(); var httpServer = webApp.listen(8080, function () { console.log("server started on ", 8080, " port"); }); webApp.get("*", function(req, res) { var targetRequest = http.get(req.originalUrl, function (upstreamResponse) { if (upstreamResponse.statusCode != 200) { res.status(500).send("Internal Server […]

如何基于caching控制caching对node.js中传出请求的入站响应?

在我们的node.js应用程序中,我们向其他服务发出http请求,以获取满足传入请求所需的数据。 例如,当我们确定一个经过身份validation的用户的组织时,我们会向组织的服务部门寻求我们需要的详细信息。 为了提高性能,我们希望caching对这些传出请求的响应。 但是,到目前为止确定的库在客户端都是静态configuration的TTL。 我们希望我们的caching由响应收到的Cache-control和Expires头控制。 在那里处理这种types的任何好的caching库?

使用Redis作为分布式内部节点Jcaching

目前,我在Amazon beanstalk上有两个负载平衡的单进程nodeJS实例。 他们每个只使用一个简单的内存中的对象作为caching。 由于它们位于不同的服务器上,因此它们的caching不共享。 这就是Redis进来的地方。我想利用Redis来创build一个共享caching,但是只能填充NodeJ的内部内存。 你看,目前我正在caching4KB-10KB的对象,如果我完全依赖Redis,那么我不仅有Redis延迟来检索对象,还有networking延迟。 我宁愿使用Redis作为永久性caching,它将在启动时填充我的nodeJS实例,并且还要保持两个内部caching周期性同步(每x分钟) 一个非常基本的nodeJs内存caching是https://github.com/tcs-de/nodecache 更复杂的事情,我正在寻找开始使用nodeJS集群能力分叉在同一个服务器下的应用程序的多个进程。 因此,所有群集共享一个内存本地服务器caching是非常重要的。 前面提到的nodejs lib有一个包装器,可以帮助在集群环境中使用: https : //github.com/lvx3/cluster-cache 回顾一下, 我将有服务器A和服务器B谁将均衡负载均衡。 每个服务器(A&B)都会有4个nodeJs进程需要共享一个caching(也就是说,4个服务器的一个nodeJs进程应该都使用一个Server Acaching, 然后,我希望服务器A和服务器B高速caching周期性同步并“坚持”到Redis上。 在发生崩溃或重新部署时,服务器caching将使用Redis中的内容启动。 我有什么select? 有没有适合的解决scheme或混合解决scheme? 比如像nodecache这样的插件(简单),它有一个Redis插件? 我也使用快递,所以也许有快递中间件,将非常适合这个。 使用Redis来启动本地服务器内存caching还是值得的复杂性,还是应该仅仅依靠Redis来处理networking延迟? 一个可以接受的,但有点令人失望的时间,我得到一个10KB的对象是20毫秒。 我更喜欢大约1ms。 Redis和nodeJs服务器将在亚马逊上,所以会非常接近。 我知道,如果我有一个50MB的rediscaching,在服务器A和服务器B上将存在相同的50MB。为了速度的利益,我更愿意花钱在硬件/ RAM上。

为什么这个请求返回一个200(从caching),但其他人返回304?

那么我正在浏览器caching,并写一个节点HTTP服务器,以帮助我学习,我使用caching控制和最后修改。 然后在Chrome中input这个url,我只需按下F5来查看caching是否有效。最后结果似乎有些奇怪。 一个返回200,其他返回304如例外 Intro_1.jpg是由style.css( background-image:url(../images/intro_1.jpg );)为什么这个请求返回一个200(从caching),但其他人返回304? 那是对的吗?