我目前正在开发一个Angular / Groovy应用程序,并且通过在后端编组有效负载(groovy)来实现非常慢的性能。它需要很长时间才能完成,将它发送到前端并渲染。
在后端,我有:
def getAll(String userName) {
def payload = marshalSteps(Step.findAllByUserName(userName))
if (payload.size() <= 0) {
payload = NO_STEPS
}
payload
}
marshalSteps看起来像这样:
private static def marshalSteps(List<Step> steps) {
def payload = []
steps.each {
payload << marshalMinimalStep(it)
}
payload
}
因为我们为每个请求发送不同的编组,marshalMinimalStep看起来像:
private static def marshalMinimalStep(Step step) {
def payload = [
id : step.id,
name : step.name,
names : marshalTranslation(step.names),
shortcut : step.shortcut,
week : step.week.doubleValue(),
isRelevant : step.isRelevant
]
payload
}
在前端,我使用ng-repeat显示所有步骤。
<ul class="list-group" ng-show="stepCtrl.steps.length > 0">
<div ng-repeat="step in stepCtrl.steps | orderBy:'name' track by step.id">
<div class="col-md-10">
<li class="list-group-item overview" ng-click="stepCtrl.edit(step.id)">
<display-name translations="step.names"></display-name>
<span class="pull-right">{{step.week}}</span>
</li>
</div>
</div>
</ul>
我有大约9.000步,需要大约150,000ms才能执行getAll()方法并在前端渲染步骤,这太慢了。
我可以做些什么来改善表现?
我是否必须在Hibernate中批量获取,例如sessionFactory.currentSession.clear()?
我还把marshalTranslation()作为问题的一部分。
private static def marshalTranslation(List<Translation> translations) {
def payload = []
translations.each {
payload << [
language: it.language,
content : it.content
]
}
payload
}
答案 0 :(得分:0)
好的,总猜,但你可以尝试更换:
def payload = []
steps.each {
payload << marshalMinimalStep(it)
}
使用
def payload = steps.collect { marshalMinimalStep(it) }
看看它是否更快?
可能不是marshalTranslation
做了什么?