本文示例程式碼已上傳至我的
Github
倉庫:https://github.com/CNFeffery/dash-masterGitee同步倉庫地址:https://gitee.com/cnfeffery/dash-master
大家好我是費老師,今天Dash
釋出了2.18.2
版本更新,雖然只是一次小版本更新,但其中涉及到的一些內容還是非常重要的,今天的文章中我就來為大家做相關介紹。
終端執行下列命令將Dash
升級到最新版本:
pip install dash -U
模式匹配回撥函式效能大幅提升
在先前的版本中,基於ALL
模式匹配構建的回撥函式,當涉及的元件數量非常多時,在觸發回撥函式時會存在明顯的卡頓。
舉個簡單的例子,我們在頁面中渲染了1000個開關元件,透過ALL
模式匹配回撥,實時統計有多少開關處於開啟狀態,在未更新前的2.18.1
版本下,可以看到每次操作開關時,都伴隨著明顯的卡頓:
而更新到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
上下文新增了cookies
、headers
、path
、remote
、origin
等屬性,完整的更新內容說明請移步https://github.com/plotly/dash/releases/tag/v2.18.2
。
以上就是本文的全部內容,對Dash
應用開發感興趣的朋友,歡迎新增微訊號CNFeffery
,備註“dash學習”加入我們的技術交流群,一起成長一起進步。