Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-6498

wicket 8 - js to asnyc and or defer

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 7.9.0, 8.0.0-M8
    • 8.0.0-M9
    • None
    • None

    Description

      I wonder if wicket cant even get better in the js part. Currently each page having ajax somehow ends up with following in the head:

      (1)<script type="text/javascript" src="./wicket/resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-2.2.4-ver-F9EE266EF993962AD59E804AD9DEBE66.js"></script>
      (2)<script type="text/javascript" src="./wicket/resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-event-jquery-ver-E34C6FE16C54FE3DF3591290A48A496A.js"></script>
      (3)<script type="text/javascript" src="./wicket/resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-ajax-jquery-ver-F8010FEDC5FD9B05434A6023763E3050.js"></script>

      (4 - inline var and not really an issue)<script type="text/javascript" id="wicket-ajax-base-url">

      /<![CDATA[/
      Wicket.Ajax.baseUrl="/pagepath";
      /]]>/
      </script>

      (5)<script type="text/javascript" >
      /<![CDATA[/
      Wicket.Event.add(window, "domready", function(event) {
      wicketDebugBarCheckState();
      Wicket.Ajax.ajax(

      {"u":"./effects?2-2.0-c1~link","c":"id6","e":"click","ch":"effects|d"}

      );;
      Wicket.Ajax.ajax(

      {"u":"./effects?2-2.0-c2~link","c":"id7","e":"click","ch":"effects|d","pd":true}

      );;
      jQuery.noConflict();;
      Wicket.Event.publish(Wicket.Event.Topic.AJAX_HANDLERS_BOUND);
      ;});
      /]]>/
      </script>

      While 1,2 and 3 could be easily made at least defer, script 5 makes this impossible so far, having all 4 scripts lead to a slower DOMContentLoaded (requestet and executed 1 by 1), even these are not needed at that time and could IMHO be easily postponed to a time when the rendering tree is ready (and so dont block it);

      The real culprint IMHO is (5) and that it immediately needs the Wicket.Event object - so, I see 2 solutions for this:

      1st: outline this code into a request specific js-src file that can be loaded like e.g.: <script defer src="/requesrt specific fake path">
      or
      2nd: have it embedded into an
      window.addEventListener('DOMContentLoaded', function() {
      (function($) {
      $(document).ready(function()

      { // add the content here.... }

      );
      })(jQuery);
      });

      of even slim it down to:

      window.addEventListener('DOMContentLoaded', function() {
      (function($)

      { // add the content here.... }

      );
      });

      While 1 has the need to get 1 more request (even thats async thanks to defer), 2 seems to be clear of this and I cant think of any problem with that;

      What do you think?

      Attachments

        1. myproject.zip
          40 kB
          Andrea Del Bene
        2. WICKET-6498-defer-support-2.patch
          6 kB
          Sven Meier
        3. WICKET-6498-defer-support.patch
          5 kB
          Sven Meier

        Issue Links

          Activity

            People

              svenmeier Sven Meier
              kbachl Korbinian Bachl
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: