• 关于页面逐步呈现的总结



    分块编码 ( chunked encoding )
    就是让 response 分块编码进行传输。response 分块编码,可以先传输一部分不需要处理的 html 代码到客户端,等其他耗时代码执行完毕后再传输另外的 html 代码。

    详细介绍,请参考:高性能 WEB 开发(11) - flush 让页面分块,逐步呈现


    假设有一个页面,一开始显示 cnblogs 的 logo 图标,3 秒钟后显示 csdn 的 logo 图标。

    我根据上文介绍,用 asp.net 实现了上述功能。

    ASP.NET 代码如下:

    flush让页面分块逐步呈现.aspx
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="flush让页面分块逐步呈现.aspx.cs" Inherits="Web_1.flush让页面分块逐步呈现" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        
    <title>flush让页面分块逐步呈现</title>
    </head>
    <body>
    <div id="head" style="border:1px solid #ccc;">
       cnblogs logo <img src="http://images.cnblogs.com/logo_small.gif" alt=""/>   
    </div>
    <% 
        
    // flush分块输出
        Response.BufferOutput = false
        Response.Flush();
        
    // Response.Output.Flush();
    %>
    <br /> 3 秒后加载下面内容...

    <div id="content" style="border:1px solid blue;">
        
    <%
            
    // 睡眠3秒
            System.Threading.Thread.Sleep(3000);
        
    %>
        csdn logo <img src="http://csdnimg.cn/www/images/csdnindex_piclogo.gif" alt=""/>   
    </div>
    </body>
    </html>


    JSP 代码如下:

    flush让页面分块逐步呈现.jsp
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        
    <title>flush让页面分块逐步呈现</title>
    </head>
    <body>
        
    <div id="head" style="border:1px solid #ccc;">
            cnblogs logo <br/>
            
    <img src="http://images.cnblogs.com/logo_small.gif" />   
        
    </div>
        
    <%
            out.flush(); // flush response,分块输出
        
    %>
        
    <br />
        
    <div id="content" style="border:1px solid blue;">
            
    <%
                
    // 睡眠3秒
                Thread.currentThread().sleep(3000);
            
    %>
            csdn logo <br/>
            
    <img src="http://csdnimg.cn/www/images/csdnindex_piclogo.gif" />   
        
    </div>
    </body>
    </html>

    演示地址:http://213.186.44.204:8080/ChunkTest/chunk.jsp

    如果想实现 tudou.com 首页图片延迟加载的效果,则可以使用 jquery 轻松实现。
    详细介绍,请参考:名站技术分析 - 浅谈 tudou.com 首页图片延迟加载的效果

    JQuery 代码如下:

    JQuery实现图片延迟加载的效果.html
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
    </head>
    <body>
      一开始能看到的图片:
      
    <img src="http://at-img4.tdimg.com/board/2010/5/tylc-115X55.jpg"/>
        
      
    <div id="lazyBox" style="margin-top:100px;">
           一开始看不到下面的图片,滚动鼠标后可以看见:
           
    <img width="120" height="90" style="border:1px solid blue;" class="lazyImg" alt="http://i01.img.tudou.com/data/imgs/i/051/871/396/m20.jpg" src="http://css.tudouui.com/skin/__g/img/sprite.gif" coords="_DBA"/>
      
    </div>

      
    <div style="height:1000px;"></div>    

      
    <script type="text/javascript">
          
    var hasShow = false;
          $(window).bind("scroll",function(){
              
    if(hasShow==true){
                  $(window).unbind("scroll");
                  
    return;
              }
              
    var t = $(document).scrollTop();
              
    if(t>50){
                  
    // 滚动高度超过50,加载图片
                  hasShow = true;
                  $("#lazyBox .lazyImg").each(function(){
                      $(this).attr("src",$(this).attr("alt"));
                  });
              }
          });
      
    </script>        
    </body>
    </html>


    相关阅读:

    高性能WEB开发(11) - flush 让页面分块,逐步呈现

    名站技术分析 - 浅谈 tudou.com 首页图片延迟加载的效果

    名站技术分析 — facebook 奇特的页面加载技术

    让 ajax 更加友好,实时显示后台处理进度

    作者: XuGang   网名:钢钢
    出处: http://xugang.cnblogs.com
    声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址!
  • 相关阅读:
    CSS:scroll-snap滚动事件停止及元素位置检测
    用100行代码,完成自己的前端构建工具!
    oneuijs/You-Dont-Need-jQuery
    移动端web app自适应布局探索与总结
    谈谈JavaScript MVC模式
    android 事件传递机制 心得
    Android中运行的错误:java.lang.UnsatisfiedLinkError: Couldn't load locSDK3: findLibrary returned null.
    安卓错误之app:transformClassesWithDexForDebug
    androidstudio 之 svn配置 汇总
    34. 高精度数除以单精度数
  • 原文地址:https://www.cnblogs.com/xugang/p/1762701.html
Copyright © 2020-2023  润新知