After looking at ImageDirectoryGenerator, which runs about 3x slower than
DirectoryGenerator on image files, I think the following changes will speed
it up (and similarily, MP3DirectoryGenerator).

For fun, compare DirectoryGenerator against ImageDirectoryGenerator on the
same directory (with a moderate number of images:

<map:match pattern="files/*">
        <map:generator type="DirectoryGenerator" >
                <map:parameter name="depth" value="3" />
        </map:generator>
        <map:serialize type="xml" />
</map:match>

<map:match pattern="files2/*">
        <map:generator type="ImageDirectoryGenerator" >
                <map:parameter name="depth" value="3" />
        </map:generator>
        <map:serialize type="xml" />
</map:match>

Wouldn't it be nice if the second time you requested the image info, it was
as fast as the DirectoryGenerator?



Suggestions:

- having getSize() call getFileType() and then getJpegSize() or
getGifSize(), introduces nice modularity but sacrifices speed. Each function
in that sequence calls (that's two calls total):

  new BufferedInputStream(new FileInputStream(file));

Instead, instantiate the BufferedInputStream in getSize() and pass it to the
other functions. Or move the work from getFileType() and get*Size() back in
to getSize().


- more importantly, caching the information from getSize() plus
'lastModified' in an internal hash table with the file's URL as key would
remove the need to do the expensive work each time. If the file hasn't
changed, then it's size (or MP3 info) hasn't either.


Unfortunately, I don't know Cocoon well enough to understand if Generators
are global instances (so that all requests will share the hash table) or
whether it exists per pipeline, per sitemap, etc. My point: I'm not sure how
to implement the cached info correctly.



I would love to do this work and send in the patch myself, and I'll attempt
to do so when I have the latest C2 source installed here. Unless someone
desparate does it first :-)

Per


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to