You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2021/07/13 14:54:11 UTC
[echarts] branch dataset-perf updated: refact(data): try to cache
dim name map in complete dimensions
This is an automated email from the ASF dual-hosted git repository.
shenyi pushed a commit to branch dataset-perf
in repository https://gitbox.apache.org/repos/asf/echarts.git
The following commit(s) were added to refs/heads/dataset-perf by this push:
new 7573ceb refact(data): try to cache dim name map in complete dimensions
7573ceb is described below
commit 7573ceb7e4e1818fc5b9c59e4b85eef801bd9317
Author: pissang <bm...@gmail.com>
AuthorDate: Tue Jul 13 22:52:39 2021 +0800
refact(data): try to cache dim name map in complete dimensions
---
src/data/helper/createDimensions.ts | 51 ++++++++++++++++++++++++-------------
1 file changed, 33 insertions(+), 18 deletions(-)
diff --git a/src/data/helper/createDimensions.ts b/src/data/helper/createDimensions.ts
index efd1dfb..3e69c40 100644
--- a/src/data/helper/createDimensions.ts
+++ b/src/data/helper/createDimensions.ts
@@ -29,13 +29,16 @@ import {
} from '../../util/types';
import SeriesData from '../SeriesData';
import DataDimensionInfo from '../DataDimensionInfo';
-import { clone, createHashMap, defaults, each, extend, HashMap, isObject, isString, keys, map } from 'zrender/src/core/util';
+import { clone, createHashMap, defaults, each, HashMap, isObject, isString, map } from 'zrender/src/core/util';
import OrdinalMeta from '../OrdinalMeta';
import { createSourceFromSeriesDataOption, isSourceInstance, Source } from '../Source';
-import DataStorage, { CtorInt32Array, CtorUint32Array } from '../DataStorage';
-import { normalizeToArray } from '../../util/model';
+import DataStorage, { CtorInt32Array } from '../DataStorage';
+import { makeInner, normalizeToArray } from '../../util/model';
import { BE_ORDINAL, guessOrdinal } from './sourceHelper';
+const inner = makeInner<{
+ dimNameMap: HashMap<DimensionIndex, DimensionName>
+}, Source>();
export interface CoordDimensionDefinition extends DimensionDefinition {
dimsDef?: (DimensionName | { name: DimensionName, defaultTooltip?: boolean })[];
@@ -98,12 +101,19 @@ export default function createDimensions(
opt = opt || {};
- const sysDims = (opt.coordDimensions || []).slice();
- const dimsDef = (opt.dimensionsDefine || source.dimensionsDefine || []).slice();
- const dataDimNameMap = createHashMap<DimensionIndex, DimensionName>();
+ const sysDims = opt.coordDimensions || [];
+ const dimsDef = opt.dimensionsDefine || source.dimensionsDefine || [];
const coordDimNameMap = createHashMap<true, DimensionName>();
const result: DataDimensionInfo[] = [];
const omitUnusedDimensions = opt.omitUnusedDimensions;
+ // Try to cache the dimNameMap if the dimensionsDefine is from source.
+ const canCacheDimNameMap = (dimsDef === source.dimensionsDefine && omitUnusedDimensions);
+ let dataDimNameMap = canCacheDimNameMap && inner(source).dimNameMap;
+ let needsUpdateDataDimNameMap = false;
+ if (!dataDimNameMap) {
+ needsUpdateDataDimNameMap = true;
+ dataDimNameMap = createHashMap<DimensionIndex, DimensionName>();
+ }
const dimCount = getDimCount(source, sysDims, dimsDef, opt.dimensionsCount);
@@ -137,19 +147,24 @@ export default function createDimensions(
return result[idx];
}
- // Apply user defined dims (`name` and `type`) and init result.
- for (let i = 0; i < dimCount; i++) {
- const dimDefItemRaw = dimsDef[i];
- const userDimName = isObject(dimDefItemRaw) ? dimDefItemRaw.name : dimDefItemRaw;
- // Name will be applied later for avoiding duplication.
- if (userDimName != null && dataDimNameMap.get(userDimName) == null) {
- // Only if `series.dimensions` is defined in option
- // displayName, will be set, and dimension will be diplayed vertically in
- // tooltip by default.
- dataDimNameMap.set(userDimName, i);
+ if (needsUpdateDataDimNameMap) {
+ for (let i = 0; i < dimCount; i++) {
+ const dimDefItemRaw = dimsDef[i];
+ const userDimName = isObject(dimDefItemRaw) ? dimDefItemRaw.name : dimDefItemRaw;
+ // Name will be applied later for avoiding duplication.
+ if (userDimName != null && dataDimNameMap.get(userDimName) == null) {
+ // Only if `series.dimensions` is defined in option
+ // displayName, will be set, and dimension will be diplayed vertically in
+ // tooltip by default.
+ dataDimNameMap.set(userDimName, i);
+ }
}
-
- if (!omitUnusedDimensions) {
+ if (canCacheDimNameMap) {
+ inner(source).dimNameMap = dataDimNameMap;
+ }
+ }
+ if (!omitUnusedDimensions) {
+ for (let i = 0; i < dimCount; i++) {
getResultItem(i);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org