zoukankan      html  css  js  c++  java
  • 大数据前端优化策略

    1、策略

    将数据展示区域分为3个部分,上屏、下屏和中屏。中屏为可视区域,上下屏缓存即将加载的内容。缓存的原因是,在我们滚动滚动条的时候,js 需要时间来拼凑字符串(或者创建 Node ),这个时候浏览器还来不及渲染,所以会出现临时的空白,这种体验是相当不好的。

    上屏缓存内容
    sh = 一条数据的高度
    蓝色为可视区域
     
    下屏缓存内容
    2、算法说明

    1)可视区域的高度:height = 300;

    2)首页确认展示一条数据的高度:sh = 20;

    3)计算可视区域最多展示多少条数据:showLen = parseInt(height/sh);

    4)滚动条滚动的高度:srollTop = $(this).scrollTop();

    5)计算展示数据开始/结束的下标:startIndx = parseInt(slTop/sh);endIndx = Math.min(startIndx + showLen*2, total - 1);

    6)插入DOM;

    7)滚动条滚动时,将不在三个区域中的dom从页面移除;

    3、DEMO
    <div id="box"></div>
    #box {position: relative; height: 300px; width: 200px; border:1px solid #CCC; overflow: auto}
    #box div { position: absolute; height: 20px; width: 100%; left: 0; overflow: hidden; font: 16px/20px Courier;}
    var sh = 20, // 一条数据占据的高度
        total = 10000, // 1W条数据
        box = $('#box'),// 展示数据的box
        height = box.height(), // 可视区域高度
        data = [], // 数据源
        showLen = parseInt(height/sh); // 可视区域容纳N条数据
    
    // 初始化数据源
    for(var a=0;a<total;a++){
        data.push('item-show: '+a);
    }
    
    box.scroll(function(){
        var i=0,
            s,
            childList = box.find('div'),
            srollTop = $(this).scrollTop(),
            startIndx = Math.max(parseInt(srollTop/sh),0),
            endIndx = Math.min(startIndx + showLen*2, total - 1);
        
        // 生成数据列表
        for(s=startIndx;s<endIndx;s++){
            // 判断插入的数据是否存在
            if(!childList[s]){
                insert(s);
            }else{
                var exIdx = $(childList[s]).attr('idx');
                // 存在的DOM下标与即将插入的数据下标不一致则追加DOM
                if(exIdx!=s){
                    insert(s);
                }
            }
        }
        // 移除三屏外的DOM
        while(child=childList[i++]){
            var index = $(child).attr('idx');
            if((index>endIndx||index<Math.max(startIndx-15,0))&&index!=total-1){
               $(child).remove();
            }
        }
        
        
    })
    // 追加数据方法
    function insert(i){
        var txt = data[i];
        var top = i*sh;// 设置top属性,让滚动条拉长,让用户感觉存了很多条数据
        var str = '<div style="top:'+top+'px" idx="'+i+'">'+txt+'</div>';
        var child = box.find('div');
        box.append(str);           
    }
    
    box.scroll()
    // 默认插入最后一条数据,设置top属性,让滚动条拉长
    insert(total-1)

    参考文档:http://www.cnblogs.com/hustskyking/p/million-data-show-in-front-end.html

  • 相关阅读:
    ENVI【遥感图像预处理之图像的几何校正】
    ENVI数据显示操作【Tools菜单操作1】
    ENVI软件操作【数据显示操作——Overlay菜单操作】
    ENVI软件操作之【数据的显示操作】
    ADO.NET操作数据库(一)
    ASP.Net之数据绑定
    动态网页的建立
    VS2010安装异常中断后无法安装的解决方法(安装时发生严重错误)
    linux vi 删除多行的方法
    简单实现异步编程promise模式
  • 原文地址:https://www.cnblogs.com/SCOOL/p/4031246.html
Copyright © 2011-2022 走看看