I've been toying around with the idea of wrapping my output objects in
Iterators on my View pages.  The idea is that I'd like my Views to be
relatively independent of the datatype that they're trying to display.  So
my View would be able to work with either a Query, Array of Structs, Array
of Beans, all using the same looping code on my .cfm page.  So I wrote up a
definition for my abstract iterator:

getCurrentPosition():Numeric
getSize():Numeric
reset():Void
skip(numberOfRowsToSkip:Numeric)
skipTo(position:Numeric)
atBeginning():Boolean
hasMore():Boolean
next():Any
previous():Any
current():Any

And I built a few concrete subclasses of that for each data type:
QueryIterator, ArrayIterator, BeanIterator.  And the code for my View pages
becomes:

<cfloop from="1" to="#Variables.iterator.getSize()#" index="x">
        <cfset Variables.current = iterator.next() />
        <!--- output the data of the current element (Variables.current)
--->
</cfloop>

My problem is that my iterators are running terribly slow.  Roughly 10 times
slower than cfloop'ing for most Queries.  I did some basic time trials, and
here are the averages of the execution times:

10 record Query
Iterator: 24 ms
Cfloop: 4 ms

100 record Query
Iterator: 24 ms
Cfloop: 4 ms

250 record Query
Iterator: 54 ms
Cfloop: 11 ms

500 record Query
Iterator: 123 ms
Cfloop: 17 ms

1000 record Query
Iterator: 241 ms
Cfloop: 25 ms

10000 record Query
Iterator: 2648 ms
Cfloop: 382 ms

For the smaller record sets, the time difference is negligible, but for the
larger record sets, the time difference is a little disturbing.  I'm not
typically going to be looping over 10000 records all in one page, but it
would let me sleep a little better at night if the time difference is
typical sacrifice for abstracting out a looping mechanism.  What has been
your experience with using iterators?   Is it worth the abstraction, or
should I just stick to having my Views dependent on the collection type?

I can post the code for my CFC's and tests as well, if anyone is interested
in seeing them.

Jonathon



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to 
date
Get the Free Trial
http://ad.doubleclick.net/clk;160198600;22374440;w

Archive: 
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:298358
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4

Reply via email to