小程序中使用ECharts的一种实践 - 基础篇

小程序中使用ECharts目前有两种方案,我们先看下两种方案的使用实践,之后看下两种方案的区别与优缺点,最后探讨我们目前应该使用哪种方案。

小程序包体积的提示:小程序单个分包/主包大小不能超过2M,整个小程序所有分包大小不超过20M

方案一:使用echarts-for-weixin中的官方组件

如何使用:

  1. clone官方库 echarts-for-weixin 到本地,将其中的ec-canvas目录复制到自己项目的某个目录下(如components)
  2. 在自己的组件或页面中,按如下方式使用,
json 复制代码
{
  "usingComponents": {
    "ec-canvas": "../components/ec-canvas/ec-canvas"
  }
}
html 复制代码
<view class="container">
  <ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
javascript 复制代码
function initChart(canvas, width, height, dpr) {
  const chart = echarts.init(canvas, null, {
    width: width,
    height: height,
    devicePixelRatio: dpr // 像素比
  });
  canvas.setChart(chart);
  var option = {
    ...
  };
  chart.setOption(option);
  return chart;
}

Page({
  data: {
    ec: {
      onInit: initChart
    }
  }
});

这里是一些使用说明:

  1. 这里的ec是约定的配置对象,其中约定onInit为canvas组件就绪后的一个回调函数,在这里开发者可以完成获得echart实例,并将echart实例更新到canvas对象上,然后通过setOption可渲染不同的图表。
  2. 属性canvas-id不能相同
  3. 如果没有配置ec属性,可以监听init事件,同样可以得到对应的回调参数。
  4. 属性forceUseOldCanvas,为可配置是否使用旧版canvas,目前强烈不推荐使用,默认为false
  5. 通过小程序依赖分析可知,ec-canvas 文件夹大小为1006k, 如果直接使用,在只有一个页面的情况下,包体积也将是1010k。
  6. 如有必要,将 ec-canvas 目录下的 echarts.js 替换为最新版的 ECharts。如果希望减小包体积大小,可以使用自定义构建生成并替换 echarts.js

最佳实践推荐设置:

  1. 使用自定义构建生成并替换echarts.js ,如上面的示例,如果仅选择柱状图,则包体积将缩小到493k
  2. 将ec-canvas文件夹放在分包的目录中且使用ec-canvas的页面放在分包中,即可在减小主包体积

小程序示例代码developers.weixin.qq.com/s/mt5w4Tmr7...

方案二:使用插件市场中的"ECharts图表组件"

如何使用:

可参见此文章对应插件文档。 该插件提供两种方式

  • v2.1.1 完整版,插件会计算到小程序的分包(主包)中,该完整版占用978.6k大小
  • v2.1.0 轻量版,没有ECharts依赖库,需自行引入,这里也可以使用官方的自定义构建以减小体积。体积会减少到500k左右

下方为使用轻量版的

  1. 在mp后台申请添加该插件
  2. 在app.json中添加该插件(可按需放在主包或分包中)
javascript 复制代码
  "subPackages": [
    {
      "root": "sub-pages/demos",
      "pages": [
        "index2/index2"
      ],
      "plugins": {
        "echarts": {
          "version": "2.1.0",
          "provider": "wx1db9e5ab1149ea03"
        }
      }
    }
  ]
javascript 复制代码
{
  "plugins": {
		"echarts": {
      "version": "2.1.0",
      "provider": "wx1db9e5ab1149ea03"
    }
	}
}
  1. 在使用的组件或页面中添加该插件
javascript 复制代码
{
  "usingComponents": {
    "chart": "plugin://echarts/chart"
  }
}
  1. 在页面中使用
javascript 复制代码
<chart chart-class="chart" id="chart-1" option="{{ option }}" bindinstance="onInstance" />

最佳实践推荐设置:

  1. 使用v2.1.0轻量版,并按需自定义构建引入ECharts文件(必须为v5.1.2版本
  2. 将该插件配置到分包中,并在分包中使用该插件,将自定义构建的ECharts文件也放在分包中

因为该插件需要小程序申请,正常预览需要切换为自己的已开通该插件的小程序的appId

小程序示例代码developers.weixin.qq.com/s/lEa5U2mW7...

方案比较

整体小程序包体积比较

体积接近

优缺点

  • 插件方式-版本为5.1.2,已经很新了,但不是最新版本,echarts-for-weixin可以使用最新版本
  • 都支持自定义构建后按需使用

推荐方案

  • 综上,推荐方案一:官方方案(echarts-for-weixin)
  • **可按实际需求进行灵活封装,针对不同场景进行数据更新和实例的销毁:**可参考www.yuque.com/super-ozy5r... 《Vue2中ECharts简单封装的一种实践-详》
  • 常见问题及不支持的特性见 github

进一步的实践可以看下篇小程序中使用ECharts的一种实践 - 落地篇 如有更好的想法和思考,欢迎评论交流。

本文不代表官方,仅为个人的一种实践,具体场景以官方文档为准。

参考:

相关推荐
码界筑梦坊5 分钟前
243-基于Django与VUE的笔记本电脑数据可视化分析系统
vue.js·python·信息可视化·数据分析·django·毕业设计·echarts
黄毛火烧雪下13 分钟前
React Native (RN)项目在web、Android和IOS上运行
android·前端·react native
fruge18 分钟前
前端正则表达式实战合集:表单验证与字符串处理高频场景
前端·正则表达式
baozj23 分钟前
🚀 手动改 500 个文件?不存在的!我用 AST 撸了个 Vue 国际化神器
前端·javascript·vue.js
用户40993225021232 分钟前
为什么Vue 3的计算属性能解决模板臃肿、性能优化和双向同步三大痛点?
前端·ai编程·trae
海云前端132 分钟前
Vue首屏加速秘籍 组件按需加载真能省一半时间
前端
蛋仔聊测试34 分钟前
Playwright 中route 方法模拟测试数据(Mocking)详解
前端·python·测试
零号机1 小时前
使用TRAE 30分钟极速开发一款划词中英互译浏览器插件
前端·人工智能
疯狂踩坑人1 小时前
结合400行mini-react代码,图文解说React原理
前端·react.js·面试
Mintopia1 小时前
🚀 共绩算力:3分钟拥有自己的文生图AI服务-容器化部署 StableDiffusion1.5-WebUI 应用
前端·人工智能·aigc