Enqueue in the footer unless it must block

The fifth argument to wp_enqueue_script() decides whether the tag goes in the head, where it blocks parsing, or before </body>, where it does not. The default is the head.

wp_enqueue_script( 'shop-app', $url, array( 'jquery' ), '2.1.0', true );
//                                                                    ^ footer

Almost everything belongs in the footer; the exceptions are a script that must run before first paint, such as a theme switcher avoiding a flash, and a polyfill something else depends on. Dependencies are resolved across both positions, so a footer script depending on a head script works — but a head script depending on a footer one is silently reordered into the head, which defeats the point.