ECharts 5.5.0 功能

增强的 ESM 支持

此功能是对默认 ESM 包的重大更改,专为开发人员测试和模块定制场景中的 Node.js 使用而设计。

此前,ECharts 只导出*.esmnpm 中的文件(位于 npm 包的 lib 目录中)。虽然这在捆绑器中运行良好,但在 Node.js 运行时和一些基于 Node.js 的测试框架(如 vitest 和 jest)中表现不佳。

通过这个新功能,我们进行了一些更改来改进这一点:

  1. 添加”type”: “module”到 package.json
  2. 添加”exports”: {…}”到 package.json
  3. package.json在子目录中添加了一些文件,其中仅包含”type”: “commonjs”. 这些更改意味着echarts/core.js现在可以在纯 Node.js、vitest、jest 和 create-react-app 等环境中将此类文件解析为 ESM。

这个新功能与各种环境兼容,包括运行时(node/vitest/jest(create-react-app)/ssr/…)和捆绑器(webpack/rollup/vite/esbuild/…) 。

服务器端渲染+轻量级客户端运行时

Apache ECharts 功能强大,但相应的,它的包体积也较大。我们在之前的版本中做出了各种努力来改进这一点。开发者可以根据需要使用TreeShaking加载部分代码,减少加载的代码量。从 Apache ECharts 5.3 版本开始,我们支持零依赖的服务器端 SVG 字符串渲染解决方案,并支持图表的初始动画。这样,使用服务端渲染的结果作为首屏渲染,可以大大减少首屏加载时间。

虽然服务端渲染是减少包大小的有效解决方案,但如果需要在客户端实现一些交互,仍然需要加载echarts.js,这可能会增加加载时间。对于某些需要更快页面加载的场景,这可能不是一个理想的选择。

在5.5.0版本中,我们为客户端添加了轻量级运行时,因此客户端不需要加载完整的ECharts来实现一些交互。这样我们就可以在服务器端渲染图表,然后在客户端加载轻量级运行时来实现一些常见的交互。这意味着只需要 4KB 的轻量级运行时(gzip 之后为 1KB)即可实现具有初始动画和一些常用交互形式的图表。这一改进将大大提高页面加载速度,尤其是移动体验。

ECharts 5.5.0 功能以这个带标题的饼图为例,如果客户端只打包饼图和标题组件,gzip后需要135KB;如果采用服务器端渲染方案,渲染结果SVG经过gzip后为1KB,客户端运行时gzip后为1KB,仅为前者体积的1.5%。交互方面,后者还可以实现初始动画、鼠标移动到图表元素后高亮、获取点击事件等,可以满足大部分常见的交互需求。

如果您需要使用该方案,服务器端代码保持不变,但需要确保ECharts版本在5.5.0以上。

服务端node代码

 Server-side code
const echarts = require('echarts');

// In SSR mode the first container parameter is not required
const chart = echarts.init(null, null, {
  renderer: 'svg', // must use SVG rendering mode
  ssr: true, // enable SSR
  width: 400, // need to specify height and width
  height: 300
});

// use setOption as normal
chart.setOption({
  //...
});

// Output a string
const svgStr = chart.renderToSVGString();

// Dispose it to release memory
chart.dispose();
chart = null;

// Response to the browser (using Express.js as example):
res.writeHead(200, {
  'Content-Type''application/xml'
});
res.write(svgStr);
res.end();

客户端将获得的SVG字符串添加到容器中并绑定轻量级运行时:

<div id="chart-container" style="width:800px;height:600px"></div>

<script src="https://cdn.jsdelivr.net/npm/echarts/ssr/client/dist/index.min.js"></script>
<script>
const ssrClient = window['echarts-ssr-client'];

let isSeriesShown = {
  a: true,
  b: true
};

function updateChart(svgStr) {
  const container = document.getElementById('chart-container');
  container.innerHTML = svgStr;

  // Use lightweight runtime to give the chart interactive capabilities
  ssrClient.hydrate(main, {
    on: {
      click: (params) => {
        if (params.ssrType === 'legend') {
          // Click the legend element, request the server for secondary rendering
          isSeriesShown[params.seriesName] = !isSeriesShown[params.seriesName];
          fetch('...?series=' + JSON.stringify(isSeriesShown))
            .then(res => res.text())
            .then(svgStr => {
              updateChart(svgStr);
            });
        }
      }
    }
  });
}

// Get the SVG string rendered by the server through AJAX request
fetch('...')
  .then(res => res.text())
  .then(svgStr => {
    updateChart(svgStr);
  });
</script>

轻量级客户端运行时必须与SVG格式的服务器端渲染结果结合使用,支持以下交互:

  1. 图表初始动画(实现原理:服务器渲染的SVG有CSS动画)
  2. 高亮样式(实现原理:服务器渲染的SVG有CSS动画)
  3. 动态改变数据(实现原理:轻量级运行时请求服务器二次渲染)
  4. 点击图例切换是否显示系列(实现原理:轻量级运行时请求服务器二次渲染) 可以看到,这可以满足大多数交互场景的需求

数据钻取支持过渡动画

在5.5.0版本中,我们增加了childGroupId配置项,可以实现数据钻取的过渡动画功能。

在之前的版本中,我们已经支持使用groupId来表示当前数据所属的组。新增的childGroupId可以用来表示当前数据本身的分组,与 结合使用后形成“父子孙”关系链groupId。当用户点击图表中的数据元素时,图表将以过渡动画的形式显示向下钻取的数据。

ECharts 5.5.0 功能开发者只需指定groupId和childGroupId,ECharts 就会自动处理层级关系并实现过渡动画。

饼图支持部门之间的差距

ECharts 5.5.0 功能

饼图和极坐标系支持结束角度

ECharts 5.5.0 功能

添加了两种语言:阿拉伯语和荷兰语

在版本 5.5.0 中,我们添加了对两种语言的支持:阿拉伯语 (AR) 和荷兰语 (NL)。开发者可以通过echarts.registerLocale方法注册新的语言包。

工具提示支持指定容器

在以前的版本中,工具提示只能插入图表容器或document.body. 现在,您可以通过tooltip.appendTo指定容器,这样您就可以更灵活地控制工具提示的位置。

轴上最大最小标签的对齐方式

在5.5.0版本中,我们增加了axisLabel.alignMinLabel和axisLabel.alignMaxLabel配置项,可以控制轴上最大和最小标签的对齐模式。如果图表的绘制区域比较大,并且不希望轴标签溢出,可以将最大和最小标签分别向右和向左对齐。

图形条形图支持剪切

图形条形图可能会超出绘图区域。如果想避免这种情况,可以通过series-pictorialBar.clip配置项进行剪辑。

dataIndex为工具提示添加了参数valueFormatter

valueFormatter可以用来自定义tooltip内容的value部分,现在dataIndex增加了一个参数,可以用来获取当前数据的索引。


原文始发于微信公众号(阿勇学前端):ECharts 5.5.0 功能

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/248527.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!