繁体   English   中英

O(n ^ 2)中的性能调整代码更具性能

[英]Performance tune code in O (n^2) to be more performant

我有一个带有代码的Spring Boot Java控制器,该控制器利用OpenKM文档管理API在文档管理系统中搜索文档并在前端使用Ajax,HTML,CSS和Jquery数据表显示结果。

由于API的编写方式,我无法在一个调用中获取带有元数据的文档对象,但需要在两个嵌套的for循环中将第一个API操作的调用输出用作另一个API操作方法的过滤器。

另外,我必须迭代API返回对象的toString方法来检索元数据信息,因为元数据信息无法通过返回对象的属性进行访问。

问题是此代码的性能。 我想看看是否有一种方法可以优化此代码。

    // Read the property or metadata to use in constituting the StoredDocument object
    for (QueryResult queryResult : resultSet.getResults()) {
        // Create a locally-scoped List<String>
        List<String> listOfStoredDocumentProperties = new ArrayList<String>();
        Document document = queryResult.getDocument();
        String nodeId = document.getPath();
        // Populate storedDocument object
        storedDocument = new StoredDocument();
        storedDocument.setAuthor(document.getAuthor());
        storedDocument.setCreated(document.getCreated());
        storedDocument.setLastModified(document.getLastModified());
        storedDocument.setPath(document.getPath());
        storedDocument.setPermissions(document.getPermissions());
        storedDocument.setSize(document.getActualVersion().getSize());
        storedDocument.setUuid(document.getUuid());
        storedDocument.setVersionNumber(document.getActualVersion().getName());
        // System.out.println(nodeId);
        try {
            listOfFormElement = okm.getPropertyGroupProperties(nodeId, documentVo.getGroupId());
            int counterForTrackingDocDirectionPos = 0;
            for (FormElement formElement : listOfFormElement) {
                ++counterForTrackingDocDirectionPos;
                if (counterForTrackingDocDirectionPos == 4) {
                    String formElementString = formElement.toString();
                    // System.out.println("formElementString: " + formElementString);
                    System.out.println("name: " + formElement.getName());
                    System.out.println("formElement: " + formElement);
                    String transformedFormElementString = StringUtils.EMPTY;
                    try {
                        transformedFormElementString = formElementString.substring(0, formElementString.indexOf(", selected=true"));
                        // Read the string from a position that is 3 steps before the last position in the string.
                        transformedFormElementString = transformedFormElementString
                                .substring(transformedFormElementString.length() - 3, transformedFormElementString.length()).trim();
                        transformedFormElementString = transformedFormElementString.startsWith("=")
                                ? transformedFormElementString.substring(1, transformedFormElementString.length()) : transformedFormElementString;
                    } catch (Exception ex) {
                        // To catch scenario where formElementString.indexOf(", selected=true") does not find the
                        // specified string. This happens when document direction is not set and therefore is
                        // selected=false for both the options IN and OUT.
                        transformedFormElementString = "NOT SET";
                    }
                    listOfStoredDocumentProperties.add(transformedFormElementString);
                    System.out.println("transformedFormElementString: " + transformedFormElementString);
                } else {
                    String formElementString = formElement.toString();
                    String transformedFormElementString = formElementString.substring(formElementString.indexOf("value="),
                            formElementString.indexOf("data="));
                    // Remove the preceding 'value=' and the last 2 character-constituted string ", "
                    transformedFormElementString = transformedFormElementString.substring(6, transformedFormElementString.length() - 2).trim();
                    listOfStoredDocumentProperties.add(transformedFormElementString);
                }
            }
            storedDocument.setCompanyName(listOfStoredDocumentProperties.get(0));
            storedDocument.setProductLine(listOfStoredDocumentProperties.get(1));
            storedDocument.setSubjectHeading(listOfStoredDocumentProperties.get(2));
            storedDocument.setDocumentDirection(listOfStoredDocumentProperties.get(3));
            storedDocument.setDocumentType(listOfStoredDocumentProperties.get(4));
            storedDocument.setReferenceNumber(listOfStoredDocumentProperties.get(5));
            storedDocument.setDate(ISO8601.parseBasic(listOfStoredDocumentProperties.get(6)).getTime().toString());
            // Add the storedDocument object to the return list
            listOfstoredDocuments.add(storedDocument);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchGroupException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (PathNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (RepositoryException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (DatabaseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnknowException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (WebserviceException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

解决方案是扩展REST API。 在专业版中,REST API可通过插件体系结构https://docs.openkm.com/kcenter/view/okm-6.4/creating-your-own-rest-plugin-(-extending-rest-api-)进行扩展。 .html ,在社区中此选项仍然不存在。 这个想法是从服务器端构建一种方法,该方法提供真正需要的确切数据,从而创建高级方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM