Edgewall Software

Changes between Version 3 and Version 4 of TracDev/Performance


Ignore:
Timestamp:
Aug 8, 2009, 6:12:12 PM (15 years ago)
Author:
Christian Boos
Comment:

add some #ImprovementOpportunities

Legend:

Unmodified
Added
Removed
Modified
  • TracDev/Performance

    v3 v4  
    1313 - using JMeter; see TracPerformance/LoadTestingWithJmeter
    1414 - using `ab` (see [./0.11.5#HowItimed])
    15      ''For timing template generation I used ApacheBench? and tossed out "warmup" requests, sometimes testing with keep alive (getting slightly better req/s)''
     15     ''For timing template generation I used ApacheBench and tossed out "warmup" requests, sometimes testing with keep alive (getting slightly better req/s)''
    1616{{{
    1717ab [-k] -c 1 -n 10 url
     
    2121 - #7490 contains some profiling data.
    2222 - Shane Caraveo gave some instructions about profiling Trac ([./0.11.5#Profilingissues]); see also #8507 which contains his scripts.
     23
     24== Improvement Opportunities ==
     25=== Genshi ===
     26The impact of Genshi is especially important for requests generating a big amount of data, like the changeset view or the file browser view, especially when compared to ClearSilver.
     27
     28From [./0.11.5#Genshi], we can get the following ideas:
     29 - revert to `out.write(_encode(u''.join(list(iterator))))` instead of using the StringIO (that was a change done during #6614, but we could have a `favor_speed_over_memory` setting) -
     30 - avoid the whitespace filter (same setting)
     31
     32Additionally, there's the idea to increase the size of the template cache for Genshi (#7842), also something that could be done if a  `favor_speed_over_memory` configuration is active.
     33
     34We could also possibly gain some speed by not passing all the content through all the filters, but pre-render some parts in a faster way, then wrap them in `Markup` objects. That would make them opaque to the filters, but that would be most of the time OK (or the plugins that really need that could somehow selectively turn this optimization off). See #5499 (browser) and #7975 (changeset).
     35
     36 
     37=== gc.collect ===
     38According to Shane's analysis, the systematic `gc.collect()` call after every request is one of the most critical performance killer for the average request ([./0.11.5#gc.collect]).
     39See proposed implementation of a secondary thread taking care of this, in #8507.