Javascript inclui não carregar para mais tarde na página

Temos um aplicativo Rails em que incluímos nossas dependências de aplicativos no cabeçalho html dentroapplication.js:

//= require jquery
//= require analytics
// other stuff...

Em páginas individuais, temos uma tag de script na parte inferior da página paraanalytics:

<script>
  analytics.track('on that awesome page');
</script>

Isso normalmente funciona bem, mas muito ocasionalmente vemos o erroanalytics is not defined, mais recentemente no Chrome 43. Como tudo deve ser carregado de forma síncrona, parece que deve funcionar imediatamente, mas mudei o script para:

<script>
  $(document).ready(function () {
    analytics.track('on that awesome page');
  });
</script>

E agora, de vez em quando, vemos$ is not defined em vez de. Não vemos outros erros do mesmo IP, caso contrário, eu suspeitaria que algo deu erradoapplication.js. Alguma outra idéia de por que isso pode quebrar? Você pode ver uma página de exemploaqui.

O cheioapplication.js:

// Polyfills
//= require es5-shim/es5-shim
//= require es5-shim/es5-sham
//= require polyfills
//
// Third party plugins
//= require isMobile/isMobile
//= require jquery
//
//= require jquery.ui.autocomplete
//= require jquery.ui.dialog
//= require jquery.ui.draggable
//= require jquery.ui.droppable
//= require jquery.ui.effect-fade
//= require jquery.ui.effect-slide
//= require jquery.ui.resizable
//= require jquery.ui.tooltip
//
//= require jquery_ujs
//= require underscore
//= require backbone
//= require backbone-sortable-collection
//= require bootstrap
//= require load-image
//= require react
//= require react_ujs
//= require classnames
//= require routie
//= require mathjs
//= require moment
//= require stink-bomb
//= require analytics
//
// Our code
//= require_self
//= require extensions
//= require extend
//= require models
//= require collections
//= require constants
//= require templates
//= require mixins
//= require helpers
//= require singletons
//= require actions
//
//= require object
//= require components
//= require form_filler
//= require campaigns
//= require form_requests
//= require group_wizard
//= require step_adder

Chalk = {};
underscore = _;

_.templateSettings = {
  evaluate:    /\{\{(.+?)\}\}/g,
  interpolate: /\{\{=(.+?)\}\}/g,
  escape:      /\{\{-(.+?)\}\}/g
};

moment.locale('en', {
  calendar: {
    lastDay: '[Yesterday at] LT',
    sameDay: '[Today at] LT',
    nextDay: '[Tomorrow at] LT',
    lastWeek: 'dddd [at] LT',
    nextWeek: '[Next] dddd [at] LT',
    sameElse: 'L LT'
  }
});

Atualizar:

Ainda estamos vendo isso na produção ocasionalmente. Também vimos isso em um caso em que carregamos um script antesapplication.js e referencie-o em:

javascript_include_tag 'mathjs'
javascript_include_tag 'application'

De vez em quando vemos ummath is not defined erro. Gostaria de saber se ocorre um erro durante o carregamento domathjs ou outros scripts que impeçam o carregamento, mas o fato de acontecer em tantas bibliotecas diferentes e com pouca frequência faz com que pareça menos provável. Colocamos algumas verificações de depuração para ver se nossoapplication.js está totalmente carregado e, muitas vezes, parece não estar, mesmo que você acesse algo como o Jquery posteriormente na página.

Uma motivação para isso era evitar notificações antigas do navegador sobre scripts que executavam muito tempo, mas podemos simplesmente desistir e colocar tudo isso em prática.application.js para evitar os erros.

questionAnswers(7)

yourAnswerToTheQuestion