Как улучшить синтаксический анализ GWT XML? - PullRequest
2 голосов
/ 05 августа 2011

Как улучшить синтаксический анализ XML в GWT?

Мой xml выглядит следующим образом с 1 записью

Для разбора 100 Запись GWT занимает 8 секунд

Есть ли способ улучшить производительность? Пожалуйста, смотрите мой код gwt для разбора xml

<Значение> 12345678 </ Значение>

12345678

</ Запись>

Мой код анализа GWT выглядит следующим образом:

приватный статический список parseRecords (Document mainDOM, Список записей) { NodeList recordNodeList = mainDOM.getElementsByTagName ("Запись"); // Запись узла RecordInfo 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 (к) .getAttributes () getNamedItem ( "имя") getNodeValue ()..); recordInfo.setColumnInRecordEdited (Boolean.parseBoolean (recList.item (J) .getAttributes () getNamedItem ( "изм") getNodeValue ())..); для (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;
}

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

вы работаете в режиме разработки или скомпилировали его, чтобы задействовать весь код JavaScript. В моем опыте режим разработки работает в 10 раз медленнее, чем при кросс-компиляции в JavaScript. Еще 8-е много! Вы использовали Speedtrace , чтобы увидеть, где теряется большая часть времени?

0 голосов
/ 05 августа 2011

Кажется крайне маловероятным, что 8сек тратится на разбор - я предполагаю, что он потрачен на поиск ресурсов в сети, таких как доступ к DTD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...