长轮询 & 短轮询
长轮询:客户端向服务器发送ajax请求,服务器接收到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
优点:在无消息的情况下不会频繁请求,消耗资源小。
缺点:服务器hold住连接会消耗资源,返回的数据顺序无保证,难以管理维护。
function ajax(){ var xhr = new XMLHttpRequest() xhr.open('GET','/zjy') xhr.onreadystatechange = () => { ajax() } xhr.send() }
短轮询:就是普通的轮询,指定在特定的时间间隔(interval),由浏览器对服务器发出ajax请求,然后由服务器返回最新的数据给客户端浏览器。
优点:前后端逻辑代码简单易处理。
缺点:请求中大部分是无用的,难以维护,浪费服务器端资源,响应的结果没有顺序(因为是异步请求,当发送请求没有返回结果时,后面的请求又继续被发送)。
function ajax(time = 1000){ let xhr = new XMLHttpRequest() setInterval(() => { xhr.open('GET','/zjy') xhr.onreadystatechange = () => { console.log('back new info') } xhr.send() },time) }
减少使用setInterval
const doMyself = (interval) => { setTimeout(() => { console.log('zhenjianyu') doMyself() }, interval) }
以自己现在的努力程度,还没有资格和别人拼天赋