Page.js — это компактная библиотека для клиентского роутинга в JavaScript, ориентированная на работу с одностраничными приложениями (SPA). Основное отличие от более крупных фреймворков, таких как React Router или Vue Router, заключается в минимализме, прямом управлении историей браузера и простоте интеграции с любым JavaScript-кодом без необходимости привязки к конкретной экосистеме.
Лёгкость и размер Page.js занимает всего несколько килобайт, что существенно сокращает время загрузки страницы по сравнению с крупными роутерами. Например, React Router с зависимостями весит в десятки раз больше. Это делает Page.js привлекательным для проектов, где критичны скорость и производительность.
Прямое управление историей браузера Page.js работает
напрямую с History API (pushState,
replaceState) и hash-фрагментами. Такой подход обеспечивает
гибкость и полный контроль над навигацией, тогда как некоторые роутеры
высокого уровня скрывают эти механизмы, ограничивая возможности тонкой
настройки.
Синтаксис маршрутов Page.js использует простой и лаконичный синтаксис для определения маршрутов:
page('/home', () => {
console.log('Главная страница');
});
page('/user/:id', ctx => {
console.log('Пользователь с ID:', ctx.params.id);
});
page();
Здесь видно:
:param.ctx, включающий параметры, путь,
query-параметры и состояние.middleware) для обработки запроса до перехода к
обработчику маршрута.В отличие от Angular Router или Vue Router, где маршруты определяются через сложные объекты конфигурации с компонентами, guards и nested routes, Page.js минималистичен и не навязывает структуру приложения.
Middleware и последовательная обработка Page.js позволяет создавать цепочку промежуточных функций:
function auth(ctx, next) {
if (!ctx.user) {
page.redirect('/login');
} else {
next();
}
}
page('/dashboard', auth, ctx => {
console.log('Панель управления');
});
Подобная концепция схожа с Express.js на сервере, что упрощает
понимание для разработчиков, знакомых с Node.js. В отличие от некоторых
других роутеров, где guards реализованы через абстрактные хуки
жизненного цикла компонентов, Page.js использует чистые функции с явным
вызовом next(), обеспечивая предсказуемое поведение.
Гибкость интеграции Page.js не зависит от конкретного фреймворка. Его можно использовать с чистым JavaScript, React, Vue или любой другой библиотекой. Для сравнения, React Router ориентирован только на React, а Vue Router — только на Vue. Это делает Page.js универсальным инструментом для проектов с различной архитектурой или постепенной миграцией на SPA.
Управление навигацией и редиректами Page.js предоставляет простой API для программной навигации:
page('/old-page', () => {
page.redirect('/new-page');
});
Такой подход отличается от React Router, где требуется использовать
компоненты <Navigate> или хуки
useNavigate. Page.js не требует JSX или оберток
компонентов, что делает редиректы и навигацию прозрачными и прямыми.
Поддержка SEO и fallback для серверного рендеринга Page.js ориентирован на клиентскую часть, поэтому интеграция с серверным рендерингом требует дополнительных настроек. В отличие от Next.js или Nuxt.js, где роутинг глубоко интегрирован с SSR и генерацией статических страниц, Page.js остается инструментом для SPA, что упрощает, но ограничивает возможности для SEO из коробки.
Заключение по сравнению Основные преимущества Page.js перед другими роутерами:
Главные ограничения:
Page.js идеально подходит для небольших и средних SPA, где критична скорость и контроль, а крупные роутеры более удобны для крупных фреймворк-приложений с компонентной архитектурой и сложной логикой маршрутов.