Grails获取域属性
我试图提高我的应用程序的性能,想知道使用Grails获取域属性,grails,Grails,我试图提高我的应用程序的性能,想知道使用instance.name和instance.getName()访问域属性值是否有区别 如果是,就性能而言,哪一个是最好的 范例 class User { String name } User user = User.get(100); //is it better this way user.name //or this way user.getName() 谢谢我怀疑应用程序中的任何性能问题都与访问域类属性的方式有关。事实上,如果您分
instance.name
和instance.getName()访问域属性值是否有区别
如果是,就性能而言,哪一个是最好的
范例
class User {
String name
}
User user = User.get(100);
//is it better this way
user.name
//or this way
user.getName()
谢谢我怀疑应用程序中的任何性能问题都与访问域类属性的方式有关。事实上,如果您分析/度量应用程序,我相信您会看到这种情况。这与您提供的用法无关,因为user.name
在后台使用user.getName()。所以是一样的。如果要直接访问属性,必须使用@like thisuser.@name
。看更多
但我不认为这是加速应用程序的方法。很可能你会找到很多更简单的方法来提高代码的性能。如果你想提高绩效,这里有一些想法可以从哪里开始
A) 查询数。尽量避免N+1问题。例如,如果一个用户有许多[events:Event],像user.events.each{access Event.anyPropertyExceptId}这样的代码将为每个事件分派新的查询
B) 查询的效率。Grails per default为所有gorm关联/其他嵌套域创建索引。然而,任何你用来搜索、过滤等的东西,你都需要“手动”完成
static mapping = {
anyDomainProperty index: 'customIndexName'
}
C) 仅查询您感兴趣的数据,例如:
User.all.each { user ->
println user.events.size()
}
与
D) 如果您确实需要加快groovy代码的速度,并且您的问题不是一般的cpu使用,而是单个请求,请查看并尝试并行化工作。好的,谢谢,关于使用@what is for直接访问属性?例如,如果您需要在覆盖getter时直接访问字段。对于下一票:)
Event.withCriteria {
projections {
property('user')
countDistinct('id')
groupProperty('user')
}
}