Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-25075

Weather column should render asynchronously

    XMLWordPrintable

Details

    Description

      Job.getBuildHealthReports can be expensive, especially with Maven projects (see JENKINS-19392). Putting jobs into folders does not help, because Folder.getBuildHealthReports recursively traverses them, and the default WorstChildHealthMetric checks the result of each leaf. It should not be called synchronously during page rendering. Rather, WeatherColumn/column.jelly should use an AJAX callback of some kind, effective while the page is fronted. So you would get a quick page load, with some icons filling in progressively. Still puts load on the server but potentially much less.

      Attachments

        Issue Links

          Activity

            jglick Jesse Glick added a comment -

            Auto refresh makes everything that much worse.

            jglick Jesse Glick added a comment - Auto refresh makes everything that much worse.
            jglick Jesse Glick added a comment -

            Looked into implementing this. Tricky to render HTML content from existing column.jelly scripts but ought to be possible. (l:renderOnDemand is not suitable since that makes one HTTP request per response, and is insensitive to page activity. Really want ProgressiveRendering, but this does not yet support HTML output, only JSON, meaning that buildHealth.jelly could not be reused.)

            The real trouble is JENKINS-16341: even creating a single ProgressiveRendering per list view render would add a new entry to BoundObjectTable per page load, which would quickly add up to a huge amount of memory consumed by the server if you have lots of active sessions browsing Jenkins repeatedly.

            jglick Jesse Glick added a comment - Looked into implementing this. Tricky to render HTML content from existing column.jelly scripts but ought to be possible. ( l:renderOnDemand is not suitable since that makes one HTTP request per response, and is insensitive to page activity. Really want ProgressiveRendering , but this does not yet support HTML output, only JSON, meaning that buildHealth.jelly could not be reused.) The real trouble is JENKINS-16341 : even creating a single ProgressiveRendering per list view render would add a new entry to BoundObjectTable per page load, which would quickly add up to a huge amount of memory consumed by the server if you have lots of active sessions browsing Jenkins repeatedly.
            jglick Jesse Glick added a comment -

            Depends on more tractable special case JENKINS-25081.

            jglick Jesse Glick added a comment - Depends on more tractable special case JENKINS-25081 .

            People

              Unassigned Unassigned
              jglick Jesse Glick
              Votes:
              3 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated: