Difference between revisions of "LSL Script Efficiency"

From Second Life Wiki
Jump to navigation Jump to search
Line 15: Line 15:
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">


The following code snipit will allow testing of a function.
1. Don't add theories.
2. Don't write "x is faster than y", write, "x takes X millis, y takes Y milis".
 
 
The following code will get the time for each fuction call in millis.


<pre>
<pre>

Revision as of 07:03, 16 May 2007

What is Efficiency

Efficiency is how long it takes to run a script.

There are many ways to speed up scripts, such as using ++a instead of a++.

Rules for posting

1. Don't add theories. 2. Don't write "x is faster than y", write, "x takes X millis, y takes Y milis".


The following code will get the time for each fuction call in millis.

integer time() {
    string stamp = llGetTimestamp();
    return (integer) llGetSubString(stamp, 11, 12) * 3600000 + (integer) llGetSubString(stamp, 14, 15) * 60000 + llRound((float)llGetSubString(stamp, 17, -2) * 1000000.0)/1000;
}


default {
  state_entry() {
    float i = 0;
    float max = 10000;
    float current = time();
    while (i < max) {
      i += 1;
    }
    float t = (time()+-current)/max;
    llOwnerSay("The function in the loop took a total of " + (string)t + " milliseconds.");
  }
}

Efficiency

In theory, ++a and a += 1 are equal in speed, however this is not true:

  ++a:     0.364700 millis
  a += 1:  0.346900 millis
  a++:     0.413700 millis

Testing the same function in for loops:

  ++a:     0.358370 millis
  a += 1:  0.351200 millis
  a++:     0.424600 millis

llOwnerSay v. llSay v. llShout v. llWhisper (Channel 0 where applies):

  llOwnerSay(): 4.359000 millis
  llWhisper():  5.201000 millis
  llSay():      5.226000 millis
  llShout():   14.877000 millis

Different Channels (llSay() Used for all):

  -100000000: 1.226400 millis
  -100000:    1.254300 millis
  -100:       1.296100 millis
  -1:         1.292400 millis
  0:          5.226000 millis
  1:          1.242300 millis
  100:        1.249100 millis
  100000:     1.219700 millis
  100000000:  1.228700 millis

Amount of text (llSay() and Channel 1 used for all):

   1 Character:    1.242300 millis
   10 Characters:  1.309700 millis
   100 Characters: 1.965600 millis