主頁 > 企業開發 > 【Odoo】Odoo16-性能優化提升

【Odoo】Odoo16-性能優化提升

2022-10-24 08:03:28 企業開發

上海序說科技,專注于基于Odoo專案實施,實作企業數智化,助力企業成長,
老韓頭的開發日常,博客園分享(2022年前博文)

10月12日,Odoo16版本正式發布,本文將就Odoo官方在性能方面做的優化做一個總結,如果需要官方視頻,可以翻閱B站,有不少朋友已經做了搬運工,

性能提升切入點

Odoo作為B/S架構的應用,終端用戶一般使用的是瀏覽器訪問,因此,對于用戶側而言,性能提升的感覺主要體現在用戶點擊后回應實作變化,如下圖
image
官方將該程序分為了

  • Web應用終端
  • 網路請求
  • 業務應用
  • Odoo主框架邏輯
  • 硬體層面

Web應用終端

在Web應用終端,其實也就是用戶側的瀏覽器,官方在JS和CSS方便都做了不同程度的優化,如下圖
image-1666048195420
BlockDOM
官方定義是一種更為底層的對于DOM物件的抽象管理庫,可以在渲染頁面DOM物件的時候以塊的形式進行,并區分了其中的靜態元素和動態元素,
關于BlockDOM的詳細說明,博主將在后續的文章中進行介紹,
blockdom is a very fast virtual dom library. Its main selling point is that it does not represent DOM element by element, but instead block by block, where a block is an element with all its static content and some special tags to indicate dynamic content. This allows blockdom to use cloneNode(true) on blocks and speed up the diff process, since the vdom tree is much smaller.
OWL2 框架
我們知道自Odoo15開始,官方引入了新的前端框架OWL,隨著Odoo16的發布,OWL框架也進入2.x版本,其中與1.x版本還是有一些不同的,這也是為什么博主會寫 OWL系列教程 的原因,
image-1666049043586
如上,在Odoo15中,只有30%的前端組件使用了OWL1框架,那么在本次發布的Odoo16版本中,除了Odoo Studio模塊的部分前端代碼依舊保留有Widget形式外,已經有99%的代碼使用OWL 2進行了重構,
由此帶來的效果是:

  1. 縮減了30%的代碼行數
  2. 頁面渲染速度實作了2到20倍不同程度的提升
    CSS Cleanup
    Odoo16中大幅縮減了SCSS的代碼行數,從而減少了渲染頁面時的時間,
    image-1666220596494
    其他
  • 在Tree視圖下的,將該物件下全部的資訊的數量調整為上限10000,如下圖所示,性能提升效果還是很明顯的,
  • 減少或合并了一些RPC請求,進而提高客戶端的回應
  • 重構了討論模塊并將longpoll改為了websocket(終于改了,該功能在Odoo14的時候就已經有開發者pull了,但一直沒有合并 )
    image-1666220704726

網路請求

作為BS架構的應用,用戶的每一次操作都需要與服務器實作有效的資料互動,因此,優化的重點就放在了
image-1666221933715

  • 縮減請求包體大小
  • 合并請求數量

將分別將JS、CSS檔案合并為一個檔案,并去除了冗余代碼:

image-1666049865554
優化load_views()中邏輯,精簡欄位資料:
image-1666049985367

  • 通過NGINX等軟體代理實作大檔案的下載

在啟動Odoo實體的時候,添加--x-sendfile指令,可以在用戶請求大檔案的時候,回應用戶請求的worker可通過添加X-Accel-Redirect頭,實作NGINX直接將快取檔案發送回用戶,減少對應用的壓力,
image-1666069654551

業務應用

業務應用方面的優化主要是體現在

  • onchange -> compute
  • 代碼重構

image-1666089508680

onchange -> compute
image-1666089574698
在上圖中該銷售單共有多個產品行,每個訂單行的金額小計依賴于商品價格、數量、優惠等,而訂單總金額則依賴于每行的金額小計,因此,在上圖中,若我們改變了三行的優惠額度,那么對于總價而言,也將計算三次,但是,若我們將總金額通過compute方式實作,就只需要計算一次就夠了,
如下圖所示,Compute與onchange的對比:
image-1666222937217

Odoo16在field定義的時候,還新增了precompute關鍵字,可用于替換特定場景下的default,有效減少SQL操作,
image-1666307479656

Odoo主框架邏輯

Odoo16在主框架上優化還是很明顯的,對于已有專案的遷移可能是個挑戰,正好有客戶使用的Odoo14版本,后續將遷移程序也會整理下,

  • 翻譯欄位優化
  • 片段優化
  • 索引優化
  • 視圖和選單優化
  • Sessions

image-1666307789381

翻譯欄位優化
image-1666308113268

我們看到,在老版本的Odoo中,res.country物件在不同語種情況下的名稱是單獨定義在iir.tanslation物件中的,那么,當我們需要非英語的國家名稱時,需要將兩張表關聯查詢才能得到目標值,
Odoo16將類似這種情況下的欄位,調整為了JSONB格式欄位,這樣就允許我們較為直接的查詢到我們的目標值,優化后在查詢和更新時都會有較為明顯的提升,唯一一個缺點是我們需要安裝一個新的語種時會慢一點,不過這也能夠理解,畢竟是新的語種需要將所涉及到的翻譯全部都更新一遍,

image-1666308441416

片段快取
在Odoo16的視圖渲染中,引入了片段快取的概念,如下圖,我們可以在視圖中通過t-cache關鍵字標識該區域是否啟用快取或者依賴于哪些物件,比如,header、footer標簽一般是所有頁面通用的,因此此處我們設置為t-cache="True",在Section標簽中,有可能展示不同的商品資訊,此處我們配置了t-cache="products,pricelist"物件,而在購物車的位置,將需要判斷用戶是否登陸再渲染,所以此處設定為t-cache="None"

image-1666308898971

通過片段快取技術,頁面渲染的速度得到蠻大的提升,

image-1666309293681

索引優化
在Odoo16中,擴展了索引的方式,btree_not_null(并無索引null)和trigram(用于字串搜索,ilike等場景),
image-1666309486654

視圖和選單
引入視圖快取的方式及優化選單冷加載,可將視圖加載的時間提高6.5倍,
image-1666309743244

Sessions
僅存盤必要的Sessions資訊,對于訪客的Session將不再存盤,
image-1666309954816

硬體層面
這點沒什么好說的

本文來自博客園,作者:老韓頭的開發日常,轉載請注明原文鏈接:https://www.cnblogs.com/xushuotec/p/16817886.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/519069.html

標籤:其他

上一篇:【Odoo】Odoo16-性能優化提升

下一篇:PKI,CA詳解學習筆記

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more