> 88 declared but unused variables > 47 declarations of the same or similar variables > 427 instances of "else if" instead of "elsif" > 100 instances of I = I + 1 instead of i+=1 > Numerous examples of variables declared inside for loops, and some of those > are inside other for loops > Variables declared inside condition statements.
So, just to get this out of the way, some benchmark tests. As you have probably discovered by now, elseif isn't valid syntax and leads to a parse error, so my 427 instances of using it are trivial to justify :-) Execution time of various code snippets: =========== for (var i = 0; i< 10000000; i=i+1) takes 2.3 seconds or 0.00023 ms per iteration. The loop structure itself, even if you run it up to 1000 iterations inside a frame, delays the frame only by 0.23 ms. =========== for (var i = 0; i< 10000000; i=i+1) { var testvar = 1.0; } takes 3.0 sec, i.e. the extra time to assign a variable inside the loop is 0.0003 ms. =========== var testvar = 1.0; for (var i = 0; i< 100000000; i=i+1) { testvar = 1.0; } takes 3.1 sec, i.e. declaring a variable outside the loop isn't actually any faster, it boils down to practically the same time. =========== for (var i = 0; i< 10000000; i=i+1) { var testvar = getprop("position/latitude-deg"); } shows that property tree interaction is an expensive operation - this takes 11 sec, i.e. the extra time to pull something from the tree is 0.00087 ms per operation. However, even having 1000 of these per frame delays the frame just by 0.87 ms. =========== for (var i = 0; i< 10000000; i=i+1) { var testvar = math.sin(i * 0.2); } executes in 16 sec, showing that trigonometry is about the same order of expense as interacting with the property tree, i.e. having 1000 trigonometric operations per frame delays you by 1.37 ms. =========== var info = {}; for (var i = 0; i< 10000000; i=i+1) { info = geodinfo(lat, lon); } Now for comparison where the real stuff is happening - this takes a whopping 350 sec to execute, i.e. executing even just 100 geodinfo() calls per frame would delay you already by 3.4 ms. Even worse, the execution speed of geodinfo() depends on terrain detail, the case study is TNCM where most of the terrain is ocean, in custom scenery geodinfo can easily take much longer (for Grenoble LFLG I get 1100 sec), i.e. a single call in custom scenery is already about 0.1 ms of frame delay. Oh well, and it used to be even 50 times slower than what we have now ;-) =========== This might give you some idea why optimizing the code makes only sense in some areas - whatever you do with the Nasal-internal stuff, it's never going to come even close to what you gain by avoiding even a single geodinfo() call. Advanced Weather doesn't burn any significant performance inside Nasal - it burns the performance by calling hard-coded C++ functionality from Nasal. Cheers, * Thorsten ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Flightgear-devel mailing list Flightgear-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/flightgear-devel