Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
半栈学徒
incubator-echarts
提交
529504b3
I
incubator-echarts
项目概览
半栈学徒
/
incubator-echarts
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
incubator-echarts
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
529504b3
编写于
9月 25, 2020
作者:
Y
Yi Shen
提交者:
GitHub
9月 25, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #13339 from apache/list-remove-chunk
[5.0] [Performance] Remove chunk in List storage
上级
6b37266d
d29caa8d
变更
5
展开全部
显示空白变更内容
内联
并排
Showing
5 changed file
with
249 addition
and
306 deletion
+249
-306
src/chart/line/poly.ts
src/chart/line/poly.ts
+1
-1
src/data/List.ts
src/data/List.ts
+196
-294
src/data/helper/dataProvider.ts
src/data/helper/dataProvider.ts
+39
-2
src/processor/dataSample.ts
src/processor/dataSample.ts
+7
-7
test/sample-compare.html
test/sample-compare.html
+6
-2
未找到文件。
src/chart/line/poly.ts
浏览文件 @
529504b3
...
...
@@ -77,7 +77,7 @@ function drawSegment(
const
dy
=
y
-
prevY
;
// Ignore tiny segment.
if
((
dx
*
dx
+
dy
*
dy
)
<
1
)
{
if
((
dx
*
dx
+
dy
*
dy
)
<
0.5
)
{
idx
+=
dir
;
continue
;
}
...
...
src/data/List.ts
浏览文件 @
529504b3
此差异已折叠。
点击以展开。
src/data/helper/dataProvider.ts
浏览文件 @
529504b3
...
...
@@ -34,11 +34,10 @@ import {
SERIES_LAYOUT_BY_COLUMN
,
SERIES_LAYOUT_BY_ROW
,
DimensionName
,
DimensionIndex
,
OptionSourceData
,
DimensionIndexLoose
,
OptionDataItem
,
OptionDataValue
,
SourceFormat
,
SeriesLayoutBy
DimensionIndexLoose
,
OptionDataItem
,
OptionDataValue
,
SourceFormat
,
SeriesLayoutBy
,
ParsedValue
}
from
'
../../util/types
'
;
import
List
from
'
../List
'
;
export
interface
DataProvider
{
// If data is pure without style configuration
pure
:
boolean
;
...
...
@@ -48,6 +47,12 @@ export interface DataProvider {
getSource
():
Source
;
count
():
number
;
getItem
(
idx
:
number
,
out
?:
OptionDataItem
):
OptionDataItem
;
fillStorage
?(
start
:
number
,
end
:
number
,
out
:
ArrayLike
<
ParsedValue
>
[],
extent
:
number
[][]
):
void
appendData
(
newData
:
ArrayLike
<
OptionDataItem
>
):
void
;
clean
():
void
;
}
...
...
@@ -56,6 +61,14 @@ export interface DataProvider {
let
providerMethods
:
Dictionary
<
any
>
;
let
mountMethods
:
(
provider
:
DefaultDataProvider
,
data
:
OptionSourceData
,
source
:
Source
)
=>
void
;
export
interface
DefaultDataProvider
{
fillStorage
?(
start
:
number
,
end
:
number
,
out
:
ArrayLike
<
ParsedValue
>
[],
extent
:
number
[][]
):
void
}
/**
* If normal array used, mutable chunk size is supported.
* If typed array used, chunk size must be fixed.
...
...
@@ -144,6 +157,7 @@ export class DefaultDataProvider implements DataProvider {
if
(
sourceFormat
===
SOURCE_FORMAT_TYPED_ARRAY
)
{
provider
.
getItem
=
getItemForTypedArray
;
provider
.
count
=
countForTypedArray
;
provider
.
fillStorage
=
fillStorageForTypedArray
;
}
else
{
const
rawItemGetter
=
getRawSourceItemGetter
(
sourceFormat
,
seriesLayoutBy
);
...
...
@@ -167,6 +181,29 @@ export class DefaultDataProvider implements DataProvider {
return
out
;
};
const
fillStorageForTypedArray
:
DefaultDataProvider
[
'
fillStorage
'
]
=
function
(
this
:
DefaultDataProvider
,
start
:
number
,
end
:
number
,
storage
:
ArrayLike
<
ParsedValue
>
[],
extent
:
number
[][]
)
{
const
data
=
this
.
_data
as
ArrayLike
<
number
>
;
const
dimSize
=
this
.
_dimSize
;
for
(
let
dim
=
0
;
dim
<
dimSize
;
dim
++
)
{
const
dimExtent
=
extent
[
dim
];
let
min
=
dimExtent
[
0
]
==
null
?
Infinity
:
dimExtent
[
0
];
let
max
=
dimExtent
[
1
]
==
null
?
-
Infinity
:
dimExtent
[
1
];
const
count
=
end
-
start
;
const
arr
=
storage
[
dim
];
for
(
let
i
=
0
;
i
<
count
;
i
++
)
{
const
val
=
data
[(
start
+
i
)
*
dimSize
+
dim
];
arr
[
start
+
i
]
=
val
;
val
<
min
&&
(
min
=
val
);
val
>
max
&&
(
max
=
val
);
}
dimExtent
[
0
]
=
min
;
dimExtent
[
1
]
=
max
;
}
};
const
countForTypedArray
:
DefaultDataProvider
[
'
count
'
]
=
function
(
this
:
DefaultDataProvider
)
{
...
...
src/processor/dataSample.ts
浏览文件 @
529504b3
...
...
@@ -83,20 +83,20 @@ export default function (seriesType: string): StageHandler {
const
data
=
seriesModel
.
getData
();
const
sampling
=
seriesModel
.
get
(
'
sampling
'
);
const
coordSys
=
seriesModel
.
coordinateSystem
;
// Only cartesian2d support down sampling
if
(
coordSys
.
type
===
'
cartesian2d
'
&&
sampling
)
{
const
count
=
data
.
count
();
// Only cartesian2d support down sampling. Disable it when there is few data.
if
(
count
>
10
&&
coordSys
.
type
===
'
cartesian2d
'
&&
sampling
)
{
const
baseAxis
=
coordSys
.
getBaseAxis
();
const
valueAxis
=
coordSys
.
getOtherAxis
(
baseAxis
);
const
extent
=
baseAxis
.
getExtent
();
const
dpr
=
api
.
getDevicePixelRatio
();
// Coordinste system has been resized
const
size
=
Math
.
abs
(
extent
[
1
]
-
extent
[
0
]);
const
rate
=
Math
.
round
(
data
.
count
()
/
size
);
const
size
=
Math
.
abs
(
extent
[
1
]
-
extent
[
0
])
*
(
dpr
||
1
)
;
const
rate
=
Math
.
round
(
count
/
size
);
if
(
rate
>
1
)
{
if
(
sampling
===
'
lttb
'
)
{
seriesModel
.
setData
(
data
.
lttbDownSample
(
data
.
mapDimension
(
baseAxis
.
dim
),
data
.
mapDimension
(
valueAxis
.
dim
),
size
));
seriesModel
.
setData
(
data
.
lttbDownSample
(
data
.
mapDimension
(
valueAxis
.
dim
),
1
/
rate
));
}
let
sampler
;
if
(
typeof
sampling
===
'
string
'
)
{
...
...
test/sample-compare.html
浏览文件 @
529504b3
...
...
@@ -167,9 +167,11 @@ under the License.
}]
};
const
startTime
=
performance
.
now
();
myChart
.
setOption
(
opts
,
true
);
myChart
.
setOption
(
opts
,
{
notMerge
:
true
});
const
endTime
=
performance
.
now
();
titleDom
.
innerHTML
=
`
${
title
}
(
${
data
.
length
/
4
}
)
${(
endTime
-
startTime
).
toFixed
(
0
)}
ms`
;
titleDom
.
innerHTML
=
`
${
title
}
(
${
data
.
length
/
4
*
3
}
)
${(
endTime
-
startTime
).
toFixed
(
0
)}
ms`
;
}
let
status
=
document
.
getElementById
(
'
status
'
);
status
.
textContent
=
'
Fetching data.json (2.07MB)....
'
;
...
...
@@ -185,10 +187,12 @@ under the License.
makeChart
(
data
,
'
warmup
'
);
makeChart
(
data
,
'
warmup
'
,
'
lttb
'
);
makeChart
(
data
,
'
warmup
'
,
'
average
'
);
makeChart
(
data
,
'
warmup
'
,
'
max
'
);
}
status
.
textContent
=
'
Running
'
;
setTimeout
(()
=>
makeChart
(
data
,
'
No Sampling
'
,
null
),
500
);
setTimeout
(()
=>
makeChart
(
data
,
'
LTTB Sampling
'
,
'
lttb
'
),
1000
);
setTimeout
(()
=>
makeChart
(
data
,
'
Max Sampling
'
,
'
max
'
),
1500
);
setTimeout
(()
=>
makeChart
(
data
,
'
Average Sampling
'
,
'
average
'
),
1500
);
});
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录