Sorry to hijack this thread, because I fully agree with Wes that this is
good stuff to put into a wiki.
It's a little trickier with the apache wiki because you need to sign and
send over the CLA ( not terribly hard, but sometimes may not be possible. )

Any thought given to using a secondary wiki ( like Wetpaint or one of the
other myriad of services that come up when you type in wiki into the
mashable search box ) to ease the burden?


Wes Wannemacher wrote:
> 
> Jeromy,
> 
> I didn't verify that this works (because I am pretty sure it probably
> would), but have you thought about putting it in the community wiki?
> This topic comes up quite often and it would be helpful to many
> people.
> 
> -Wes
> 
> On 10/6/07, Jeromy Evans <[EMAIL PROTECTED]> wrote:
>> I thought I'd share the instructions I prepared for creating a dojo
>> 0.4.2 custom profile for Struts 2.0.9.  The objective is to bundle all
>> the required dojo resources into dojo.js to avoid the numerous slow
>> sequential requests for resources. This makes a massive performance
>> improvement to the default ajax theme.
>>
>> Instructions for improving the performance of dojo 0.4.2 in Struts 2.0.9:
>>
>> $resources$ is assumed to be your web resources directory
>>
>> 1. First, configure struts to serve the static files directly from
>> $resources$/struts instead of from within struts-core-2.0.9.jar:
>>
>>     a. extract struts2-core-2.0.9.jar/org/apache/struts2/static/* to
>> $resources$/struts/
>>     b. edit struts.properties and set struts.serve.static=false
>>     c. also extract the javascript and css files from
>> struts2-core-2.0.9.jar/templates/* to $resources$/struts/ as this will
>> be helpful later
>>           eg. $resources$/struts/ajax/dojoRequire.js
>>
>> Confirm that your application still works before proceeding. It's
>> essential that resources are loaded from the directory rather than the
>> jar.
>>
>> 2. Download the source of dojo 0.4.2.  You won't need to modify it.  The
>> download location doesn't matter.  We assume it's in release-0.4.2/
>>
>>    > svn export http://svn.dojotoolkit.org/dojo/tags/release-0.4.2
>>
>> This is almost identical to the version bundled with struts2.0.9.
>>
>> 3. Use an editor to create a dojo custom profile as the file
>> release-0.4.2/buildscripts/profiles/struts2.profile.js.  This file
>> defines which dojo resources you use directly.  Essentially it specifies
>> which code will be included in dojo.js.  An example that includes almost
>> everything is provided at the end of this email.
>>
>> 4. Copy the struts widgets into the dojo directory so they can be
>> included within dojo.js.  That is, copy $resources$/struts/dojo/struts/*
>> to release-0.4.2/struts.
>> This is the directory that contains the widget and widgets
>> subdirectories, css and some images.
>>
>> 5. Build dojo using ant.  This will create a new dojo.js file:
>>
>>  > cd release-0.4.2/buildscripts
>>  > ant -Dprofile=struts2 -Dstrip_and_compress=true clean release
>> intern-strings strip-resource-comments
>>
>> (You may be asked to run it twice).
>>
>> Pay some attention to the build process.  In particular, note whether it
>> finds the struts widgets and 'internalises' the related resources. If
>> not, see Step 4.  You'll probably notice a lot of things are included
>> that you don't need.  That will be helpful later for optimizations.
>> Some errors will occur while stripping the comments but these are ok.
>>
>> 6. When the build process completes the release directory will contain
>> all the files you need.  The content of the release directory can be
>> copied over the top of $resources$/struts/dojo.  You'll notice it's
>> almost exactly the same as the original, although dojo.js is probably
>> larger.
>>
>> It's okay to delete the demo, test and release subfolders before copying
>> to your application.  The src subfolder must be distributed with your
>> application as it contains images used by dojo.
>>
>> 7. Clear your browser cache and test your application again.  You should
>> note the larger dojo.js file being loaded and significantly fewer
>> requests for resources by dojo   Hopefully it's also a lot faster.
>>
>> That's it.  Now you can go back and optimize the profile by removing
>> resources you don't need.  There's examples in the profiles directory.
>> Repeat the build/test process to find the right balance.
>> I also recommend editing $resources$/struts/ajax/dojoRequire.js to
>> remove the reference to the Editor2 if you don't use this as it's a
>> very,very heavy-weight resource.
>>
>> Hope that helps someone else.  Improvements & comments welcome.  See
>> reference [3] below for detailed instructions and rationale.
>>
>> regards,
>>  Jeromy Evans
>>
>> Resources
>> [1] http://struts.apache.org/2.x/docs/performance-tuning.html
>> [2]
>> http://www.nabble.com/-s2--Struts-head-tag-KILLS-%28%3E-10s%29-page-load-time-tf4490390.html#a13047981
>> [3]
>> http://www.dojotoolkit.org/book/dojo-book-0-4/part-6-customizing-dojo-builds-better-performance
>>
>> The following profile includes almost everything in dojo.js.  It assumes
>> the struts widgets have been copied into the directory as mentioned at
>> step 4.
>> struts2.profile.js:
>>
>> var dependencies = [
>>    "dojo.lang.*",
>>     "dojo.html.*",
>>    "dojo.debug",
>>     "dojo.html.display",
>>     "dojo.html.layout",
>>     "dojo.html.util",
>>     "dojo.lfx.*",
>>     "dojo.event.*",
>>     "dojo.logging.*",
>>     "dojo.io.*",
>>     "dojo.io.IframeIO",
>>     "dojo.date",
>>     "dojo.string.*",
>>     "dojo.regex",
>>     "dojo.rpc.*",
>>     "dojo.xml.*",
>>     // "dojo.flash.*",
>>     // "dojo.storage.*",
>>     "dojo.undo.*",
>>     "dojo.crypto.*",
>>     //"dojo.collections.*",
>>     "dojo.collections.ArrayList",
>>     "dojo.collections.Collections",
>>     "dojo.collections.Queue",
>>     "dojo.collections.Stack",
>>     "dojo.dnd.*",
>>     "dojo.widget.*",
>>    "dojo.widget.TabContainer",
>>    "dojo.widget.PageContainer",
>>    "dojo.widget.LinkPane",
>>    //"dojo.widget.Editor2",
>>    //"dojo.widget.RichText",
>>    //"dojo.widget.Editor2Toolbar",
>>    //"dojo.widget.ColorPalette",
>>     "dojo.math.*",
>>     //"dojo.reflect.*",
>>     "dojo.uri.*",
>>    "struts.widget.Bind",
>>    "struts.widget.Bind",
>>    "struts.widget.BindDiv",
>>    "struts.widget.BindAnchor",
>>    "struts.widget.ComboBox",
>>    "struts.widget.StrutsTimePicker",
>>    "struts.widget.StrutsTimePicker"
>> ];
>>
>> dependencies.prefixes = [
>>    ["struts", "struts"]
>> ];
>>
>> load("getDependencyList.js");
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
> 
> 
> -- 
> Wesley Wannemacher
> President, Head Engineer/Consultant
> WanTii, Inc.
> http://www.wantii.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/How-to-improve-dojo-performance-in-Struts-2.0.9-tf4579700.html#a13124229
Sent from the Struts - User mailing list archive at Nabble.com.


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

Reply via email to