Odoo 性能

摘要:
deffetch_ mode_数据:pass@tools.ormcache#缓存时,环境属性deffetch,因为它存在_ mode_ data:pass#ormcache_ Context#取决于上下文的值。数据包过滤read_group#read_group()方法广泛用于数据统计,智能统计按钮defread_group:pass#domain:domain用于过滤记录。搜索条件#字段用于分组并获取字段列表。它支持sql聚合函数self。env['sale.order']read_ Group#groupby Grouping Field Record#offset Pagination#limit limit Quantity#lazy此参数为true,结果将仅按groupby参数中的第一个字段进行分组__上下文和__其余的groupby参数和域可以从域键中获得。
性能优化

预提取

# 1. 目的 减少SQL的查询次数
# 2. self是数据集合,当第一次时,就把所有的数据都给查询出来。 缓存下来,之后在循环的值都是从缓存中获取的

#    预提取的方式
		1. 查询数据库,将查询的数据进行 python列表推导式,获得多个记录值。通过browse一次查询。即可达到预提取
		2. 通过上下文预提取传递字段来控制预提取字段。
				 with_context(prefetch_fields=[预提取字段列表])
				 with_context(prefetch_fields=False) # 禁止预提取
		3.  在 with_prefetch() 方法传递prefetch字典进行实现。 将数据分割成两部分
				# recordset._prefetch 属性 可以知道预提取的上下文。 包含一个字典,以模型名为键名,记录id列表为值
				
                prefetch = self.env['base']._prefetch.  
                recordset1 = a[:5].with_prefetch(prefetch)    # a 是记录集,针对a记录集合,进行预提取
                recordset2 = a[5:].with_prefetch(prefetch)

内存缓存 ORMCACHE

# ormcache 缓存装饰器 
        from odoo import tools 

        @tools.ormcache('mode')   #  传入参数名 ,字段缓存。 
        def fetch_mode_data(self,mold):
                pass

        @tools.ormcache('self.env.uid','mode')   # 缓存时,存在以来环境属性
        def fetch_mode_data(self,mold):
                pass 
	 
# ormcache_context   #  依赖于上下文的值。需要传入上下文键列表,keys是缓存上下文中的字段
	
	@tools.ormcache_context('mode',keys=('website_id','lang'))
    def fetch_data(self,mode):
        	pass
        
     
# ormcache_multi   缓存多条记录或ID执行操作
	@tools.ormcache_multi('mode',multi='ids')  # ids 是记录集
    def fetch_data(self,mode,ids):
        pass
    
    
### ORM缓存 以字典格式缓存保存。     
		使用x, y 参数调用该方法时且该方法的结果为x+y,缓存查询即为{(x, y): x+y}
    
### 清楚缓存
	self.env[model_name].clear_caches()
    

生成图像缩略图

#  image_resize_images() 方法有助于管理3中不同大小的图像
        image = fields.Binary(attachment=True) # 1024x1024px
        image_medium = fields.Binary(attachment=True) # 128x128px
        image_small = fields.Binary(attachment=True) #64x64px
        
#   使用方法   , 分别保存在 iamge , image_medium  和 iamge_small
	@api.model
    def create(self,vals):
        tools.image_resize_images(vals)
        return super().create(vals)
    
    def write(self,vals):
        tools.image_resize_images(vals)
        return super().write(vals)
    
    
# 其他方法
		image_resize_image():		该方法用于从base64源调整图像的大小。
        image_resize_and_sharpen():	创建缩略图有时会让图像变得模糊。在这种情况下,你可以使用这个函数来锐化图像以让图像更美观。
        image_save_for_web():		这个函数用于为网站优化图像大小。它会减少图像大小而又不影响其精度。
        crop_image():							这个方法用于将图像剪切为不同尺寸。
        image_colorize():					这个方法用于为图像的透明部分上色。

分组过滤read_group

# read_group()方法广泛用于数据统计和智能统计按钮

def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):
		pass
    
# domain  : domain 是用于过滤记录,	搜索条件
# fields  分组获取字段的列表	  , 支持sql聚合函数('total:sum(amount_total)')
		self.env['sale.order'].read_group([], ['partner_id', 'total:sum(amount_total)', 'avg_total:avg(amount_total)'], ['partner_id'])
# groupby  分组字段记录
# offset 分页
# limit 限制数量
# lazy  	该参数为True,结果会在groupby参数中仅通过第一个字段来进行分组,果中你会在__context和__domain键中获取到剩余的groupby参数及domain。  该参数值设为False,它会用groupby参数中的所有字段对数据进行分组。
		


#  拓展 日期分组  groupby_function
		可以根据日、周、季度、月或年来对记录进行分组
		self.env['sale.order'].read_group([], ['total:sum(amount_total)'], ['order_date:month'])

创建和写入多条记录


通过数据库查询访问记录

self._cr.execute方法来执行数据库查询

免责声明:文章转载自《Odoo 性能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Spotlight监控工具使用ROS学习之消息包下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【SQL server初级】数据库性能优化二:数据库表优化

数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第二部分   数据库性能优化二:数据库表优化   优化①:设计规范化表,消除数据冗余   数据库范式是确保数据库结构合理,满足各种查询需要、避免数据库操作异常的数据库设计方式。满足范式要求的表,称为规范化表,范式产生于20世纪70年代初,一般表设计满足前三范式就可以,在这里简单...

Spring Boot -- Spring Boot之热部署、性能优化、打包

一、热部署 所谓的热部署:比如项目的热部署,就是在应用程序在不停止的情况下,实现新的部署。 1、热部署原理 原理: 使用类加载器(classloader重新读取字节码文件到jvm内存) 如何纯手写一个热部署功能: 监听 class文件是否发生改变  版本号、修改时间  作对比; 如果发生改变就用classloader进行重新读取; 热部署可以用于在生产...

SQLite 性能优化

SQLite性能优化主要通过pragma指令来实现。 比如: 空间释放、磁盘同步、Cache大小等。 不要打开。前文提高了,Vacuum的效率非常低! PRAGMA auto_vacuum; PRAGMA auto_vacuum = 0 | 1; 查询或设置数据库的auto-vacuum标记。 正常情况下,当提交一个从数据库中删除数据的事务时,数据库文件不...

使用ThinkPHP开发中MySQL性能优化的最佳21条经验

使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过 多的S...

2.1.1优化程序性能

性能优化有三个层次: 系统层次 算法层次 代码层次 系统层次关注系统的控制流程和数据流程,优化主要考虑如何减少消息传递的个数;如何使系统的负载更加均衡;如何充分利用硬件的性能和设施;如何减少系统额外开销(比如上下文切换等)。 算法层次关注算法的选择(用更高效的算法替换现有算法,而不改变其接口);现有算法的优化(时间和空间的优化);并发和锁的优化(增加任务的...

懒加载和预加载---性能优化

懒加载 认识 懒加载是一种按需延迟资源的方式。在加载显示页面时,并不一次性加载所有该页面所需要的图像,对于在可视区域之外的图像,可以等到用户scroll到该区域的时候,再进行加载 实现方式 1、目前已经有很多库实现了懒加载,例如lazysizes,可以考虑使用 2、使用库这样的操作,相当于增加一个需要请求的js文件,增加一次http请求。所以如果能够实现原...