我目前正在开发一个 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,000 毫秒来执行该 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
}