Retrieve FTP files directly to memory

The CFFTP tag includes extensive support for FTP operations. However, all remote file access requires interaction with the local drive. For example, if you want to retrieve and parse an XML file, you have to get the file and save to disk, then use cffile to load it into memory, and finally parse it. All this extra disk access takes unnecessary time.

Since CFMX is now Java based, we can take advantage of the Java network library to perform this same action without disk access.

Continue reading

New Blog Feature: Subscribe to Comments

We’ve added a new feature to our blog, Subscribe to Comments. We’ve seen this in other blogs and love the feature, but had only seen a PHP implementation. We developed a pure ColdFusion implementation that should work with any blog.

Please try it out and let us know what you think. We’ll be posting the code in a few weeks.

How is a CFC called from a template that itself is never called?

I ran into an interesting problem while developing two custom debug templates. The CFMX debugger provides information on all the templates executed in a request, including the execution time for the template and the “parent” or caller for each template.

Interestingly, there is one situation with ColdFusion Components where the parent template itself will never appear in the template list, seemingly to indicate it’s called from a template that is not executed within the request.

Continue reading

Why is a list loop faster than an array loop?

I’ve always assumed that working with lists was far slower than working with Arrays. It just seems obvious since with an array you have a series of values that are indexed sequentially, whereas with a list you have a string that has to be parsed every time you want to work with it.

I was therefore very surprised to learn that looping over a list is much faster in ColdFusion MX than looping over an array. On average, looping through a 500 item list took one quarter the time required to loop over an array containing the same 500 items. This is certainly counterintuitive and besides, didn’t everyone always say string operations were slow in Java?

After reading the generated Java code I found that when you loop over a list by specifying the list attribute of a cfloop statement, ColdFusion optimizes the code by tokenizing the list only at the outset. If you were to use an indexed loop and listGetAt() each element, then ColdFusion would retokenize the list on each call and you’d start to get serious performance degradation.

So what’s the conclusion? Looping over lists is good, but list operations whenever you’re making more than one call to the list function is bad. At least that my new opinion, subject to change without notice. :-)