• 如何避免重复的http请求


    做网页时,经常会产生大量重复http请求,http请求十分浪费服务器资源,下面给出三种导致重复请求的情景,希望大家能够有所启示
     
    一、IE6不缓存背景图片

    a{ background:url(images/normal.gif); } a:hover { background:url(images/hover.gif); }
     
    如果为超级链接定义上述的css样式以实现鼠标悬浮时的动态效果,IE6在这里有一个bug,它每次都从服务器端读取背景图片,也就是说IE6不缓存
    背景图片。
     
    IE7,IE8已经修复了这个bug。
     
    可通过添加一段javascript脚本来解决这个问题
    <script type="text/javascript">try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {}</script>
     
    document.execCommand 还有很多其他用法,网上资料很多,感兴趣的可以看看
     

    二、innerHTML需要注意“+=”操作符
     
    首先解释一下innerHTML+=是如何工作的
     
    var box=document.getElementById("box");
    box.innerHTML = "a";
    box.innerHTML += "b";
     
    这个过程相当于
     
    var box=document.getElementById("box");
    box.innerHTML = "a";
    box.innerHTML = "";
    var c= "a"+"b";
    box.innerHTML = c;
     
    按照如上解释 ,如果box这个元素中原来有img元素,当使用box.innerHTML+=""后,会导致原来的img被重新加载图片

    但是ie对innerHTML的执行很怪异
     
    1、连续的多个innerHTML+=操作,ie会先合并内容,再对合并后的内容处理,如果innerHTML内有img,会向服务器请求图片
    eg:
     for(var i=0;i<3;i++)
       box.innerHTML+= "<img src='exam.jpg'>"
     
    最终请求的是3个图片,而不是6个
     
    测试的时候,请将内容放到window.onload中,如果在页面没有加载完成前调用这个,假设页面上有同样的img,则页面上会直接读缓存
     
    实验显示:这个合并个数有上限,上限个数不清楚(可能和机器配置,ie版本等有关),超过上限后如何操作不清楚
     
    2、当回调操作中使用innerHTML+=操作时,ie不向服务器请求资源
    eg:
     
     var handle=setInterval(function(){insert();},500);
     function insert(box)
     {
        box.innerHTML += "<img src='exam.jpg'>";
     }
     
    这样用法没有向服务器发请求
     
    总结:
    innerHTML += 的问题只在IE中会出现,解决的问题可以使用IE下的insertAdjacentHTML方法代替
     
    insertAdjacentHTML 方法是将新内容直接追加到原有内容的后面,而不是清空innerHTML的内容再重复赋值,这样可以避免原innerHTML中的图片被重新加载的问题

     

    三、少用location.reload()

    使用location.reload() 会刷新页面,刷新页面时页面所有资源(css,js,img等)会重新请求服务器

    建议使用:location.href="当前页url" 代替location.reload() ,使用location.href 浏览器会读取本地缓存资源

  • 相关阅读:
    Thread.GetNamedDataSlot(String)
    .NET Core 常用加密和Hash工具NETCore.Encrypt
    .netcore在linux下使用P/invoke方式调用linux动态库
    IHttpAsyncHandler IHttpHandler
    Docker & ASP.NET Core 教程
    Docker在Linux上运行NetCore系列(一)配置运行DotNetCore控制台
    《异常检测》
    《awesome-AIOps》
    《Skyline 监控系统工作原理分析》
    《小团队撬动大数据——当当推荐团队的机器学习实践》
  • 原文地址:https://www.cnblogs.com/eoiioe/p/1460070.html
Copyright © 2020-2023  润新知