javascript - 如何在字形完全渲染后调用 JS 函数或 Python 方法?

标签 javascript python python-3.x performance bokeh

我正在使用 bokeh 作为服务器应用程序。当我在绘图中进行选择时,我会在 python 中执行一些操作并更新一些源 (CDS)。这种变化反射(reflect)在情节中。有没有办法检查字形何时完全呈现(更新后)?我想在所有内容完全加载后调用 JavaScript 函数?使用该函数,我想调用其他 python 方法再次更新 CDS。

如果我不等待此配置文件被渲染,应用程序可能会中断,而这正是我想要避免的。实际上我过去做过一些测试,我必须创建一个巨大的 CDS 而不是几个较小的 CDS 才能使其正常工作。

我的用例。我为什么要做这个?

我的布局中有很多选项卡,例如它们可以是 10 个。每个选项卡都有一些图(3-6 个图)。如果我同时更新整个 ColumnDataSource,那将需要一段时间。然后我想让它更流畅,所以我想只更新当前可见选项卡的数据,它会渲染得更快并且用户会立即收到响应。我可以暂时禁用其余选项卡以防止出现故障。此时我需要调用 JS 或 python 方法来更新其余选项卡的内容。

为了加快这个过程,我想要实现的目标如下:

drawing_steps

关于数据

基本上我有两个 DataFrame,一个用于构建点云(大约 5000 行和 130 列),然后我从选定的点中提取另一个 DataFrame 以了解我应该绘制哪些线(360 列和 5 到 15 行),进行一些筛选和选择。我使用的算法在 the answer 中我以前写过的一个问题。有了这个数据量,算法需要 6 或 7 秒才能完成。

关于如何提高性能或如何拆分或计算的任何其他想法?

最佳答案

要提高渲染速度,您可以尝试使用 webgl JavaScript API。此 Bokeh 文档页面 Speeding up with WebGL解释如何去做。 webgl 支持圆、线和大多数标记。应用:

p = Plot(output_backend="webgl")  # for the glyph API
p = figure(output_backend="webgl")  # for the plotting API

请注意,用户报告了 webgl 的问题,例如绘图断断续续等......但它可能适用于您的情况,具体取决于您的绘图包含哪种类型的字形。

还要确保传递给绘图的数据不包含 NaN,因为众所周知它会降低 Bokeh 性能。

据我所知,没有属性表明渲染已完成或仍在进行中,但您可能会考虑其他一些替代方法来加快速度,例如 Bokeh 与 Datashader 的组合(将大型数据集预渲染成固定大小的光栅图像)或 Dask (加快从多个来源(如多个 csv 文件)读取数据的速度)

For example you could have one standard Bokeh plot where you make a selection and let the other plots being generated as Datashader images and embed them in Bokeh plots.

This example展示了如何组合 Bokeh + Datashader,这显着提高了性能,尤其是在发生过度绘制时。请注意,每次将单个点添加到绘图时,整个 Canvas 区域都将在浏览器中重新绘制。这就是浏览器的工作方式。 Datashader 可以提供单个图像,因此更新绘图要快得多,同时您仍然可以使用缩放、平移等工具栏工具....

Python 代码实现细节也很重要。使用例如gridplot 链接许多图会降低性能,因此最好将它们一一添加到文档根目录等...

关于javascript - 如何在字形完全渲染后调用 JS 函数或 Python 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55501408/

相关文章:

javascript - 在表格上打印时图像消失

javascript - 如何将文件对象添加到JavaScript对象中?

javascript - 使用 javascript 从网站访问模型字段 - Odoo v9 社区

python - 重命名未命名的列 Pandas 数据框

python - 我认为 jupyter-qtconsole 已损坏,因为我运行的是 os x 10.10.5。不更新怎么解决?

python - django 计算中的 0.01 differecene

javascript - IE 不支持 CustomEvent() 构造函数

javascript - 使用相同的类从链接列表中获取值

python - 如何提示 python3.6 参数必须具有大小且可迭代?

python - Pygame 运行缓慢