On 08/30/2013 05:21 PM, Petr Vobornik wrote: > Issue: > * There was no caching policy specified. > * -> Browsers use their own default policy. > * -> After upgrade, some Web UI files might have been actualized some not. > * -> With schema change may result into weird bugs in Web UI > > Solution considerations: > > 1. Detect server version change and hard-reload at runtime > Detection is easy. Problem is the reload. Obvious candidate > 'window.location.reload(true)' works in Firefox but not in Chrome because > expected behavior when parameter is used is not in standard and therefore > Chromium/WebKit authors did not implement it. > > 2. Application Cache > HTML 5 technology which lets web apps to run offline. Besides weird issues > with event handlers which I encountered, this would be an ideal candidate. > Simple change of manifest file would lead to reload of all files (requires > reload of page to used the new files). > > Showstopper was usage with untrusted certificate. If user did not add > exception for the cert or its CA and would visit the page for a second time, > all AJAX calls would fail. > > 3. Set Expires to now() for everything > Web UI rarely changes so this is an overkill. Setting it to different value is > not a solution either. We can't predict when the upgrade will happen and when > new Web UI will be needed. > > Solution: > * Implemented a mini loader which loads basic resources. Dojo loader takes > action after Dojo is loaded. > * The loader adds a version parameter (?v=__NUM_VERSION__) to all requests. > * Version is defined in the loader. It's set to current in `make > version-update`. > * All static pages use this loader to fetch their resources. > * Version is also passed to dojo loader as cache-bust for the same effect. > * Expire header was set to 'access time plus 1 year' for /ui folder. > Exceptions are HTML files and loader (set to immediate expiration). > > Possible issues: > * Images are cached but not requested with version param. > * Images with version and without are considered different > * -> We would have to attach version to all URIs - in CSS and in JS. But we > should avoid changing jQuery UI CSS. > * Proposed solution is to change image name when changing image. Image > change is done rarely. > * Version is set by build and therefore updated just on server update. It > might cause trouble with different update schedule of plugins. > * No action taken to address this issue yet. > * We might leave it on plugin devs (own .conf in /etc/httpd/conf.d/) > * or set expires to now for all plugins > * running `make version-update` is required in order to use static version of > UI for testing > > https://fedorahosted.org/freeipa/ticket/3798 > > > _______________________________________________ > Freeipa-devel mailing list > [email protected] > https://www.redhat.com/mailman/listinfo/freeipa-devel
I tested the patch and it seems to work fine. Code-wise it looks good as well. Nitpick: There is an unused function 'updated()' in the new loader.js.in file. -- Regards, Ana Krivokapic Associate Software Engineer FreeIPA team Red Hat Inc.
_______________________________________________ Freeipa-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/freeipa-devel
