It's in the wee hours of the night and I'm trying to knock out one more item from my client's laundry list: speed up the load time of a specific template in his Model Glue app.
This particular template has several different select lists, each being populated with the results of a Model-Glue generic List broadcast. It also relies upon the return of a pre-populated object that is fairly "heavy" as far as Reactor-defined objects go (many hasOne/hasMany relationships), it being retrieved via a MG generic Read. (if you're not familiar with Model-Glue's generic database messages, check out the MG Docs). So, the first thing I thought to do was find out if a generic message was the most efficient way to interact with Reactor.
I created a simple method in my controller that, for all intents and purposes, duplicated the functionality of the generic Read: I then modified my modelglue.xml, commenting out the generic Read and replacing it with a message to my replacement method: <!-- <message name="ModelGlue.genericRead"> --> Now for some time tests based on Model-Glue's debugging output!
<cfargument name="event" type="any" required="yes" />
<cfset var reportID = arguments.event.getValue("reportID",0) />
<cfset var retVal = "" />
<cfset retVal = getModelGlue().getORMService().createRecord("Report").load(ReportID=reportID) />
<cfset arguments.event.setValue("ReportRecord",retVal) />
</cffunction>
<argument name="recordName" value="ReportRecord" />
<argument name="criteria" value="ReportID" />
<argument name="object" value="Report" />
</message>
<message name="getRecordObject" />
The results showed that, after the application's initialization ("init=true"), the generic Read was an average of THREE TIMES FASTER than the manual record creation using the ORM Service (99ms VS 307ms) . During initialization, the manual record creation was an average of 26 TIMES FASTER (422ms VS 11,070ms)! But, how often do you really need to reinitialize your app? I'll be sticking with the generic Read.
I didn't dig too deeply into why the performance differences might be there, but I did notice that the Model Glue's implementation of the generic Read is utilizing the ORMAdapter and the 'read/new' methods, whereas the manual call examples I found to create a Record object use the ORMService and the 'createRecord' method. Not sure what the difference there is, but there must be one.
Anyway, just thought I'd toss that out there as some rough empirical evidence to support the use of MG's generic messages (if your app uses an ORM
).
P.S. If you're interested in the raw data(er), well, it was just too bulky and boring to take up blog space with it. If you really want to see the actual times, though, here they are.
You are not logged in, so your subscription status for this entry is unknown. You can login or register here.


