Javascript включает в себя не загружается для последующей на странице

У нас есть приложение Rails, где мы включаем наши зависимости приложений в заголовок html вapplication.js:

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

Затем на отдельных страницах у нас есть тег сценария внизу страницы дляanalytics:

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

Это нормально работает нормально, но очень редко мы видим ошибкуanalytics is not definedпоследний раз на Chrome 43. Поскольку все должно загружаться синхронно, похоже, что оно должно работать «из коробки», но я изменил скрипт на:

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

И теперь вместо этого время от времени мы видим,$ is not defined вместо. Мы не видим других ошибок с того же IP, иначе я бы заподозрил, что что-то пошло не такapplication.js, Любые другие идеи, почему это может сломаться? Вы можете увидеть пример страницыВот.

Полныйapplication.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'
  }
});

Обновить:

Мы все еще иногда видим это на производстве. Мы также видели это в случае, когда мы загружаем скрипт передapplication.js а затем сослаться на это внутри:

javascript_include_tag 'mathjs'
javascript_include_tag 'application'

Время от времени мы видимmath is not defined ошибка. Мне интересно, если ошибка происходит во время загрузкиmathjs или другие сценарии, препятствующие его загрузке, но тот факт, что это происходит в очень многих разных библиотеках, и так редко, делает его менее вероятным. Мы сделали некоторые проверки отладки, чтобы увидеть,application.js полностью загружен, и часто кажется, что нет, даже если получить доступ к чему-то вроде Jquery позже на странице.

Одной из причин этого было избежать старых уведомлений браузера о слишком длинных скриптах, но мы можем просто сдаться и потянуть всеapplication.js чтобы избежать ошибок.

Ответы на вопрос(7)

Ваш ответ на вопрос