【发布时间】:2019-03-04 12:23:06
【问题描述】:
我有简单的节点服务器(nodejs + express + ejs 渲染),当用户尝试加载特定页面时,服务器会发送已编译的 html 并作为响应发送。
为了跟踪用户,我添加了 2 个计数器
一个。当服务器收到对该页面的请求时计数器会增加
b.当客户端加载页面时,它包含一些代码,这些代码会将 HTTP 请求返回到我用作计数器的服务器
现在的问题是,随着时间的推移,sentResponse 计数器和 clientLoad 计数器之间的差异增加了很多,以至于我得到了 sentResponse = 7000 和 clientLoad = 3600。
关于可能导致这种行为的任何建议
注意:我还在请求到达我的服务器之前设置了 Cloudfare,我暂停了它,但我仍然得到了巨大的差异?
注意:我还注意到很多用户经常在 4 秒内多次向页面发出请求,但我确信我发送的是有效的 html 并且我不同的是几乎 50%,所以我不认为每个访问的用户页面在 4 秒内按 ctrl+r 2 次或更多次。
代码:
server.js
app.get('/dashboard', (res, res) => {
...
...
...
Tracker.incrementCount('sentResponse');
res.render(page.ejs, {...});
});
app.get('/client-load-start', (req, res) => {
Tracker.incrementCount('clientLoadStart');
res.send(200);
});
page.ejs
<html>
<head>
...
<script src='/client-load-start?version=<some_random_4_digit_number>'></script>
...
</head>
<body>
...
...
</body>
</html>
【问题讨论】:
-
我怀疑这是缓存问题。浏览器正在缓存您的页面一段时间。因此,在此期间,如果您请求该页面,它将由缓存提供服务,您的服务器将不会收到任何命中。在浏览器中禁用缓存,然后重试。
-
@MukeshVerma 但如果是这种情况,那么服务器也不会增加 sendResponse 计数吗?因为页面是从浏览器的缓存中加载的,所以服务器不参与任何事情,所以在这种情况下,sendResponse 和 clientLoad 计数器都不会增加,因此它们应该几乎相同,对吧?
-
请看,如果 b 页面被加载,它将发送 http 请求,这将在您的服务器上增加一个计数器。页面被缓存而不是请求。因此,无论何时加载页面,无论是从缓存还是服务器提供,都会在加载时触发 http 请求,这将导致增量操作。
-
@MukeshVerma Umm 是的,所以在这种情况下,sentResponse 计数器将小于 clientLoaded 计数器,因为服务器没有发送任何响应(由于浏览器缓存),sentResponse 不会增加,但 clientLoaded 会得到无论页面加载的位置如何,都会递增。但在我的情况下,sentResponse 比 clientLoaded 更多
-
如果您能分享一些代码,我可能会提供帮助。
标签: javascript node.js express browser