AngularJs 加载超过 1300 项的视图花费的时间太长
AngularJs view takes too long to load more than 1300 items
我开发了一个 Node Express Angular (1.2) MariaDb 网络应用程序。
在 html 视图中,我必须加载 1300 多个项目(它涉及一些作者的名言),但整个视图在 6 / 7 秒后加载....太多了。这里 performace waterfall
这里是服务代码:
AllTesti = function() {
return $http.get(__env.apiOptions.server +'rapi_testi/')
.then(function(response) {
return response;
});
}
这里是api:
getAllTesti:function(callback){
return db.query("select * from all_testi_view",callback);
}
我插入了一个微调器,但在大约 2 秒后它冻结了,直到所有数据都加载完毕。
我用 PostMan Postman_result 测试了控制器调用的 Restful API 来填充视图,结果是在大约 1 秒内得到(我认为这是一个很好的时间)。 1300 项由以下 "select * from all_testi_view" ....这里查看源代码生成:
create or replace
algorithm = UNDEFINED view `all_testi_view` as (
select
`all_testi_with_sub_typ`.`TEXT_ID` as `TEXT_ID`,
`all_testi_with_sub_typ`.`NOME_AUTORE` as `NOME_AUTORE`,
`all_testi_with_sub_typ`.`TIPOLOGIA` as `TIPOLOGIA`,
`all_testi_with_sub_typ`.`SUB_TIPOLOGIA` as `SUB_TIPOLOGIA`,
`all_testi_with_sub_typ`.`TESTO` as `TESTO`,
`all_testi_with_sub_typ`.`COMMENTO` as `COMMENTO`,
`all_testi_with_sub_typ`.`DATA_EVENTO` as `DATA_EVENTO`,
`all_testi_with_sub_typ`.`COUNTER` as `COUNTER`
from
`all_testi_with_sub_typ`)
union (
select
`all_testi_without_sub_typ`.`TEXT_ID` as `TEXT_ID`,
`all_testi_without_sub_typ`.`NOME_AUTORE` as `NOME_AUTORE`,
`all_testi_without_sub_typ`.`TIPOLOGIA` as `TIPOLOGIA`,
`all_testi_without_sub_typ`.`SUB_TIPOLOGIA` as `SUB_TIPOLOGIA`,
`all_testi_without_sub_typ`.`TESTO` as `TESTO`,
`all_testi_without_sub_typ`.`COMMENTO` as `COMMENTO`,
`all_testi_without_sub_typ`.`DATA_EVENTO` as `DATA_EVENTO`,
`all_testi_without_sub_typ`.`COUNTER` as `COUNTER`
from
`all_testi_without_sub_typ`)
根据我的说法,angularjs 过程有问题。
有什么减少加载时间的建议吗?
提前致谢
好的伙计们多亏了这个thread
我找到了解决办法。我想和你分享我的实现
在 ng-repeat 中我插入了 "limitTo" 过滤器:
<div ng-repeat="txt in filtered = (vm.datatxts.txts | limitTo:vm.totalDisplayed | filter: textFilter)">
因此,项目的数量限制为 totalDisplayed 值。在我设置的控制器中:
vm.loading = true;
var tobeDisplayed = 50;
vm.totalDisplayed = tobeDisplayed;
在第一个页面加载时只显示 50 个项目:加载过程更快...不到 2 秒!!
此外,我制作了两个按钮 loadMore(加载其他 50 个项目)和 loadRest(加载列表的其余部分);所以在 html 视图中:
<a ng-click="vm.loadMore()" id="btnLoadMore" class="btn btn-default pull-center" style="margin:5px;">LoadMore</a>
<a ng-click=" vm.loadRest()" id="btnLoadRest" class="btn btn-default pull-center" style="margin:5px;">LoadRest</a>
vm.loadRest = function () {
//alert("Il numero di messaggi è: " + vm.datatxts.txts.length)
vm.loading = true;
$timeout(function() {
var tobeDisplayed = vm.datatxts.txts.length - vm.totalDisplayed
vm.totalDisplayed += tobeDisplayed;
vm.loading = false;
}, 250);
};
vm.loadMore = function () {
vm.loading = true;
$timeout(function() {
vm.totalDisplayed += tobeDisplayed;
vm.loading = false;
}, 250);
};
当然vm.loading是用来在加载过程中显示spinner ...
祝你发展顺利!
我开发了一个 Node Express Angular (1.2) MariaDb 网络应用程序。
在 html 视图中,我必须加载 1300 多个项目(它涉及一些作者的名言),但整个视图在 6 / 7 秒后加载....太多了。这里 performace waterfall 这里是服务代码:
AllTesti = function() {
return $http.get(__env.apiOptions.server +'rapi_testi/')
.then(function(response) {
return response;
});
}
这里是api:
getAllTesti:function(callback){
return db.query("select * from all_testi_view",callback);
}
我插入了一个微调器,但在大约 2 秒后它冻结了,直到所有数据都加载完毕。
我用 PostMan Postman_result 测试了控制器调用的 Restful API 来填充视图,结果是在大约 1 秒内得到(我认为这是一个很好的时间)。 1300 项由以下 "select * from all_testi_view" ....这里查看源代码生成:
create or replace
algorithm = UNDEFINED view `all_testi_view` as (
select
`all_testi_with_sub_typ`.`TEXT_ID` as `TEXT_ID`,
`all_testi_with_sub_typ`.`NOME_AUTORE` as `NOME_AUTORE`,
`all_testi_with_sub_typ`.`TIPOLOGIA` as `TIPOLOGIA`,
`all_testi_with_sub_typ`.`SUB_TIPOLOGIA` as `SUB_TIPOLOGIA`,
`all_testi_with_sub_typ`.`TESTO` as `TESTO`,
`all_testi_with_sub_typ`.`COMMENTO` as `COMMENTO`,
`all_testi_with_sub_typ`.`DATA_EVENTO` as `DATA_EVENTO`,
`all_testi_with_sub_typ`.`COUNTER` as `COUNTER`
from
`all_testi_with_sub_typ`)
union (
select
`all_testi_without_sub_typ`.`TEXT_ID` as `TEXT_ID`,
`all_testi_without_sub_typ`.`NOME_AUTORE` as `NOME_AUTORE`,
`all_testi_without_sub_typ`.`TIPOLOGIA` as `TIPOLOGIA`,
`all_testi_without_sub_typ`.`SUB_TIPOLOGIA` as `SUB_TIPOLOGIA`,
`all_testi_without_sub_typ`.`TESTO` as `TESTO`,
`all_testi_without_sub_typ`.`COMMENTO` as `COMMENTO`,
`all_testi_without_sub_typ`.`DATA_EVENTO` as `DATA_EVENTO`,
`all_testi_without_sub_typ`.`COUNTER` as `COUNTER`
from
`all_testi_without_sub_typ`)
根据我的说法,angularjs 过程有问题。 有什么减少加载时间的建议吗? 提前致谢
好的伙计们多亏了这个thread 我找到了解决办法。我想和你分享我的实现
在 ng-repeat 中我插入了 "limitTo" 过滤器:
<div ng-repeat="txt in filtered = (vm.datatxts.txts | limitTo:vm.totalDisplayed | filter: textFilter)">
因此,项目的数量限制为 totalDisplayed 值。在我设置的控制器中:
vm.loading = true;
var tobeDisplayed = 50;
vm.totalDisplayed = tobeDisplayed;
在第一个页面加载时只显示 50 个项目:加载过程更快...不到 2 秒!!
此外,我制作了两个按钮 loadMore(加载其他 50 个项目)和 loadRest(加载列表的其余部分);所以在 html 视图中:
<a ng-click="vm.loadMore()" id="btnLoadMore" class="btn btn-default pull-center" style="margin:5px;">LoadMore</a>
<a ng-click=" vm.loadRest()" id="btnLoadRest" class="btn btn-default pull-center" style="margin:5px;">LoadRest</a>
vm.loadRest = function () {
//alert("Il numero di messaggi è: " + vm.datatxts.txts.length)
vm.loading = true;
$timeout(function() {
var tobeDisplayed = vm.datatxts.txts.length - vm.totalDisplayed
vm.totalDisplayed += tobeDisplayed;
vm.loading = false;
}, 250);
};
vm.loadMore = function () {
vm.loading = true;
$timeout(function() {
vm.totalDisplayed += tobeDisplayed;
vm.loading = false;
}, 250);
};
当然vm.loading是用来在加载过程中显示spinner ... 祝你发展顺利!