reReplace or replace: That is the Question
reReplace or replace: That is the Question
I had to investigate this, as these sorts of performance comparisons always grab my interest. It all started with a post in alt.comp.lang.coldfusion, where Drew asked: "I'm trying to take this value 0.85 and turn it into 85, or 1.35 and turn that into 135."
There were several suggestions, but two stood out: using reReplace() and replace(). These prompted me to test which one would perform better. The results were quite interesting, especially when tested on **ColdFusion 4.5**—and those were shocking! Below are the tests.
Test 1: Using reReplace()
<cfset tickBegin = GetTickCount()>
<cfset a = "01234567.89">
<cfloop from="1" to="100000" index="b">
<cfset c = reReplace(a,'[^0-9]','','ALL')>
</cfloop>
<cfset tickEnd = GetTickCount()>
<cfset loopTime = tickEnd - tickBegin>
<cfoutput>#loopTime#</cfoutput>
Test 2: Using replace()
<cfset tickBegin = GetTickCount()>
<cfset a = "01234567.89">
<cfloop from="1" to="100000" index="b">
<cfset c = replace(a,'.','','ALL')>
</cfloop>
<cfset tickEnd = GetTickCount()>
<cfset loopTime = tickEnd - tickBegin>
<cfoutput>#loopTime#</cfoutput>
Performance Comparison
| Test 1: reReplace() | Test 2: replace() | ||||
|---|---|---|---|---|---|
| # | CF4.5 | CFMX | CF4.5 | CFMX | |
| 1. | 5939 | 2223 | 4627 | 190 | |
| 2. | 5887 | 2163 | 4737 | 200 | |
| 3. | 5908 | 2153 | 4817 | 191 | |
Conclusion
First thing—WOW! How did we ever manage to work efficiently with CF4.5?
As you can see, by avoiding the regex engine, the execution times in **ColdFusion MX** drop significantly—by almost **100%**. This proves that for simple string replacements, avoiding regex (using replace()) can provide massive performance improvements.
Would love to hear your thoughts—let me know if you've found similar results in your own testing!