Javascript 堆栈溢出站点如何快速执行类似Ajax的功能?

Javascript 堆栈溢出站点如何快速执行类似Ajax的功能?,javascript,jquery,ajax,performance,process,Javascript,Jquery,Ajax,Performance,Process,我很好奇,堆栈溢出站点是如何快速执行类似Ajax的功能的 因为如果在投票系统看到评论,回答,批准编辑, 编辑答案和问题 所有这些都工作得如此之快,我无法想象so是如何快速执行这些事情的。因为在我们的一般场景中,如果我们发出Ajax请求,响应需要几秒钟,但在这种情况下不会 这是怎么发生的 编辑:针对投票决定关闭的人 这里我的意图只针对技术人员。我并不是要告诉你代码是怎么写的。我关心的是SO实现的机制。一般来说,SO使用web套接字提供快速响应的更新。如果您想了解更多信息,请看一看,例如,(这是一个

我很好奇,堆栈溢出站点是如何快速执行类似Ajax的功能的

因为如果在投票系统看到评论,回答,批准编辑, 编辑答案和问题

所有这些都工作得如此之快,我无法想象so是如何快速执行这些事情的。因为在我们的一般场景中,如果我们发出Ajax请求,响应需要几秒钟,但在这种情况下不会

这是怎么发生的

编辑:针对投票决定关闭的人


这里我的意图只针对技术人员。我并不是要告诉你代码是怎么写的。我关心的是SO实现的机制。

一般来说,SO使用web套接字提供快速响应的更新。如果您想了解更多信息,请看一看,例如,(这是一个很好的web套接字包装器,为旧浏览器提供回退)或WebSocket。你也可以全力以赴地阅读这本书

以下是一个示例请求(来自Chrome开发者工具):

答复:

Status Code:101 Switching Protocols
Connection:Upgrade
Sec-WebSocket-Accept: ...
Upgrade:websocket

好。。我想如果你的浏览器支持。。它使用WebSocket。因此,事件更改会推送到您身上,而不是您尝试检查更改。您是否尝试过调试应用程序中丢失“几秒钟”的地方?您发送的数据是否很多?服务器是否需要很长时间才能处理?我认为在SO的情况下,一切都取决于优化。@Tallmaris,我想问一个关于您的评论的问题“意思是:每当有人向DB输入相关的问题或答案时,它是否会检查一些DB事件?”但kamituel在他的评论中写道。事实上,如果您在“网络”选项卡上有web inspector并刷新SO,您应该能够找到一个发送到ws://sockets.(ny |?).stackexchange.com/@user1600124的请求-我在前面附上了一些示例标题;)@NullVoid-哦,我不能这么说,我不是SO团队的成员;)但是是的,要么他们有一些数据库通知,要么他们已经在应用程序级别实现了这一点。也许会有一些启示。@NullVoid-嗯,看起来这是一个相当大的网站;)从优化的角度来看,他们可能会将请求/响应与实际操作分开。例如,upvote将发出一个ajax请求,该请求将被确认、查询,然后被应答(fast)。稍后处理队列,并实际更新数据库。。。如果出现错误,我想会向用户发送通知(通过websocket或其他方法)。。。只是一个猜测,tho,因为我不是SO团队的成员(但这是我过去做事的方式)
Status Code:101 Switching Protocols
Connection:Upgrade
Sec-WebSocket-Accept: ...
Upgrade:websocket