jbetolo is a CSS/JS file merging, minimization and compression utility helping you optimize your site load.

If you need help let me know through the contact form.

If you use jbetolo, please post a rating and a review at the Joomla! Extensions Directory.

Description
jbetolo helps you improve your site loading time by
  1. merging
  2. compressing
  3. minimizing
  4. and serve the generated file with correct http header so that your site visitors browser caches the files
In addition jbetolo can help you:
    • solve javascript library conflicts and dependency issues, by allowing you to sequence the loading of the libraries and inject necessary stop conflict code
    • work in a lock-down mode, meaning that last known merged files are served instead of an eventually new generation of files
    • remove certain unwanted js/css files, no need to hack extensions that loads unwanted files
    • merging option to indicate which files that should be excluded or included from the merging process
    • exclude certain components from being affected by jbetolo
    • move inline js scripts to either header, bottom of the page or leave it as it is
    • move merged js file as well as other non-merged js files to the bottom of page or leave it within the header, need to be used with caution as it might affect the dependency of inline javascript files
    • leaves IE conditioned js files untouched
    • caching age option (this is browser caching age)

    For all the words I can say this capture of the various available configuration parameters would tell you most:

    jbetolo-parameters

    Download

    Please refer to the github repo of the project at: github.com/gobezu/jbetolo/ for changelog

      Usage
      • just read in the description of another optimization plugin an advice I would like to forward to users, paraphrasing:

        don't expect jbetolo to work out of the box, although it will do excellent in many cases.
        jbetolo helps you tune YOUR site, thus it needs to be adjusted to YOUR specific setup.

        Having said that, I always welcome you to contact me and I will try my best to provide advice, although there can never be guarantee
      • make sure that jbetolo is ordered to be right before the system cache plugin in the order among plugins, regardless if the system cache is enabled or not
      • best optimization result is achieved only by having a certain level of familiarity with the various extensions you are employing and how they use/missuse various JS libraies available, most commonly mootools and jQuery. Having a mix of mootools, jQuery (sometimes several version of it) and maybe additional JS libraries is something that will inevitably heart performance, and not the least might give rise to various JS conflicts and errors. You can use the various options of include/exclude/delete both from css and js within jbetolo to achieve an optimal setup.
      • I have come across cases where SEF extension redirections doesn't play well with jbetolo and easily solved by one of the following ways:
        • simply configure the SEF extension to skip com_jbetolo
          • sh404sef: Control panel > sh404sef Configuration > By component (tab) > in jbetolo row choose (in the first drop down) skip
          • AceSEF: - extensions > in com_jbetolo row and Router column choose Disable SEF in the drop down
        • if similar setting is not available in the SEF extension you are using adding exception to the rewriting rules of .htaccess works. Add the lines below in .htaccess among the SEF rewrite rules. This should ofc not have any implications on your rewrites other than for jbetolo of which call we really don't need to be rewrite.
      RewriteCond %{QUERY_STRING} !(^|&)option=com_jbetolo [NC]
      • a conflicting expiry/cache-control is not favorable to your efforts, so please assure that .htaccess settings doesn't conflict with your settings in jbetolo
      • in case of performance issues please try to switch the minimization off, although this shouldn't be an issue on a site where external js/css files are static, as cases are mostly.
      • all parameters are properly documented so please do follow the provided instructions, in case of lacking or incorrect information contact me through my contact form so that I can correct it and help others
      Readings

      Excellent references and tools regarding performances are:

      PHP performance related readings:

      General

      • World Wide Wait and I thought I was the only one suffering here in Ethiopia with my worse than dial-up connection
      The name

      betolo (without the j in jbetolo) is an amharic (official language in Ethiopia) word which means quickly, which I hope this utility will be able to serve your resouce files and ultimately allowing your site to perform quickly.

      Roadmap

      Please refer to: https://github.com/gobezu/jbetolo/issues

      Change log

      Please refer to the github repo of the project at: github.com/gobezu/jbetolo/ for changelog

      * -> Security Fix # -> Bug Fix + -> Addition ^ -> Change - -> Removed ! -> Note

      2011-03-04 / v2beta7

      Forgive my recklessness reg. update of change log, will start updating this one properly as of RC1 coming next week, too lazy to copy svn notes :)

      2010-11-06 / v2beta1

      # Install/Uninstall issues addressed, bugs that found themselves in during refactoring and performance improvement are also squashed. From this point and on I would recommend users to go with this release than 1.2 which of course will be maintained, but only until 2.0 is released.

      2010-11-06 / v2.0beta

      + both admin and front end can now be optimized

      + clearing merged/aggregated css/js files manually from the plugin setting area

      + auto clearing if templates has changed since last merging/aggregating, this is necessary when changing templates manually or if you use any of the available template changing plugins that work on time basis or any other criteria

      # when aggregating css files proper media type is assigned (based on the media type of the original file)

      ^ substantial performance improvements of the aggregating process

      ! lock down feature is now removed as it only created confusion

      ! mootools specific cdn setting is removed as its applicable only to 1.1* versions and 1.2+ versions are rather complicated in case of Joomla! as we use the MooTools more packages which can hardly be covered consistently anywhere to fit Joomla!s specific needs unless the whole more is included

      ^ various refactoring has taken place and also the component logic is moved to the backend

      Don't hesitate to contact me with ideas and feedback on this upcoming release in particular - I am actively working on it.

      2010-11-01 / v1.2.1

      + Default file fetching mechanism is now CURL and earlier custom implementation is used as fall back option and only if CURL is not available.

      2010-10-21 / v1.2

      We will simply jump to 1.2 as there has been various non-released versions in between commissioned by customers, which now is all accumulated in this version.

      + Complete refactoring of code and elimination of global namespace cluttering

      + All files are loaded now the "Joomla! way" instead of loading from folders directly, with the benefit

      + Mootools Google CDN replacement for both 1.1 and 1.2.

      + CDN replacements for any resource is also provided.

      + Optional absolute file inclusion fields (both for js and css). This provides ability to include a resource regardless if its included in the page or not.

      # Compression of resources without merging file. Although this has been included from start there was a bug that blocked this feature since intial release.

      2010-07-24 / v1.0i

      # infinitly recursive css file inclusions avoided

      # slight performance improvement due to elimination of unnecessary or rather repeated calls

      2010-06-28 / v1.0h

      # invalidating existing cache files on the basis of change in constituent files failed due to fetching of file data was incorrect which is now fixed

      2010-06-26 / v1.0g

      ^ removed dependency of external library for the fetching of "remote" files while merging and implemented a "native" version

      + an experimental and very simple CDN version replacement of standard JS libraries is added, although its obviously not as straight forward as we want it to be (please report back any ideas or issues you might have, thanks!)

      ^ users with browsers not able to process gzip encoded files (yes, there are such clients) and servers without gzdecode can be happy that a gzdecode replacement is now implemented directly in jbetolo

      2010-06-26 / v1.0f

      + due to disabled remote file access using file_get_contents (allow_url_fopen=Off) is not able to deliver resource files to be merged and compressed. We now employ several fallback mechanisms that covers any thinkable cases, and where we check availability and permission of use of each of these properly.

      2010-04-15 / v1.0e # css file parsing error when locating external resources

      2010-04-18 / v1.0d

      # compression of files was wrongly checking the client compression ability instead of compressing all served files and uncompress in those few cases where client is not able to process compressed, which is now implemented

      2010-04-15 / v1.0c

      ^ lock down mode per default is disabled

      # parsing error when looking for css files where capital letters of the directieve @import was missed

      + option to use on how to handle when by jbetolo generated files are deleted for any reason

      2010-02-18 / v1.0b

      Initial beta release


      Attribution
      • jbetolo started as an adaptation of the excellent CssJsCompress by joomlatags.org
      • JS minimization is done with jsminplus (Tino Zijdel < crisp@tweakers.net This e-mail address is being protected from spambots. You need JavaScript enabled to view it >)
      • CSS minimization is done with Compress CSS (Stephen Clay < steve@mrclay.org This e-mail address is being protected from spambots. You need JavaScript enabled to view it >)
      License

      Free GPL

      ...you are of course welcome to support the effort in whatever way you see fit


      betolo is a CSS/JS file merging, minimization and compression utility.

      Features:(Ref: developer.yahoo.com/performance/rules.html, webpagetest.org)

          * merging is done either by including all files in the page or by merging only those by you explicitly listed files. files not included in the merging can also benefit from being served through jbetolo by being compressed (many popular shared hosting services doesn't enable the apache gzip/deflate module thus this or similar setups are practically the only way to go about if you want to serve a compressed version of your external resources), minifed and sent with correct http headers
          * both merged and non-merged files are minified and compressed
          * control if merged or non-merged files should be compressed/minifed
          * files are sent with correct http headers, including the expires and cache-control max-age header as set by you
          * prevent a file from being sent to the client by deleting it from the page
          * load files in a certain order
          * exclude certain components from being processed
          * inject jquery.noconflict in the presence of jquery, achieving seemless presence of both mootools and jquery in the same page
          * move js to the bottom of the page (before end of body) or to the header
          * move inline js codes, either to the bottom of the page or to header, and encapsulating the codes in a domready event), a not well tested feature, and presumably depending highly on the extensions you employ and your willingness to hack those non-disciplined extensions

      Notes:

          * best optimization result is achieved only by having a certain level of familiarity with the various extensions you are employing and how they use/missuse various JS libraies available, most commonly mootools and jQuery. Having a mix of mootools, jQuery (sometimes several version of it) and maybe additional JS libraries is something that will inevitably heart performance, and not the least might give rise to various JS conflicts and errors.
          * a conflicting expiry/cache-control is not favorable to your efforts, so please assure that .htaccess settings doesn't conflict with your settings in jbetolo
          * gzip requires php's zlib compression
          * in order to have the resulting page cached pls. do order jbetolo right before the cache plugin
          * in case of performance issues please switch the minimization off, although this shouldn't be an issue on a site where external JS and CSS files are relatively static, as cases are mostly.

      Future enhancements:

         1. re-generate/serve only mode so that regardless file changes jbetolo keeps on serving last known good compilation
         2. Minifcation is slow, luckily need not to be done that often, any better solution? Tried yui's, Dojo's, JSMin and so far JSMin+ is best at it, albeit with little less packing, but their explanation (http://crisp.tweakblogs.net/blog/1665/a-new-javascript-minifier-jsmin+.html) of the case is fair, thus the included option in jbetolo.
         3. If this ever will be possible with the wild way of various extensions spotting out their JS code, try to better understand how JS codes can be moved to the bottom so that the already implemented ability to do so can be utilized and include some guidelines
         4. External files, ex. resources from various CDN:s, are currently left untouched. Need to investigate if there is any other desirable way of handling those?
         5. Current aggregation is monolithic, i.e. we always try to aggregate and send as much as we can in single files and rely on the browser caching mechanism, the question is if there is better way of doing the aggregation, ex. start with certain aggregation, get it cached, and send only incremental files. This obviously introduces a certain amount of complication and an overhead that we might not care to introduce as our goal is optimization. Anyway, I will, given time experiment and see where it takes...
         6. Have read that another extension creats image sprites and also related css file and ultimately replaces images in the page, sounds crazy to me how that can be automated with the kinda various manual considerations that I have faced doing sprites, but sounds exciting enough to investigate and see if it can be incorporated.
         7. Investigate and see if jbetolo can assist with shelving of to a cookie-less domain, http://developer.yahoo.com/performance/rules.html#cookie_free

      Attribution where its due:

          * jbetolo started as an adaptation of the excellent CssJsCompress by joomlatags.org
          * JS minimization is done with jsminplus (Tino Zijdel < This e-mail address is being protected from spambots. You need JavaScript enabled to view it >)
          * CSS minimization is done with Compress CSS (Stephen Clay < This e-mail address is being protected from spambots. You need JavaScript enabled to view it >)

      Comments and suggestions are most welcome to This e-mail address is being protected from spambots. You need JavaScript enabled to view it .

      betolo in amharic (official language in Ethiopia) means quickly, which I hope this utility will be able to serve your resouce files.