Добавление Bluebird в приложение Aurelia приводит к появлению ошибок

Сегодня я попробовал свое приложение Aurelia в IE Edge, и загрузка главной страницы заняла около 20 секунд. Переключение страниц также занимает неоправданно много времени, поэтому я оценил быстродействие Google aurelia и обнаружил, что добавление библиотеки Bluebird JS помогает повысить производительность во всех браузерах. Я не смог найти пример того, как именно добавить эту библиотеку, кроме инструкции добавить ее непосредственно перед system.js,

Так что теперь вместо этого:

<script src="/jspm_packages/system.js"></script>
<script src="/config.js"></script>
<script>
    System.import('aurelia-bootstrapper');
</script>

У меня есть это:

<script src="//cdn.jsdelivr.net/bluebird/3.4.1/bluebird.min.js"></script>
<script src="/jspm_packages/system.js"></script>
<script src="/config.js"></script>
<script>
    System.import('aurelia-bootstrapper');
</script>

Все приложение работает так же, как и раньше, я пробовал в основном каждое представление и его функциональность, за исключением одной вещи;

При каждом успешном прохождении маршрута я добавляю идентификатор в <html> элемент (для стилизации), соответствующий текущему маршруту. Так что на главной странице у меня будет <html id="home-page"> и на странице входа <html id="login-page">,

Это сделано в app.js (корневой элемент) в его attached() метод вроде так:

this.eventAggregator.subscribe('router:navigation:success', event => {
    if (event.instruction && event.instruction.router && event.instruction.router.currentInstruction && event.instruction.router.currentInstruction.config) {
        document.documentElement.id = event.instruction.router.currentInstruction.config.name + '-page';
    }
});

По какой-то причине при первой загрузке страницы и только при первой загрузке это событие никогда не срабатывает. Переход по другому маршруту работает нормально, а возврат к маршруту, по которому событие никогда не запускалось, работает нормально. Только при загрузке первой страницы он не срабатывает.

Если я удалю синюю птицу, она снова начнет работать.

Кто-нибудь знает, что может быть причиной этого? Как я уже сказал, единственное изменение, которое я сделал, это добавление синей птицы script элемент к index.html, Я не сделал никаких изменений в самом коде приложения.

1 ответ

Решение

Таким образом, я решил, что теперь я проверяю текущую страницу при загрузке, а также в router:navigation:success событие. Немного раздражает, что эта вещь перестает работать с Bluebird, но в то же время сайт теперь можно использовать в IEdge, так что...

// Give <html> an ID representing the current page
if (this.router.currentInstruction) {
    document.documentElement.id = this.router.currentInstruction.config.name + '-page';
}

// Listen to route navigation changes and change the ID
this.navigationSubscription = this.eventAggregator.subscribe('router:navigation:success', event => {
    if (event.instruction && event.instruction.router && event.instruction.router.currentInstruction && event.instruction.router.currentInstruction.config) {
        document.documentElement.id = event.instruction.router.currentInstruction.config.name + '-page';
    }
});
Другие вопросы по тегам