Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
missman
incubator-echarts
提交
3fbae632
I
incubator-echarts
项目概览
missman
/
incubator-echarts
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
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,发现更多精彩内容 >>
提交
3fbae632
编写于
12月 25, 2017
作者:
P
pissang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Optimize memory cost when using typed array data. Handling typed array in completeDimensions.
上级
b42e8a5a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
70 addition
and
20 deletion
+70
-20
src/chart/helper/createListFromArray.js
src/chart/helper/createListFromArray.js
+15
-1
src/data/List.js
src/data/List.js
+49
-16
src/data/helper/completeDimensions.js
src/data/helper/completeDimensions.js
+5
-2
src/model/Series.js
src/model/Series.js
+1
-1
未找到文件。
src/chart/helper/createListFromArray.js
浏览文件 @
3fbae632
...
...
@@ -26,11 +26,20 @@ function createListFromArray(data, seriesModel, ecModel) {
data
=
data
||
[];
if
(
__DEV__
)
{
if
(
!
zrUtil
.
isArray
(
data
))
{
if
(
!
zrUtil
.
isArray
Like
(
data
))
{
throw
new
Error
(
'
Invalid data.
'
);
}
}
var
isDataTypedArray
=
zrUtil
.
isTypedArray
(
data
);
if
(
isDataTypedArray
)
{
if
(
__DEV__
)
{
if
(
!
seriesModel
.
get
(
'
dimensions
'
))
{
throw
new
Error
(
'
dimensions must be given if data is a
'
+
Object
.
prototype
.
toString
.
call
(
data
));
}
}
}
var
coordSysName
=
seriesModel
.
get
(
'
coordinateSystem
'
);
var
creator
=
creators
[
coordSysName
];
var
registeredCoordSys
=
CoordinateSystem
.
get
(
coordSysName
);
...
...
@@ -39,9 +48,14 @@ function createListFromArray(data, seriesModel, ecModel) {
dimsDef
:
seriesModel
.
get
(
'
dimensions
'
)
};
if
(
isDataTypedArray
)
{
completeDimOpt
.
dimCount
=
completeDimOpt
.
dimsDef
.
length
;
}
// FIXME
var
axesInfo
=
creator
&&
creator
(
data
,
seriesModel
,
ecModel
,
completeDimOpt
);
var
dimensions
=
axesInfo
&&
axesInfo
.
dimensions
;
if
(
!
dimensions
)
{
// Get dimensions from registered coordinate system
dimensions
=
(
registeredCoordSys
&&
(
...
...
src/data/List.js
浏览文件 @
3fbae632
...
...
@@ -62,27 +62,29 @@ function DefaultDataProvider(dataArray, dimSize) {
throw
new
Error
(
'
Typed array data must specify dimension size
'
);
}
}
this
.
_offset
=
0
;
this
.
_dimSize
=
dimSize
;
this
.
_array
=
dataArray
;
methods
=
typedArrayProviderMethods
;
this
.
pure
=
true
;
this
.
_isTyped
=
true
;
}
// Normal array.
else
{
this
.
_array
=
dataArray
||
[];
methods
=
normalProviderMethods
;
this
.
_isTyped
=
false
;
}
zrUtil
.
extend
(
this
,
methods
);
}
// If data is pure without style configuration
DefaultDataProvider
.
prototype
.
pure
=
false
;
// If data is persistent and will not be released after use.
DefaultDataProvider
.
prototype
.
persistent
=
true
;
var
normalProviderMethods
=
{
persistent
:
true
,
count
:
function
()
{
return
this
.
_array
.
length
;
},
...
...
@@ -96,10 +98,16 @@ var normalProviderMethods = {
}
};
var
typedArrayProviderMethods
=
{
persistent
:
false
,
pure
:
true
,
count
:
function
()
{
return
this
.
_array
.
length
/
this
.
_dimSize
;
return
this
.
_array
?
(
this
.
_array
.
length
/
this
.
_dimSize
)
:
0
;
},
getItem
:
function
(
idx
)
{
idx
=
idx
-
this
.
_offset
;
var
item
=
[];
var
offset
=
this
.
_dimSize
*
idx
;
for
(
var
i
=
0
;
i
<
this
.
_dimSize
;
i
++
)
{
...
...
@@ -114,7 +122,15 @@ var typedArrayProviderMethods = {
}
return
;
}
this
.
_array
=
zrUtil
.
concatArray
(
this
.
_array
,
newData
);
this
.
_array
=
newData
;
},
// Clean self if data is already used.
clean
:
function
()
{
// PENDING
this
.
_offset
+=
this
.
count
();
this
.
_array
=
null
;
}
};
...
...
@@ -396,10 +412,13 @@ listProto.getProvider = function () {
};
listProto
.
appendData
=
function
(
data
)
{
var
start
=
this
.
_rawData
.
count
();
this
.
_rawData
.
addData
(
data
);
var
end
=
this
.
_rawData
.
count
();
var
rawData
=
this
.
_rawData
;
var
start
=
this
.
count
();
rawData
.
addData
(
data
);
var
end
=
rawData
.
count
();
if
(
!
rawData
.
persistent
)
{
end
+=
start
;
}
this
.
_initDataFromProvider
(
start
,
end
);
};
...
...
@@ -410,7 +429,7 @@ listProto._initDataFromProvider = function (start, end) {
}
var
chunkSize
=
this
.
_chunkSize
;
var
d
ata
=
this
.
_rawData
;
var
rawD
ata
=
this
.
_rawData
;
var
storage
=
this
.
_storage
;
var
dimensions
=
this
.
dimensions
;
var
dimensionInfoMap
=
this
.
_dimensionInfos
;
...
...
@@ -468,7 +487,7 @@ listProto._initDataFromProvider = function (start, end) {
for
(
var
idx
=
start
;
idx
<
end
;
idx
++
)
{
// NOTICE: Try not to write things into dataItem
var
dataItem
=
d
ata
.
getItem
(
idx
);
var
dataItem
=
rawD
ata
.
getItem
(
idx
);
// Each data item is value
// [1, 2]
// 2
...
...
@@ -487,7 +506,7 @@ listProto._initDataFromProvider = function (start, end) {
}
// Use the name in option and create id
if
(
!
d
ata
.
pure
)
{
if
(
!
rawD
ata
.
pure
)
{
if
(
!
nameList
[
idx
]
&&
dataItem
)
{
if
(
dataItem
.
name
!=
null
)
{
nameList
[
idx
]
=
dataItem
.
name
;
...
...
@@ -513,6 +532,10 @@ listProto._initDataFromProvider = function (start, end) {
}
}
if
(
!
rawData
.
persistent
&&
rawData
.
clean
)
{
// Clean unused data if data source is typed array.
rawData
.
clean
();
}
this
.
_count
=
end
;
};
...
...
@@ -811,7 +834,17 @@ listProto.getRawIndex = function (idx) {
* @return {number}
*/
listProto
.
getRawDataItem
=
function
(
idx
)
{
return
this
.
_rawData
.
getItem
(
this
.
getRawIndex
(
idx
));
if
(
!
this
.
_rawData
.
persistent
)
{
var
val
=
[];
for
(
var
i
=
0
;
i
<
this
.
dimensions
.
length
;
i
++
)
{
var
dim
=
this
.
dimensions
[
i
];
val
.
push
(
this
.
get
(
dim
,
idx
));
}
return
val
;
}
else
{
return
this
.
_rawData
.
getItem
(
this
.
getRawIndex
(
idx
));
}
};
/**
...
...
@@ -1102,7 +1135,7 @@ listProto.downSample = function (dimension, rate, sampleValue, sampleIndex) {
listProto
.
getItemModel
=
function
(
idx
)
{
var
hostModel
=
this
.
hostModel
;
idx
=
this
.
getRawIndex
(
idx
);
return
new
Model
(
this
.
_rawData
.
get
Item
(
idx
),
hostModel
,
hostModel
&&
hostModel
.
ecModel
);
return
new
Model
(
this
.
getRawData
Item
(
idx
),
hostModel
,
hostModel
&&
hostModel
.
ecModel
);
};
/**
...
...
src/data/helper/completeDimensions.js
浏览文件 @
3fbae632
...
...
@@ -56,6 +56,7 @@ function completeDimensions(sysDims, data, opt) {
var
coordDimNameMap
=
zrUtil
.
createHashMap
();
// var valueCandidate;
var
result
=
[];
var
isDataTypedArray
=
zrUtil
.
isTypedArray
(
data
);
var
dimCount
=
opt
.
dimCount
;
if
(
dimCount
==
null
)
{
...
...
@@ -161,8 +162,10 @@ function completeDimensions(sysDims, data, opt) {
dataDimNameMap
));
resultItem
.
type
==
null
&&
guessOrdinal
(
data
,
resultDimIdx
)
&&
(
resultItem
.
type
=
'
ordinal
'
);
if
(
!
isDataTypedArray
)
{
resultItem
.
type
==
null
&&
guessOrdinal
(
data
,
resultDimIdx
)
&&
(
resultItem
.
type
=
'
ordinal
'
);
}
}
return
result
;
...
...
src/model/Series.js
浏览文件 @
3fbae632
...
...
@@ -380,7 +380,7 @@ zrUtil.mixin(SeriesModel, modelUtil.dataFormatMixin);
zrUtil
.
mixin
(
SeriesModel
,
colorPaletteMixin
);
function
dataTaskCount
(
context
)
{
return
context
.
model
.
getRawData
().
getProvider
().
count
();
return
context
.
model
.
getRawData
().
count
();
}
function
dataTaskReset
(
context
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录