/data_screen

react+echarts+flexible 数据大屏

Primary LanguageJavaScript

数据大屏调研文档

背景

数据大屏一般是在大屏幕上展示数据的变化,界面有以下特点

  • 体现未来科技感
  • 图表多样化
  • 地图多样化且动效感较强
  • 定制化点多

技术选型

技术栈 对比 原因
React / 单页面应用
组件懒加载
虚拟DOM对比,减少页面渲染性能消耗
符合现有团队技术体系
ECharts Bizcharts 图表单一,适合后台报表系统开发
HighCharts 国外开源项目,国内落地项目较少,文档英文版
D3.js 更细粒度的操作API,上手难度较大
ECharts
百度开源
落地项目、issue参考范围广
社区活跃度大,持续提供一些开源的图表
Api颗粒度较细,适合定制化图表
和现有技术栈无缝衔接
Less Css 预编译语言
API提高开发效率
适合现有项目打包机制
flexible.js 界面自适应处理

开发总结

物料

start(五部曲)

  • init方法实例化echarts对象,绑定对应DOM容器节点

    const myChart = echarts.init(document.querySelector('#id'));
  • 初始化option配置项

    const option = {
      xxx: 'xxx'
    }
  • setOption添加配置项

    myChart.setOption(option);
  • 暴露当前实例,供外层使用

    return myChart;
  • 适应屏幕缩放

    // 屏幕缩放对chart图表进行自适应处理,调用实例的resize方法
    window.onresize = () => {
      myChart.resize();
    }

优化

资源优化
  • 图片oss存储
组件优化
  • 依赖React.lazyApi,组件懒加载
  • 地图、地图物料按需加载
  • data-view-react组件按需加载
代码优化

注意事项

  • 尽可能使用flex布局,可以适配不同浏览器屏幕布局

  • 图片资源较多

    • 解决方案:oss或者cdn存储
  • 特殊字体自定义处理

    // 数字字体
    @font-face {
      // 定义字体名称
      font-family: electronicFont;
      // 字体资源
      src: url('../../assets/font/DS-DIGIT.TTF');
    }
  • 3D地球的引入

      option = {
        global: {
          baseTexture: 本地路径/canvas/echarts实例,
          // 地球高度纹理
          heightTexture: 本地路径/canvas/echarts实例,
        }
      }

学到什么

  • 屏幕适配方案:手淘方案flexible.js+rem
  • 按需加载
  • ehcarts开发应用
    • Api开发查找方式
      • series --> 各种图表大类
      • 外层对应的是更细粒度的API
      • 注意顺序以防止覆盖
    • 配合现有组件开发
    • 优化方案

TODO

  • 接口MOCK数据,刷新数据