我想开发一个基于ASP.NET的再线聊天系统,可是发现如果每次都刷新页面效率很低,而且服务器负荷也变大了.偶然看到了GOOGLE的这个页面,信息如下:
Don't throw anything away.
Over [2647.678142] megabytes (and counting) of free storage so you'll never need to delete another message其中[]里面的就是不断跳动的自由空间大小.如果看浏览器,发现根本没有刷新.
我想在ASP.NET里面实现这个功能,请教各位高手

解决方案 »

  1.   

    刚才看了一下那个页面的源文件,发现了原文件那部分是这个写的:
    <p><font size=-1><b>Don't throw anything away.</b><br>
                Over <span id=quota>2000</span> megabytes (and counting) of free storage so you'll never need to delete another message.</font></p>就是说大小是通过JAVASCRIPT修改ID为QUOTA的SPAN来在客户端修改的.
    这句下面还有一行是一个脚本:
    <script>
    <!--
    quota = el("quota");
    updateQuota();
    // -->
    </script>我顺着updateQuota()找发现在HEAD区域的一个大脚本区域里面就是要的东西了.可是我JS不好,看不懂,下面是代码,能帮小弟解释一下么?<script type=text/javascript src="https://mail.google.com/mail?view=page&name=browser"></script><script type=text/javascript>
    <!--if (top.location != self.location) {
      top.location = self.location.href;
    }function SetGmailCookie(name, value) {
      document.cookie = name + "=" + value + ";path=/;domain=.google.com";
    }function lg() {
      var now = (new Date()).getTime();  var cookie = "T" + start_time + "/" + start_time + "/" + now;
      SetGmailCookie("GMAIL_LOGIN", cookie);
    }function gaiacb_onLoginSubmit() {
      lg();
      if (!fixed) {
        FixForm();
      }
      return true;
    }function StripParam(url, param) {
      var start = url.indexOf(param);
      if (start == -1) return url;
      var end = start + param.length;  var charBefore = url.charAt(start-1);
      if (charBefore != '?' && charBefore != '&') return url;  var charAfter = (url.length >= end+1) ? url.charAt(end) : '';
      if (charAfter != '' && charAfter != '&') return url;  if (charBefore == '&') {
        --start;
      } else if (charAfter == '&') {
        ++end;
      }
      return url.substring(0, start) + url.substring(end);
    }var fixed = 0;function FixForm() {
      if (is_browser_supported) {
        var form = el("gaia_loginform");
        if (form && form["continue"]) {
          var url = form["continue"].value;
          url = StripParam(url, "ui=html");
          url = StripParam(url, "zy=l");
          form["continue"].value = url;
        }
      }
      fixed = 1;
    }function el(id) {
      if (document.getElementById) {
        return document.getElementById(id);
      } else if (window[id]) {
        return window[id];
      }
      return null;
    }var CP = [
     [ 1122879600000, 2450 ],
     [ 1125558000000, 2550 ],
     [ 1136102400000, 2950 ]
    ];var quota;var ONE_PX = "https://mail.google.com/mail/images/c.gif?t=" +
                 (new Date()).getTime();function LogRoundtripTime() {
      var img = new Image();
      var start = (new Date()).getTime();
      img.onload = GetRoundtripTimeFunction(start);
      img.src = ONE_PX;
    }function GetRoundtripTimeFunction(start) {
      return function() {
        var end = (new Date()).getTime();
        SetGmailCookie("GMAIL_RTT", (end - start));
      }
    }function MaybePingUser() {
      var f = el("gaia_loginform");
      if (f.Email.value) {
        new Image().src = 'https://mail.google.com/mail?gxlu=' + 
                          encodeURIComponent(f.Email.value) + 
                          '&zx=' + (new Date().getTime());
      }
    }function OnLoad() {
      gaia_setFocus();  MaybePingUser();
      el("gaia_loginform").Passwd.onfocus = MaybePingUser;  LogRoundtripTime();
      if (!quota) {
        quota = el("quota");
        updateQuota();
      }
    }function updateQuota() { 
      if (!quota) {
        return;
      }
     
      var now = (new Date()).getTime(); 
      var i;
      for (i = 0; i < CP.length; i++) {
        if (now < CP[i][0]) {
          break;
        }
      }
      if (i == 0) {
        setTimeout(updateQuota, 1000); 
      } else if (i == CP.length) {
        quota.innerHTML = CP[i - 1][1];
      } else {
        var ts = CP[i - 1][0];
        var bs = CP[i - 1][1];
        quota.innerHTML = format(((now-ts) / (CP[i][0]-ts) * (CP[i][1]-bs)) + bs); 
        setTimeout(updateQuota, 1000); 
      } 

     
    var PAD = '.000000'; 
     
    function format(num) { 
      var str = String(num); 
      var dot = str.indexOf('.'); 
      if (dot < 0) { 
         return str + PAD; 
      } if (PAD.length > (str.length - dot)) { 
        return str + PAD.substring(str.length - dot); 
      } else { 
        return str.substring(0, dot + PAD.length); 
      } 
    } // -->
    </script>
      

  2.   

    客户端肯定是JS
    整体是AJAX