предисловие: В Интернете есть много статей, знакомящих с реализацией front-end маршрутизации, а также статей о принципах маршрутизации. Но в ходе недавнего интервью я обнаружил, что все опрошенные могут объяснить техническую реализацию маршрутизации, но не понимают применимых сценариев каждой технической реализации. Например
hash
Маршрутизация, ответ многих людейhash
Маршрут будет иметь#
Номер не красивый, поэтому я использовал егоhistory
маршрутизация. Даже когда я выходил на собеседование, некоторые интервьюеры так думали (Т_Т). Любое техническое решение создается для решения каких-то конкретных задач.hash
а такжеhistory
не исключено.
В настоящее время решения для внешней маршрутизации в основном включают следующее:
-
hash
: Это может быть шаблон, понятный большинству людей, в основном основанный на принципе опорных точек. Простой в использовании -
browser
: готов использоватьhtml5
стандартныйhistory api
слушаяpopstate
событие пришло правильноdom
работать. Каждое изменение маршрута вызывает перенаправление -
memory
: эта реализация поддерживает стек в памяти для управления историей доступа, что является более сложным. Он больше используется на мобильных терминалах по утрам. Это трудно реализовать, и есть много проблем. Сейчас редко используется.RN
Использование этого шаблона маршрутизации -
static
: В основном используетсяssr
. Требуется серверная часть для управления маршрутизацией
Проблемы, решаемые интерфейсной маршрутизацией
- Отображение разных страниц в соответствии с изменениями маршрутизации для полного переключения страниц
- пройти через
query
передать параметры
Сравнение различных схем реализации интерфейсной маршрутизации
плюсы и минусы хеш-маршрутизации
-
преимущество
- Простая реализация и хорошая совместимость (совместима для
ie8
) - Большинство интерфейсных фреймворков предоставляют
hash
реализация маршрутизации - Не требуется установка и разработка на стороне сервера
- Помимо загрузки ресурсов и
ajax
кроме запроса, никаких других запросов не будет.
- Простая реализация и хорошая совместимость (совместима для
-
недостаток
- Для некоторых операций, требующих перенаправления, серверная часть не может получить
hash
Часть контента, полученного на фоне, не может быть полученаurl
Типичный пример — данные в публичном аккаунте WeChat.oauth
проверять - Сторона сервера не может точно отслеживать информацию о маршрутизации внешнего интерфейса.
- Требование к функции привязки будет противоречить текущему механизму маршрутизации.
- Для некоторых операций, требующих перенаправления, серверная часть не может получить
плюсы и минусы браузерной маршрутизации
-
преимущество
- Для процесса перенаправления не теряется
url
параметры в . Бэкенд может получить эту часть данных - Большинство интерфейсных фреймворков предоставляют
browser
реализация маршрутизации - Серверная часть может точно отслеживать информацию о маршрутизации
- можно использовать
history.state
чтобы получить текущийurl
Соответствующая информация о состоянии
- Для процесса перенаправления не теряется
-
недостаток
- Совместимость не так хороша
hash
маршрутизация (совместима только сIE10
) - Требуется внутренняя поддержка, возвращается каждый раз
html
Документация
- Совместимость не так хороша
плюсы и минусы маршрутизации памяти
-
преимущество
- Проблем с совместимостью нет, маршруты хранятся в памяти
- Не требуется поддержка на стороне сервера
-
недостаток
- В настоящее время несколько интерфейсных модулей маршрутизации обеспечивают
memory
Реализация маршрута (react-router
при условииmemory
выполнить) - Самостоятельно реализовать сложно, да и нагрузка очень большая
- Управление маршрутизацией для прямых и обратных операций очень громоздко, особенно
android
оборудованиеbackbutton
- В настоящее время несколько интерфейсных модулей маршрутизации обеспечивают
static
Маршрутизация Преимущества и недостатки (этот метод маршрутизации в основном используется дляssr
. Не сравнивай. )
Как выбрать подходящее решение для внешней маршрутизации? Следующие предложения приведены для справки:
Применимые сценарии хэш-режима:
- Совместимость с IE8
- Не требуется перенаправление (сторонняя аутентификация)
oauth
) - Нет необходимости в прыжке с якоря
- Backenc не нужно отслеживать информацию о маршрутизации Frontend
-
hybrid app
Ресурсы должны быть упакованы во внешние приложения внутри, потому чтоhtml
домен вfile://
, поэтому перенаправление не может произойти
Применимые сценарии режима истории:
- Требования к анкорам на странице
- Необходимо перенаправить параметры
- Изоморфный прямо
- Информация о маршруте
- Дополнительная информация о маршрутизации (
history.state
), чтобы получить статус маршрутизации
Применимые сценарии режима памяти:
- Совместимость ниже ie8
- React Native