Dash 2.18.2版本更新:模式匹配回撥效能大提升

费弗里發表於2024-11-05

本文示例程式碼已上傳至我的Github倉庫:https://github.com/CNFeffery/dash-master

Gitee同步倉庫地址:https://gitee.com/cnfeffery/dash-master

  大家好我是費老師,今天Dash釋出了2.18.2版本更新,雖然只是一次小版本更新,但其中涉及到的一些內容還是非常重要的,今天的文章中我就來為大家做相關介紹。

  終端執行下列命令將Dash升級到最新版本:

pip install dash -U
Dash 2.18.2版本更新:模式匹配回撥效能大提升

模式匹配回撥函式效能大幅提升

  在先前的版本中,基於ALL模式匹配構建的回撥函式,當涉及的元件數量非常多時,在觸發回撥函式時會存在明顯的卡頓。

  舉個簡單的例子,我們在頁面中渲染了1000個開關元件,透過ALL模式匹配回撥,實時統計多少開關處於開啟狀態,在未更新前的2.18.1版本下,可以看到每次操作開關時,都伴隨著明顯的卡頓:

Dash 2.18.2版本更新:模式匹配回撥效能大提升

  而更新到2.18.2之後,那叫一個絲滑🥳:

Dash 2.18.2版本更新:模式匹配回撥效能大提升

  示例對應原始碼如下:

app.py

import dash
from dash import html
import feffery_antd_components as fac
from feffery_dash_utils.style_utils import style
from dash.dependencies import Input, Output, ALL

app = dash.Dash(__name__)

app.layout = html.Div(
    [
        f"Dash版本:{dash.__version__}",
        html.Div(
            fac.AntdSpace(
                [
                    fac.AntdSwitch(
                        id={"type": "test-switch", "index": i}, checked=False
                    )
                    for i in range(1000)
                ],
                wrap=True,
            ),
            style=style(
                height=300, overflow="auto", padding=5, border="1px solid #bfbfbf"
            ),
        ),
        fac.AntdText("已開啟開關數量:0", id="test-output"),
    ],
    style=style(padding=50),
)

app.clientside_callback(
    "(checked_list) => `已開啟開關數量:${checked_list.filter(Boolean).length}`",
    Output("test-output", "children"),
    Input({"type": "test-switch", "index": ALL}, "checked"),
    prevent_initial_call=True,
)

if __name__ == "__main__":
    app.run(debug=True)

  除此之外,此次版本更新中還為常規回撥對應的dash.ctx上下文新增了cookiesheaderspathremoteorigin等屬性,完整的更新內容說明請移步https://github.com/plotly/dash/releases/tag/v2.18.2


  以上就是本文的全部內容,對Dash應用開發感興趣的朋友,歡迎新增微訊號CNFeffery,備註“dash學習”加入我們的技術交流群,一起成長一起進步。

相關文章