Uploaded image for project: 'Tools (JBoss Tools)'
  1. Tools (JBoss Tools)
  2. JBIDE-9372

VPE has a serious performance drawback for rather big pages

XMLWordPrintable

      rather big pages - in general dev project this is normal page size...
      My proposition for VPE developers pay attention to performance. This is example place to enhancement:

      VpeNodeInvocationHandler -> invoke -> for every get attribute call in VPE templates - call this:

      ElService.getInstance().replaceElAndResources(this.pageContext, toReplace);

      ElService -> replaceEl -> getAllResources - array creation and then
      ElService -> replaceEl -> replace - clone array and then array sort

      FOR EVERY sourceNode.getAttribute("...")
      in function VpeAbstractTemplate -> public VpeCreationData create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument)

      {...}

      array create and sort operations should be performed only one time!

      moreover it is possible to bust performance of ElService -> replaceEl -> replace -> for cycle
      here in cycle you create two help strings dollarEl & sharpEl - and then check contains - very time consuming and unnecessary things in case if resourceString.length() < rf.getLocation().length() - just this simple check should bust function performance significantly.

      the same for function ElService -> replaceCustomAttributes

      Jsf2ResourceUtil.processExternalContextPath & Jsf2ResourceUtil.processRequestContextPath - it is possible to optimize both of these functions... Example how should be:
      public static String processRequestContextPath(String value) {
      return jsfRequestContextPath.matcher(value).replaceFirst("");
      }
      and task for developers - find arguments - why it has mach-mach better performance if we call this function several 1000 of times...

      other detail which I admit in ElService -> replaceElAndResources - why you guy do not use intermediate variables?
      your code snippet:
      >>>>
      if((pageContext.getVisualBuilder().getCurrentIncludeInfo()==null) || !(pageContext.getVisualBuilder().getCurrentIncludeInfo().getStorage() instanceof IFile)) {
      return rst;
      }
      final IFile file = (IFile) pageContext.getVisualBuilder().getCurrentIncludeInfo().getStorage();
      >>>>
      my code snippet:
      >>>>
      final VpeIncludeInfo vii = pageContext.getVisualBuilder().getCurrentIncludeInfo();
      if (vii == null || !(vii.getStorage() instanceof IFile)) {
      return rst;
      }
      final IFile file = (IFile)vii.getStorage();
      >>>>
      I advise and recommend use intermediate variables! You will reduce functions call (in my example only 1 time instead of 3), you will reduce code, you make code more readable.

      • the same for ElService -> isELNode

      one more advice to avoid performance problems is move all calculations which is possible out of the cycle:
      take a look VpeStyleUtil -> "public static String addFullPathIntoURLValue(String value, VpePageContext pageContext)" ->
      here you extract getStorage - for every cycle iteration - for such cases I recommend do this only once - before the cycle.

        1. JBIDE-9372_20110721.patch
          88 kB
          Vitali Yemialyanchyk
        2. JBIDE-9372_20110722.patch
          89 kB
          Vitali Yemialyanchyk
        3. JBIDE-9372_20110722_2.patch
          89 kB
          Vitali Yemialyanchyk

            yradtsevich Yahor Radtsevich (Inactive)
            vyemialyanchyk_jira Vitali Yemialyanchyk (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: