先看代码  
  var totieSize=0;//全部变量, 邮件总大小
  var infoSize=0;//全局变量,单封邮件大小累计
 
  function getData(){} //异步请求,获取totieSize,infoSize  原本用意: do{ var id=settimeout("getData()",2000)}
            while(totieSize==infoSize)
              { clearTimeout(id) }  
  经过测试,下面这段代码直接导致浏览器瘫痪,这也是意料之中的事,
 可是我希望当 settimeout定时的时候,整个Javasxript也都处于挂起中,这样顺利实现outlook接收实时接收邮件,实时显示邮件的效果了,可是 偏偏javasxript在我手里做不到这点。   请求给位高手,帮我想个好的javasxript编写思路  !!

解决方案 »

  1.   

    >>function getData(){} //异步请求,获取totieSize,infoSize 
    1.第二次获取,最好在上次请求完成的情况下进行。你现在每2000ms请求一次,你保证异步的数据在2000ms完成?
    2.定义一个全局请求锁,避免多次重复请求.否则你可以无限次刷然后你机子不挂算牛了.
    ...大约这些。。个人见解
      

  2.   

    你改用setInterval("mm()",2000)这个函数试试
      

  3.   

    setInterval("mm()",2000)  一样会造成浏览器瘫痪!     我在服务器端为接收邮件独立开了一个线程,所以 为了达到实时,所以不得不在前台不停的 做异步请求,  将请求过来的每封邮件的大小累加,如果累加的大小和邮件总大小相等了, 那么这个时候就取消定时异步请求!  无奈 这个javascript  想不到还有什么好的方法!
      

  4.   

    现在 定时函数会严重导致cpu性能大增,  我本来想着 在  在定时函数后面做一个 循环一百万次的耗时语句, 防止浏览器瘫痪,可是 这样缺不能知道 如何在执行2秒后自动执行定时函数!  难呀!
      

  5.   

    呃,对了,补充一点,
     { clearTimeout(id) }  
    应不会执行,明显会死循环
      

  6.   

    你把定时器放在getData里面类似下面的代码:function getData(){
       // 获得数据的逻辑,假如获得数据这里有个变量b=true
       if(!b){
           setTimeout(getDate,2000);
       }
    }
      

  7.   


    while(totieSize==infoSize)//totieSize==infoSize是死循环,所以会导致浏览器崩溃!