Hi, I am not sure about your context, so take it as a grain of salt.
Another way to improve performance is by: - whenever possible, group the things that need to be changed - when you want to update * detach that group from the DOM aka rendering tree * do your update (add new element, sub node, modify existing) * attach the group back * re render the DOM So the rendering is only done 1 or 2 times only - detaching - attaching where as the modifiying part does not affects the rendering Cheers Tonny Kohar -- Citra FX Photo Effects imagine, design, create ... http://www.kiyut.com On Wed, Sep 17, 2008 at 3:44 PM, Julien Beghin <[EMAIL PROTECTED]> wrote: > Hello, > > First, thanks to Andreas Neumann for his first advices about my problem. > > I am working on a Java application which is using a JSVGCanvas to display > some business informations. > > Still in the business part of my application, I may need to perform an > update on a list of text elements in my canvas. > The texts elements are Id and when I remove the object corresponding to the > text, I have to rename the other java objects and their corresponding text > in the canvas. > This represent from 50 to 100 elements that can need to be updated. > > Everything works fine but it tooks real long time to update the complete > list. > > At first, I was using a function to create my elements : > > private Element getElementFromText(....) { > // We create the text element > Element > textGroup=svgDom.createElementNS(SVGConstants.SVG_NAMESPACE_URI,SVGConstants.SVG_TEXT_TAG); > > // We define its attributes > ... > > ... > Node numTextNode = svgDom.createTextNode(displayNum + " "); > Node statusTextNode = svgDom.createTextNode(displayText); > > textGroup.appendChild(numTextNode); > textGroup.appendChild(statusTextNode); > > MapActionIdToSVGElements.put(id, numTextNode); > > return textGroup; > } > > > I also added a Map to wrap Id with corresponding Elements in my svgDoc. This > will avoid several getChild operations > > This method allows me to create my svg content : > > <text style="text-anchor: middle; font-size: 3.3; fill: rgb(0,200,0)" > id="TMTEXT2" transform="translate(0,11.0) scale(1,-1)"> > 0 F > </text> > > > And now I can show you how i update this : > > > The first method is called and just read the map and call a second function > which update a single element > > private void updateActionsLabel() { > Set<Integer> s = MapActionIdToSVGElements.keySet(); > for(Integer i : s){ > modifyActionNumberInSVGDoc(i,"a"); > } > } > > private boolean modifyActionNumberInSVGDoc(int id, String displayNum) > { > > LogManager.getLogManager().log("TMCoreAdaptor>modifyActionNumberInSVGDoc", > "call", null, LogLevel.DEBUG); > Node n = MapActionIdToSVGElements.get(id); > n.setNodeValue("0 "); > return true; > } > > I also added some "simple" timer (removed for this post) to get more info. > Here are the results > Updating action labels > -> Updating action label 1 (0 ms) > -> Updating action label 2 (94 ms) > -> Updating action label 3 (78 ms) > -> Updating action label 4 (109 ms) > -> Updating action label 5 (79 ms) > ... > -> Updating action label 8 (78 ms) > -> Updating action label 9 (438 ms) > -> Updating action label 10 (78 ms) > ... > -> Updating action label 29 (79 ms) > -> Updating action label 28 (78 ms) > -> Updating action label 30 (625 ms) > ... > -> Updating action label 52 (78 ms) > Update time 4813 ms > > > As you can see, there are very long update like #30 with 625ms and the first > one is at 0ms.... > > > > I am new to Batik and i must have done something wrong ( I hope that is the > problem... ). I also hope, someone will > figure out what is happening there. > I also tried some other things like : > - suspending the redraw ( same time for execution) > - setting documentstate to static ( better, but i have no refresh) > - removing listeners / adapters (no effect) > > Thanks in advance for your help > Julien Beghin > > ________________________________ > Souhaitez vous « être au bureau sans y être » ? Oui je le veux !
