Fast/slow code example (was: Re: compileIt for revolution?)
Jim Bufalini
YourSignup at Yahoo.com
Fri Jun 24 14:42:18 EDT 2005
Eric,
For someone moving from other languages (like I am) to Transcript, I believe
three of the four errors you point out in your example should be obvious and
the same in all languages. Those are: 1. Repeatedly accessing the same data
structure (field) instead of first putting it into a variable. 2. Repeatedly
updating the screen on a background process. 3. Repeatedly setting a
property that only needs to be set once.
However, the "repeat with i =" form being slower than the "repeat for each"
was news to me!
There is nothing in the documentation, that I can find, that addresses the
most efficient way, from the perspective of the engine, to write a control
structure. Apparently, this is particularly true of the repeat structure. Is
it also true for say the if..then structure? Is it more efficient to put
your conditions into variables and then use the variables as conditions of
the if...then?
These are the kinds of things a newbie (like myself) would greatly
appreciate being documented. This is to say, if there are two or more ways
to write the same statement (as with the repeat example), then if someone
knows one works faster than the rest, because of their knowledge of the
inner workings of the engine, then this would be valuable to document or
post.
This might cut down the 300 pages. :)
Jim
-----Original Message-----
From: use-revolution-bounces at lists.runrev.com
[mailto:use-revolution-bounces at lists.runrev.com]On Behalf Of Eric
Chatonet
Sent: Thursday, June 23, 2005 11:02 PM
To: How to use Revolution
Subject: Fast/slow code example (was: Re: compileIt for revolution?)
Hi Christian,
Le 24 juin 05 à 10:21, Langers Christian a écrit :
> Could you, please, give us (newbies/intermediate scriptesr) some
> examples of fast/slow script code ?
They would be too many :-)
In fact, the problem is often more an architecture issue than a
simple code issue.
But here is one tiny trivial example among thousands to give you some
clues:
on CheckList
repeat with i = 1 to the number of lines of fld "List1"
set the itemDel to tab
put item 2 of line i of fld "List1" & cr after fld "List2"
end repeat
end CheckList
Main errors in the above 4 lines are:
manipulate data directly from a field (a lot of work for the engine)
use the "repeat with i" form slower than the "repeat for each" form
(especially noticeable with long lists)
force a screen redraw at each repetition (that's the must for slowing
down)
set the itemDel unnecessarily at each repetition
The result with 1000 lines: more than 13 seconds...
Better code:
on CheckList
local tList, tLine, tNewList
-----
put fld "List1" into tList
set the itemDel to tab
repeat for each line tLine in tList
put item 2 of tLine & cr after tNewList
end repeat
put tNewList into fld "List2"
end CheckList
manipulate data into a variable
use the "repeat for each" form
use one screen redraw only
set the itemDel only when needed
The result with 1000 lines: less than 20 milliseconds!
650 times faster...
Keep in mind that to answer correctly your request, this post should
be a 300 pages book :-)
May be Dan wrote it?
Best Regards from Paris,
Eric Chatonet.
----------------------------------------------------------------
So Smart Software
For institutions, companies and associations
Built-to-order applications: management, multimedia, internet, etc.
Windows, Mac OS and Linux... With the French touch
Free plugins and tutorials on my website
----------------------------------------------------------------
Web site http://www.sosmartsoftware.com/
Email eric.chatonet at sosmartsoftware.com/
Phone 33 (0)1 43 31 77 62
Mobile 33 (0)6 20 74 50 86
----------------------------------------------------------------
_______________________________________________
use-revolution mailing list
use-revolution at lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution
More information about the use-livecode
mailing list