Deploying (Shipping OpenLayers in your Application) =================================================== OpenLayers comes with pre-configured examples out of the box: simply download a release of OpenLayers, and you get a full set of easy to use examples. However, these examples are designed to be used for development. When you're ready to deploy your application, you want a highly optimized OpenLayers distribution, to limit bandwidth and loading time. Single File Build +++++++++++++++++ OpenLayers has two different types of usage: Single File, where all Javascript code is compiled into a single file, OpenLayers.js, and the development version, where Javascript files are all loaded at application start time. The single file build takes a set of OpenLayers Javascript files, orders them according to dependancies described in the files, and compresses the resulting file, using the jsmin compression library. Building a single file version of the OpenLayers library changes the behavior of the library slightly: by default, the development version of OpenLayers expects to live in a directory called "lib", and expects that images and CSS live in the directory above the OpenLayers.js file:: img/pan-hand.png theme/default/style.css lib/OpenLayers.js lib/OpenLayers/Map.js ... However, when deploying a single file build of OpenLayers, it is expected that the library will instead be at the same level as the theme and img directories:: OpenLayers.js theme/default/style.css img/pan-hand.png ... Building the Single File Build ------------------------------ The single file build tools are deployed with an OpenLayers release in the 'build' directory. The tools require Python in order to build. On Linux and other similar operating systems, given that OpenLayers is stored in the 'openlayers' directory, a single file build could be created by issuing the following commands:: cd openlayers/build ./build.py This would create a file in the build directory called "OpenLayers.js", which contains all the library code for your single file build of OpenLayers. In Windows, from the Start Menu, select Run. Copy the path to build.py from the address bar of the Explorer Window into the text box and then add the name of the configuration file (or blank for the default): C:\\Downloads\\OpenLayers-2.6\\build\\build.py lite Custom Build Profiles +++++++++++++++++++++ In order to optimize the end-user's experience, the OpenLayers distribution includes tools which allow you to build your own single file version of the code. This code uses a configuration file to choose which files should be included in the build: In this way, for production use, you can remove classes from your OpenLayers JavaScript library file which are not used in your application. OpenLayers ships with two standard configurations to create a single file version: full: This is the full build with all files. lite: This file includes a small subset of OpenLayers code, designed to be integrated into another application. It includes only the Layer types neccesary to create tiled or untiled WMS, and does not include any Controls. This is the result of what was at the time called "Webmap.js" at the FOSS4G 2006 Web Mapping BOF. Profiles are simple to create. You can start by copying library.cfg or lite.cfg to something else, e.g. myversion.cfg in the build directory. To build a profile, you should add files needed for your application to the '[include]' section of the file. The files listed here should be the list of files containing any class you use in your application. You can typically find these classes by looking through your code for any cases where 'new OpenLayers.ClassName()' is used. Taking the 'lite.html' example, we see that there are two 'new' statements in the file: one for the OpenLayers.Map class, and one for the OpenLayers.Layer.WMS class. We then add the corresponding files to our include section:: [include] OpenLayers/Map.js OpenLayers/Layer/WMS.js Once we have done that, we can build our profile by adding the profile name to the end of our ealier build command:: ./build.py myversion This will create a much smaller OpenLayers version, suitable for limited applications. All applications can benefit from a custom build profile. OpenLayers supports many different layer types, but most applications will only use one or two, and many applications do not need the full support of many of the features in OpenLayers. In order to limit your download time and library size, building a custom profile is highly recommended before deploying an OpenLayers application: it can help shrink the size of your library by a factor of five over using the full library. Deploying Files +++++++++++++++ In order to deploy OpenLayers, there are several different pieces that must be deployed. OpenLayers.js The library. This provides the JavaScript code for your application to use. theme directory The theme directory contains CSS and image files for newer controls, whose styling and positioning is controlled entirely by CSS. img directory This directory provides images to be used for some controls, like the PanZoom control, which do not use CSS for styling. As described above, when deploying these files with a single file OpenLayers build, they should all live in the same directory: this allows OpenLayers to properly find and include them. Minimizing Build Size +++++++++++++++++++++ In order to minimize the size of the files delivered to the client, there are two important factors: minimizing the size of all downloads (via whitespace removal, for example) and delivering compressed data to clients which support it. There are three types of data that OpenLayers uses, and each has a different means of compression. * Control Images Control images are generally PNG images. These images should be compressed with png compression tools like pngcrush to create the minimal png images. The images provided with OpenLayers (both for CSS-styled and non-CSS styled controls) have had this applied to them, so these images are already minimized. * CSS csstidy_ is a library which removes whitespace from CSS stylesheets. By using csstidy, you can reduce the size of OpenLayers stylesheets by approximately 30%. Releases of OpenLayers beyond 2.10 include CSS tidy stylesheets in the theme directory with .tidy. in the name. To take advantage of these stylesheets, you should create your map with a null theme, and include the stylesheet directly in the page. :: * Javascript The singlefile build tools have support for a number of tools which can remove whitespace from Javascript, including jsmin (from Douglas Crockford) and the Closure Compiler (from Google). When running the build tool, you can specify using the closure compiler by using the '-c closure' option to the build.py tool. Closure's compiler with the default optimizations gives approximately a 20% savings over jsmin's compression. The options available for compression are: * closure This requires you to have a closure-compiler.jar in your tools directory. You can do this by fetching the compiler from: http://closure-compiler.googlecode.com/files/compiler-latest.zip Then unzipping that file, and placing compiler.jar into tools and renaming it closure-compiler.jar. * closure_ws This uses the closure compiler webservice. This will only work for files source Javascript files which are under 1MB. (Note that the default OpenLayers full build is not under 1MB.) * jsmin jsmin is the default compiler, and uses the Python-based jsmin script to compress the Javascript. * minimize This is a simple whitespace removing Python script, designed to fill in when other tools are unavailable. * none None will leave the Javascript uncompressed. .. _csstidy: http://csstidy.sourceforge.net/