[英]Grails get domain properties
我试图提高我的应用程序的性能,并想知道使用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()
。 所以是一样的。 如果要直接访问属性,则必须使用@这样的user.@name
。 在这里查看更多
但是我不认为这是可以加快应用程序速度的方法。
您很有可能会找到许多更简单的方法来提高代码性能。 如果您想提高性能,这里有一些建议。
A)查询数量。 尝试避免N + 1问题。 例如,如果一个用户有很多[事件:事件],则诸如user.events.each {访问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.org和http://grails.org/doc/2.3 .8 / guide / async.html并尝试使工作并行化。
我怀疑您的应用程序中的任何性能问题都与您如何访问域类的属性有关。 实际上,如果您对应用程序进行概要分析/度量,那么我相信您会发现确实如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.