Stop using MapScript. I recently gave this advice to an email correspondent, and I'm repeating it here for my readers. Cease, or at the very least, minimize your use of MapServer's various
language bindings. Instead, embrace MapServer's domain-specific language (DSL) and write more of the declarative cartographic scripts known as mapfiles. Use the mapserv (or shp2img) program to compile these scripts into images. This is the path to happiness and prosperity.
A common complaint of the mapscript programmer is: "My program runs N times slower than the MapServer CGI". Of course it does. MapServer's code has been stressed and optimized over the years. It's faster and less buggy than anything you're going to write without serious effort.
MapServer's scripting APIs are inconsistent and not well documented, not friendly to the user. On the other hand, your
favorite programming environment bristles with excellent tools for creating text documents such
as a MapServer mapfile. Ed McNierney has long advocated the use of C preprocessors to generate mapfiles. A fine example for Python is Allan Doyle's ElementBuilder-based
mapfile builder. I would be surprised if Ruby's Builder couldn't be extended in a similar
fashion.
Another reason to embrace MapServer's DSL is the reasonable expectation that tools will
evolve to port your MapServer mapfiles to other applications. Good luck getting help to
port your thousands of lines of custom mapscript code to PrimaGIS, Mapnik, or MapGuide.
MapServer has but one obstacle to programming in such a completely declarative style: you can't pipe in a script. The script must be a file on disk (hence the "file" in mapfile), and
this requires an often unnecessary I/O round trip. For the same reason, Allan has to write
his mapfiles out of Python to disk before he can load them again into mapscript map objects:
maps can not be instantiated from strings.
Why do these limitations persist in MapServer? Because developers
lost the declarative trail when they found mapscript.
Among them, I was caught up in writing too much code with mapscript.py. From a distance, it's clear to me
that I overlooked many of the benefits of using MapServer in a completely declarative style.