Добавление 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';
}
});