Grails获得域属性

时间:2014-05-22 09:38:47

标签: grails

我试图加快应用的性能,并想知道使用instance.nameinstance.getName()访问域名属性值是否存在差异

如果是,哪一个在性能方面最好?

实施例

class   User {
    String name
}
User user = User.get(100);

//is it better this way
user.name

//or this way
user.getName()

谢谢

3 个答案:

答案 0 :(得分:2)

与您提供的用法无关,因为user.name在幕后使用user.getName()。所以它是一样的。如果您想直接访问属性,则必须使用@ {this user.@name。查看更多here

但我不认为这是你加速应用程序的方式。

答案 1 :(得分:1)

您很可能会找到更简单的方法来提高代码的性能。如果您想提高性能,可以从以下一些想法开始。

A)查询数量。尽量避免N + 1问题。例如,如果一个用户拥有多个[events:Event],那么像user.events.each {access event.anyPropertyExceptId}这样的代码将为每个事件分派新的查询。

B)查询效率。默认情况下,Grails为所有gorm关联/其他嵌套域创建索引。无论您使用什么搜索,过滤等,都需要“手动”进行操作。

static mapping = {
    anyDomainProperty index: 'customIndexName'
}

C)仅查询您感兴趣的数据,例如:

User.all.each { user ->
    println user.events.size()
}

Event.withCriteria {
    projections {
        property('user')
        countDistinct('id')
        groupProperty('user')
    }
}

D)如果你真的需要加速你的groovy代码而你的问题只是一个请求而不是一般的cpu使用,请看看http://gpars.codehaus.orghttp://grails.org/doc/2.3.8/guide/async.html并尝试平行工作。< / p>

答案 2 :(得分:0)

我怀疑您的应用中的任何性能问题都与您访问域类属性的方式有关。事实上,如果你描述/测量你的应用程序,我相信你会看到这种情况。