first posted several weeks ago.
Rob's system is much more than a chat app -- though a chat really shows
it off.
I wanted to do some PIA (Robs acronym for Poor Internet/Interface
Application) apps where data exchange speed between the host and client
is very important.
To do this I wrote some CFCs to handle the server-side, the web
service, and to implement a function that we call "Thin Arrays".
The Thin Array functions take a CF query or CF array and converts it
into a streamlined packet that defines the data and structure in a
single string.
This Thin Array contains very little non-data overhead and can be sent
to the client, quickly with minimal bandwidth usage (and very few
processing cycles to serialize/de-serialize at either end) .
Rob wrote the complementary js routines at the client & incorporated
them into Neuromancer. -- they are lean and wicked-fast.
What Rob does in effect, is retrieve and replicate the equivalent of
the server-side query or array on the client. Then he provides a set
of functions to manipulate the client copy of the data structure.
Rob uses the Thin Array format to retrieve the chat messages (a db
query on the server) to his chat program on the client... yes his chat
logs every message to a database on the host.
To illustrate other uses of Robs system and Thin Arrays, I have written
2 programs to illustrate how (part of) a drill down might look:
1) EmployeeDrillDownPreload.cfm --
When the initial page is downloaded it includes a table that displays
the first 5 records of n records in the query. When the page initially
loads, it requests the entire query (15 rows in our example) and builds
the equivalent structure on the client. The user can next/prev page
thru these records 5 at a time without any interaction with the host.
2) EmployeeDrillDownOnDemand.cfm --
Same as above except only the 1st 5 records are retrieved on page load.
Each next/prev request retrieves the desired set of 5 records from the
server.
This shows how fast Robs system can consume a web service and how
efficiently thin arrays can be used to exchange data.
The meagre documentation on thin arrays is included as comments in the
cfBAM,cfc -- available for download at Robs site.
http://www.rohanclan.com/products/neuromancer/
The 2 apps above are also available for download -- or if you'd just
like to see PIAs in action go to the following links:
Note: both of these apps have an initial 2-second delay to cover
connection to, and learning of, the remote web service -- I didn't have
a js "Loading..." routine handy.
So, after the page loads, wait a few seconds until a value appears in
the elapsed time box.
http://www.rohanclan.com/products/neuromancer/datatest/
EmployeeDrillDownPreload.cfm
and
http://www.rohanclan.com/products/neuromancer/datatest/
EmployeeDrillDownOnDemand.cfm
You might want to bring these 2 apps up side-by-side for camparison.
And be sure to visit Rob's PIA chat at:
http://www.rohanclan.com/products/neuromancer/chatdemo2.cfm
I hope you like what you see -- we are quite happy with it!
BTW, the Employees database is the cfSnippets db that comes with CFMX.
So if you installed the CFMX examples you can run these apps without
change
For the techies out there, Rob has added a new feature called
synch/asynch. This allows the client-side app to tradeoff performance
against losing some data packets sent from the host*. Things like the
drill downs will likely operate synch mode so no data packets are lost
and, because these are UI event driven, there will be no noticeable
affect on client performance.
* Actually, only packets in transit are lost --the original data
remains intact on the host (and client) for retransmission or
synchronization.
There is a class of apps, however, likes chats, status monitors, etc,
where the data is constantly updated and a few lost data packets are
tolerable -- the next data update will replace them anyway. So
Neuromancer allows you to run this portion of your app with separate UI
threads and data exchange threads -- the UI doesn't need to wait for
the data exchange and vise versa. This provides a significant
improvement in performance and a much crisper feel for the UI, with a
tolerable loss of a few data packets,
The synch/asynch feature allows you, the developer, to optimize the
performance of the UI (and data exchange) according to the needs of
each specfic app.
The entire package is free, open source and available for download at:
Enjoy!
Dick
On Mar 31, 2004, at 8:21 AM, Rob wrote:
> On Wed, 2004-03-31 at 04:59, Whittingham, P wrote:
> > Rob,
> >��
> >���I like your code alot. Does it works with a cfm template?
> You mean instead of a web service? I don't think it would becuase what
> it does is makes a _javascript_ object that matches a web service, you
> then use that javascritpt object locally... however, you *could* use
> the
> Neuromacer libraries to call cfm pages by hand.
>
> > If not, I could extend its capability. Do you think it could work a
> > different web service (ie., .NET, Oracle)??
> In theory would work with any web service. I only have access to cfmx
> so
> I have gotten it to pass stuff pretty well with cfmx, but it is using
> SOAP to do the transfers so it should work (or will work with a bit of
> fiddling)
>
> Cheers Patrick,
> --
> Rob <[EMAIL PROTECTED]>
>
[Todays Threads] [This Message] [Subscription] [Fast Unsubscribe] [User Settings]

