35zTree - 一次性加载大数据量

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 35zTree - 一次性加载大数据量

效果图:

代码:

<!DOCTYPE html>
<HTML>
<HEAD>
  <TITLE> ZTREE DEMO - big data common</TITLE>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <link rel="stylesheet" href="../../../css/demo.css" type="text/css">
  <link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">
  <script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>
  <script type="text/javascript" src="../../../js/jquery.ztree.core.js"></script>
  <script type="text/javascript" src="../../../js/jquery.ztree.excheck.js"></script>
  <script type="text/javascript" src="../../../js/jquery.ztree.exedit.js"></script>
  <SCRIPT type="text/javascript">
    <!--
    var setting = {
      check: {
        enable: true
      },
      data: {
        simpleData: {
          enable: true
        }
      },
      callback: {
        onNodeCreated: onNodeCreated
      }
    };
    var dataMaker = function(count) {
      var nodes = [], pId = -1,
      min = 10, max = 90, level = 0, curLevel = [], prevLevel = [], levelCount,
      i = 0,j,k,l,m;
      while (i<count) {
        if (level == 0) {
          pId = -1;
          levelCount = Math.round(Math.random() * max) + min;
          for (j=0; j<levelCount && i<count; j++, i++) {
            var n = {id:i, pId:pId, name:"Big-" +i};
            nodes.push(n);
            curLevel.push(n);
          }
        } else {
          for (l=0, m=prevLevel.length; l<m && i<count; l++) {
            pId = prevLevel[l].id;
            levelCount = Math.round(Math.random() * max) + min;
            for (j=0; j<levelCount && i<count; j++, i++) {
              var n = {id:i, pId:pId, name:"Big-" +i};
              nodes.push(n);
              curLevel.push(n);
            }
          }
        }
        prevLevel = curLevel;
        curLevel = [];
        level++;
      }
      return nodes;
    }
    var ruler = {
      doc: null,
      ruler: null,
      cursor: null,
      minCount: 5000,
      count: 5000,
      stepCount:500,
      minWidth: 30,
      maxWidth: 215,
      init: function() {
        ruler.doc = $(document);
        ruler.ruler = $("#ruler");
        ruler.cursor = $("#cursor");
        if (ruler.ruler) {
          ruler.ruler.bind("mousedown", ruler.onMouseDown);
        }
      },
      onMouseDown: function(e) {
        ruler.drawRuler(e, true);
        ruler.doc.bind("mousemove", ruler.onMouseMove);
        ruler.doc.bind("mouseup", ruler.onMouseUp);
        ruler.doc.bind("selectstart", ruler.onSelect);
        $("body").css("cursor", "pointer");
      },
      onMouseMove: function(e) {
        ruler.drawRuler(e);
        return false;
      },
      onMouseUp: function(e) {
        $("body").css("cursor", "auto");
        ruler.doc.unbind("mousemove", ruler.onMouseMove);
        ruler.doc.unbind("mouseup", ruler.onMouseUp);
        ruler.doc.unbind("selectstart", ruler.onSelect);
        ruler.drawRuler(e);
      },
      onSelect: function (e) {
        return false;
      },
      getCount: function(end) {
        var start = ruler.ruler.offset().left+1;
        var c = Math.max((end - start), ruler.minWidth);
        c = Math.min(c, ruler.maxWidth);
        return {width:c, count:(c - ruler.minWidth)*ruler.stepCount + ruler.minCount};
      },
      drawRuler: function(e, animate) {
        var c = ruler.getCount(e.clientX);
        ruler.cursor.stop();
        if ($.browser.msie || !animate) {
          ruler.cursor.css({width:c.width});
        } else {
          ruler.cursor.animate({width:c.width}, {duration: "fast",easing: "swing", complete:null});
        }
        ruler.count = c.count;
        ruler.cursor.text(c.count);
      }
    }
    var showNodeCount = 0;
    function onNodeCreated(event, treeId, treeNode) {
      showNodeCount++;
    }
    function createTree () {
      var zNodes = dataMaker(ruler.count);
      showNodeCount = 0;
      $("#treeDemo").empty();
      setting.check.enable = $("#showChk").attr("checked");
      var time1 = new Date();
      $.fn.zTree.init($("#treeDemo"), setting, zNodes);
      var time2 = new Date();
      alert("节点共 " + zNodes.length + " 个, 初始化生成 DOM 的节点共 " + showNodeCount + " 个"
        + "\n\n 初始化 zTree 共耗时: " + (time2.getTime() - time1.getTime()) + " ms");
    }
    $(document).ready(function(){
      ruler.init("ruler");
      $("#createTree").bind("click", createTree);
    });
    //-->
  </SCRIPT>
 </HEAD>
<BODY>
<h1>一次性加载大数据量</h1>
<h6>[ 文件路径: bigdata/common.html ]</h6>
<div class="content_wrap">
  <div class="zTreeDemoBackground left">
    <ul>
    <li><span>调整总节点数,测试加载速度:</span>
      <div id="ruler" class="ruler" title="拖拽可调整节点数">
        <div id="cursor" class="cursor">5000</div>
      </div>
      <div style="width:220px; text-align: center;">
        <span>checkbox</span><input type="checkbox" id="showChk" title="是否显示 checkbox" class="checkbox first" />&nbsp;&nbsp;&nbsp;&nbsp;
        [ <a id="createTree" href="#" title="初始化 zTree" onclick="return false;">初始化 zTree</a> ]
      </div>
    </li>
    </ul>
    <ul id="treeDemo" class="ztree"></ul>
  </div>
  <div class="right">
    <ul class="info">
      <li class="title"><h2>1、大数据量加载说明</h2>
        <ul class="list">
        <li>1)、zTree v3.x 针对大数据量一次性加载进行了更深入的优化,实现了延迟加载功能,即不展开的节点不创建子节点的 DOM。</li>
        <li class="highlight_red">2)、对于每级节点最多一百左右,但总节点数几千甚至几万,且不是全部展开的数据,一次性加载的效果最明显,速度非常快。</li>
        <li class="highlight_red">3)、对于某一级节点数就多达几千的情况 延迟加载无效,这种情况建议考虑分页异步加载。</li>
        <li class="highlight_red">4)、对于全部节点都展开显示的情况,延迟加载无效,这种情况建议不要全部展开。</li>
        <li>5)、显示 checkbox / radio 会造成一定程度的性能下降。</li>
        <li>6)、利用 addDiyDom 功能增加自定义控件会影响速度,影响程度受节点数量而定。</li>
        <li>7)、利用 onNodeCreated 事件回调函数对节点 DOM 进行操作会影响速度,影响程度受节点数量而定。</li>
        </ul>
      </li>
      <li class="title"><h2>2、setting 配置信息说明</h2>
        <ul class="list">
        <li>不需要进行特殊的配置</li>
        </ul>
      </li>
      <li class="title"><h2>3、treeNode 节点数据说明</h2>
        <ul class="list">
        <li>对 节点数据 没有特殊要求,用户可以根据自己的需求添加自定义属性</li>
        </ul>
      </li>
    </ul>
  </div>
</div>
</BODY>
</HTML>
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
5月前
|
缓存 JavaScript 前端开发
同步加载、异步加载、延迟加载、预加载的区别
同步加载、异步加载、延迟加载、预加载的区别
167 0
|
12月前
|
JavaScript 前端开发 Java
14jqGrid - 一次性加载数据
14jqGrid - 一次性加载数据
70 0
|
11天前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
本文介绍了Twaver HTML5中数据的批量加载方法,通过使用`box.startBatch()`可以在大量数据加载时提高性能。文章通过示例代码展示了如何在React组件中使用批量加载功能,以减少界面重绘次数并提升效率。
27 1
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
|
2月前
|
缓存 JavaScript 前端开发
【Vue面试题七】、SPA (单页面) 首屏加载速度慢怎么解决?
这篇文章探讨了单页面应用(SPA)首屏加载速度慢的问题,并提供了多种解决方案,包括减小入口文件体积、静态资源本地缓存、UI框架按需加载、图片资源压缩、组件重复打包、开启GZip压缩和使用服务端渲染(SSR),以优化资源加载和页面渲染,改善用户体验。
【Vue面试题七】、SPA (单页面) 首屏加载速度慢怎么解决?
|
JSON JavaScript 前端开发
Echarts高级进阶教程(2):appendData异步加载大数据量分片加载数据和增量渲染的解决方案
Echarts高级进阶教程(2):appendData异步加载大数据量分片加载数据和增量渲染的解决方案
1006 0
|
22天前
|
缓存 前端开发
SPA首屏加载速度慢的怎么解决?
SPA首屏加载速度慢的怎么解决?
21 0
|
5月前
|
缓存 数据安全/隐私保护 UED
深入了解304缓存原理:提升网站性能与加载速度
深入了解304缓存原理:提升网站性能与加载速度
|
缓存 JavaScript 前端开发
SPA(单页应用)首屏加载速度慢怎么解决?
SPA(单页应用)首屏加载速度慢怎么解决?
95 0
|
数据可视化
Echarts高级进阶教程(3):appendData大数据量分片加载数据增量渲染和常规思路异步加载数据的对比,对折线图是无效的
Echarts高级进阶教程(3):appendData大数据量分片加载数据增量渲染和常规思路异步加载数据的对比,对折线图是无效的
348 0
|
前端开发 JavaScript API
MonacoEditor 加载很慢该怎么优化?
MonacoEditor 加载很慢该怎么优化?
1226 0