4

我想知道谷歌翻译器(translate.google.com)如何在没有回发的情况下节省用户率,还有其他类似的行为(例如在堆栈溢出中)用户查看没有回发(一切都如此快速和流畅)但那里是一些数据库交互,例如在 Stack Overflow 中投票问题/答案或评论,是 Ajax 吗?还是只是 JavaScript?真是太好了,如何使用VS2010、C#、ASP.NET 实现这些类型的操作?

谢谢

4

2 回答 2

3

概述

这有两个方面:

  • 当你做了一些需要记录在服务器上的事情时
  • 当您只是查看内容并注意到即使您没有做任何事情也会更新内容(投票指示器发生变化,您会看到诸如“此帖子已修改,点击加载”,“此问题已关闭,不再接受任何答案。”等)

当你做一些需要记录在服务器端的事情时(例如,投票)

它是向服务器发送 ajax 消息的 JavaScript 代码。对话的服务器端可以使用您喜欢的任何技术来实现(Web 的乐趣之一,客户端和服务器端是分离的)。具体来说,页面加载了当时的投票信息,当您单击投票按钮时,JavaScript 代码会立即更新投票显示,然后向服务器发送一个 ajax 请求来记录投票(因此是即时的视觉反馈)。通常,该请求会在合理的时间内完成,并且一切正常。有时会出现处理请求的错误(可能是 HTTP 错误——例如,出现问题——或者服务器拒绝投票的逻辑错误);发生这种情况时,您会看到一条错误消息,并且代码会恢复投票的显示(因为它没有在服务器上注册)。

在 Stack Exchange 的案例中,他们在 JavaScript 代码中使用了jQuery库。为了让您了解这是多么容易,这里是使用 jQuery 的直接 ajax 调用的客户端:

$.ajax({
    url:    "/path/to/server/resource",
    method: "POST",
    data:   {action: "voteup"},
    success: function(data) {
        // Do something with the successful response from the server,
        // which can send back data
    },
    error:   function(jqXHR, textStatus, errorThrown) {
        // Do something with the error that occurred
    }
 });

服务器端只是以任何有意义的方式响应 POST 操作。

该示例使用 jQuery,但还有许多其他 JavaScript 库也使 ajax 变得非常简单,例如YUIClosurePrototype其他几个库中的任何一个。jQuery 是目前(迄今为止)最流行的基于浏览器的 JavaScript 任务库,但它不是唯一的。

当你只是在看东西

我只能从外部谈论这个,但我希望 Stack Exchange 使用几种“彗星”技术中的任何一种(网络套接字、长轮询、隐藏iframes等)。

我希望网络套接​​字是首选。例如,如果我在打开网络选项卡的情况下使用 Chrome 打开一个问题,我会看到一个请求ws://sockets.ny.stackexchange.com/,并且ws是与网络套接字关联的有线协议 RFC6455 涵盖的两个方案之一wss(另一个是SSL 安全版本) . Web 套接字的乐趣在于,它们正式且健壮地允许客户端和服务器之间持久的双向通信,允许服务器在适当的时候将数据推送到客户端。

由于 IE9 和更早版本的明显遗漏, Web 套接字现在得到了相当好的支持,因此对于没有它们的浏览器,SE 可能会退回到上述链接中提到的一种或多种旧技术。

于 2012-04-25T11:03:00.343 回答
0

对我来说,为 Dapper 替换实体框架效果很好。速度有显着提高。

于 2012-04-25T11:04:44.550 回答