使用forEachNode进行行选择非常慢

时间:2019-02-20 06:05:24

标签: ag-grid

我正在使用AG Grid React。我有一千行数据。我正在尝试根据索引选择行范围。

mail($to,$subject,$message,youremail@example.com);

事实证明,这非常播种,通常需要30秒才能在UI上完成。好像from bs4 import BeautifulSoup as bs import requests import pandas as pd url = requests.get("http://stats.espncricinfo.com/ci/content/records/307847.html" ) soup = bs(url.text, 'lxml') soup_1 = soup.find(class_ = "recordsTable") soup_pages = soup_1.find_all('a', href= True) state_links =[] for link in soup_pages: state_links.append(link['href']) for i in state_links: parse_link = "http://stats.espncricinfo.com"+i url_new = requests.get(parse_link) soup_new = bs(url_new.text, 'lxml') soup_table = soup_new.find(class_="engineTable") results = {} newdict = dict() for col in soup_table.findAll('th'): colname = (col.text).lstrip().rstrip() for row in soup_table.findAll("td"): rowname = row.text.lstrip().rstrip() newdict[col.text] = row.text print (newdict) 会触发多个渲染周期。正确的做法是什么?

3 个答案:

答案 0 :(得分:0)

您可以尝试使用分页加载整个数据块。 Pagination Docs

答案 1 :(得分:0)

请确保您尚未订阅任何可能导致代码运行缓慢的事件,例如onRowSelected,onSelectionChanged。这些会为每个

触发
  

node.setSelected(true)

如果您确实具有这些已订阅事件中的任何一个,解决此问题的一种可能方法是在循环之前取消订阅,然后在循环之后重新订阅。

此外,根据您的用例,您可能要使用

  

forEachNodeAfterFilter(node)

为了只遍历可见节点而不是

  

forEachNode(节点)

答案 2 :(得分:0)

问题是-setSelected(newValue)调度事件。当我们循环处理一千个项目( say )时-有一千个事件,一千个请求排队等待React中的异步更新,这可以解决所有延迟。

我使用setSelected-setSelected(newValue, clearSelection, suppressFinishActions)的另一个版本对其进行了修复。不幸的是,这没有写在官方文档中。 想法是将此版本用于除最后一个之外的所有内容,以便所有事件分派都被禁止,并使用我们一直使用的常规选择来选择最后一个元素,以便它也触发必要的onRowSelectedonSelectionChanged等事件正常工作。

        this.api.forEachNodeAfterFilter(node => {
            if (node.childIndex >= startIndex && node.childIndex < endIndex) {
                selectedNodes.push(node);
            }
        });

        if (selectedNodes.length > 0) {
            // setSelected re-renders every time so use suppressFinishActions except last one
            for (let i = 0; i < selectedNodes.length - 1; i++) {
                selectedNodes[i].setSelected(true, false, true);
            }
            selectedNodes[selectedNodes.length - 1].setSelected(true);
        }