【问题标题】:How to Improve GWT XML parsing?如何改进 GWT XML 解析?
【发布时间】:2011-10-20 23:03:55
【问题描述】:

如何改进 GWT 中的 xml 解析?

我的 xml 如下,有 1 条记录

解析 100 条记录 GWT 需要 8 秒

有什么方法可以提高性能吗?请查看我的 gwt 代码来解析 xml

12345678价值>

12345678

记录>

我的GWT解析代码如下:

私有静态列表 parseRecords(文档 mainDOM, 列出记录){ NodeList recordNodeList = mainDOM.getElementsByTagName("Record"); //记录节点 RecordInfo 记录信息= null;

    for(int i=0;i<recordNodeList.getLength();i++){ //iteration over record node

        recordInfo = new RecordInfo();
        recordInfo.setColumnCount(columnInfoList.size());
        recordInfo.setColumnInfoList(columnInfoList);
        HashMap<String, String> recordsColumnValueHashMap = new HashMap<String, String>();

        Element element = ((Element)recordNodeList.item(i));  //Record node


        NamedNodeMap recNodeMap = recordNodeList.item(i).getAttributes();
        if(i==0){

        }else{

            recordInfo.setProductid(recNodeMap.getNamedItem("productid").getNodeValue());
            recordInfo.setProductidext(recNodeMap.getNamedItem("productidext").getNodeValue());
            recordInfo.setProductkeyid(recNodeMap.getNamedItem("productkeyid").getNodeValue());
            recordInfo.setProductversion(Integer.parseInt(recNodeMap.getNamedItem("productversion").getNodeValue()));
            recordInfo.setFEDRecord(Boolean.parseBoolean(recNodeMap.getNamedItem("isFEDRecord").getNodeValue()));
            recordInfo.setValidationstatus(recNodeMap.getNamedItem("validationstatus").getNodeValue());
            recordInfo.setSelected(Boolean.parseBoolean(recNodeMap.getNamedItem("selected").getNodeValue()));
            recordInfo.setAccessmode(recNodeMap.getNamedItem("accessmode").getNodeValue());
            recordInfo.setIsedited(recNodeMap.getNamedItem("isedited").getNodeValue());
        NodeList recList = element.getElementsByTagName("RecordAttribute");


        for(int j=0;j<recList.getLength();j++){ //iterating all record attributes
            NodeList  child = recList.item(j).getChildNodes();

recordInfo.setColumnNameInRecord(recList.item(j).getAttributes().getNamedItem("name").getNodeValue()); recordInfo.setColumnInRecordEdited(Boolean.parseBoolean(recList.item(j).getAttributes().getNamedItem("edited").getNodeValue())); for(int k=0;k

                if("Value".equalsIgnoreCase(child.item(k).getNodeName())){
                    if(child.item(k).getFirstChild()!=null){
                        String value = child.item(k).getFirstChild().getNodeValue();
                    //System.out.println("Value =  "+child.item(k).getFirstChild().getNodeValue());
                    recordInfo.setValue(value);
                    String columnName = recList.item(j).getAttributes().getNamedItem("name").getNodeValue();
                    recordsColumnValueHashMap.put(columnName, value);
                }
                }
                if("OldValue".equalsIgnoreCase(child.item(k).getNodeName())){
                    if(child.item(k).getFirstChild()!=null){
                        String oldValue = child.item(k).getFirstChild().getNodeValue();
                    //System.out.println("oldValue  ="+child.item(k).getFirstChild().getNodeValue());
                    recordInfo.setOldValue(oldValue);
                    }
                }
            }

        }
         recordInfo.setRecordHashMap(recordsColumnValueHashMap);
        }

        records.add(recordInfo);
    }
    return records;
}

【问题讨论】:

    标签: java xml gwt xml-parsing


    【解决方案1】:

    您是在开发模式下运行还是将其编译为实际的 JavaScript 代码。在我的经验中,开发模式的运行速度比交叉编译为 JavaScript 时慢 10 倍。 8s还是很多的!你有没有使用Speedtrace 来查看大部分时间丢失在哪里?

    【讨论】:

    • 是的,我正在开发模式下解析 xml。在生产模式下,它需要更少的时间,即仅 377 毫秒 :)。为什么开发需要太多时间?开发者需要在开发模式下测试数据。
    • 开发模式用插件解释代码。您将代码发送到 GWT 插件,插件会查看它是什么命令并在浏览器中执行它。通过这种方式,它可以触发断点,获取变量的当前值等,因此您可以从调试器中获得一切。您甚至可以更改您的代码,只需刷新浏览器即可获得更新:)。如果将其编译为 JavaScript,GWT 会高度优化代码。这需要很多时间,但运行速度很快(8 秒相比 377 毫秒^^),但编译需要 >20 秒,所以你真的不想将它用于开发^^
    【解决方案2】:

    这 8 秒似乎不太可能用于解析 - 我的猜测是它用于尝试在网络上查找资源,例如 DTD 访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      相关资源
      最近更新 更多