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
> Freeipa-devel@redhat.com
> 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.


Ana Krivokapic
Associate Software Engineer
FreeIPA team
Red Hat Inc.

Freeipa-devel mailing list

Reply via email to