Автор оригинала: Anthony Gore.
Я был введен в эксплуатацию написать книгу о создании полных App Vue.js. Поскольку многие разработчики Larave заинтересованы в Vue (Vue теперь отправляются с Ларавос), издатель хочет, чтобы книга сосредоточиться на полном стеке Vue.js с laravel Отказ
При подготовке к книге я знал, что должен ответить на очень важный вопрос для себя: Почему кто-то даже хочет использовать Laravel в качестве Backend для приложения для одного страницы, когда они могут использовать Node.js?
Примечание: эта статья была первоначально опубликована здесь на блоге разработчиков Vue.js на 2017/06/05.
Node.js Преимущества
Как и многие веб-разработки, которые научились кодировать за последнее десятилетие, я начал с PHP. Но, поскольку я заинтересовался разработкой Frontend и SPAS (приложения для одиночных страниц), я в конечном итоге сделал переключатель в полный стек JavaScript, и я действительно не оглянулся назад.
Node.js имеет несколько очень четких преимуществ в качестве спа-спа-салона:
- Один язык в проекте (JavaScript) означает просто для кода просто легче.
- Существует возможность поделиться кодом между приложениями Frontend и Backend или даже сделать ISOMORPHIC приложение.
- Node.js позволяет рендеринг на стороне сервера. Это означает, что вы можете сделать вашу страницу на сервере, прежде чем он попадет в браузер, позволяя пользователям видеть страницу быстрее. (Есть попытки достичь этого с расширениями PHP/JS, но в настоящее время они не работают со многими спа-каркасами, такими как Vue, и если они сделают, они намного медленнее).
- Узел имеет неблокирующий ввод/вывод и лучше при обращении сооперационные запросы (PHP теперь может сделать это тоже, но снова, медленнее).
Застрял с php.
Учитывая все вышеперечисленное, мое предположение о том, почему вы будете использовать PHP для спа-салона, потому что вы должны быть застрял с этим И Ласкас выбран потому, что это просто лучшее из плохой ситуации.
Вы можете застрять с PHP, если:
- Основная компетенция вас и ваша команда – PHP, и вы не чувствуете себя комфортно, идут Full JS.
- У вас есть устаревшая база кода или инфраструктура, основанная на PHP, и вы не можете легко изменить его.
- Ваш клиент настаивает на PHP по какой-то причине, что они не будут сдвинуться («деньги», например …)
Все это на самом деле довольно хорошие причины использовать PHP, хотя и не очень вдохновляющие. И Это то, что не имело смысла …
Как так много DEV страстно выбирают Ламарду, когда их стек всегда будет уступать одному с Node.js? Они просто невежественны или слишком упрямые, чтобы признать славу полного стека JavaScript?
Возвращаясь к PHP и в первый раз, работая с Ларавосмашенным в течение нескольких лет, теперь я могу видеть, что в истории больше, чем я понял.
Почему Laravel отлично подходит для спа-салона
Большинство разработчиков упомянут производительность и функции при обсуждении преимуществ структуры, но когда достаточно выполнены производительность и особенности, простота развития и технического обслуживания будут наиболее важными.
У Мантры есть мантра «создавая разработчики счастливыми», и, по тем самую причину, по которой пользователи настолько увлечены о Laravel, – потому что это действительно доставляет на это. Поездка в Laravel после нескольких лет с Node.js/Express, я был довольно впечатлен тем, как просто и элегантно.
Пример: синтаксис
Синтаксис Laravel является выразительным и легко для понимания людей. Даже если вы никогда не видели код Laravel раньше, вы, вероятно, можете сказать, что делает следующее:
email; });
Но как только вы сломаете то, что это на самом деле Делать, есть еще больший уровень красоты. Возможно, вы уже подняли, что это маршрут, который захватывает входящие запросы к путям, соответствующим API/пользователи/{user}
где {пользователь}
это идентификатор пользователя, но вы можете не подобрали следующее:
- Аргумент функции
$ Пользователь
Тип подсказкиПриложение \ Пользователь
класс. Сервисный контейнер Larave (описанный ниже) будет разрешать это и ввести экземпляр этого класса в закрытии. - Larave знает, что это модель данных с момента
Пользователь
класс расширяетКрасноречивый
Класс (красноречивый – это Орм Ларавела). Экземпляр пользователя, который вы получаете, будет один, где идентификатор соответствует соответствующему идентификатору от запроса URI I.E.{пользователь}
Отказ - Если в базе отсутствует экземпляр модельных моделей не найден в базе данных, будет автоматически генерироваться ответ HTTP 404.
Это довольно чертовски элегантно.
Объектно-ориентированные рамки являются мощными
JavaScript теперь имеет «классы», но это не естественно ориентировано на объектно-ориентированное (OO) язык. Хотя PHP – это, хотя, и Laravel обеспечивает тяжелое использование конструктивных узоров OO для мощного эффекта.
Давайте посмотрим на один пример, что я думаю, что вы будете впечатлены: Laravel’s Сервисный контейнер Отказ Это реализация объектно-ориентированного концепции дизайна, известная как «инверсия контроля», которая делает впрыск в зависимости от ветер.
Допустим, вы создаете приложение, которое позволяет пользователям обрезать свои изображения. Изображения будут храниться в ведре Amazon S3, и у вас будет много транзакций с этим ведром на протяжении всего приложения. Вы делаете хелперский класс под названием Ведро
что, когда призвано, можно использовать следующим образом:
$bucket->addFile($someFile);
Класс, который вы создаете, будет выглядеть так:
key = $key; } protected function authorize() {...} public function addFile($file) {...} public function deleteFile($file) {...} }
Обратите внимание, что конструктор требует прошедшего ключа API, поскольку вы, очевидно, не хотите жестким кодом, так что вы создаете свой класс в верхней части каждого файла:
addFile($someFile);
Проблема в том, что этот же код нужно будет повторяться в каждый файл , не только добавляя повторение, но и потенциал для ошибок.
Контейнер обслуживания позволяет сделать это настроить один раз, затем вводить его где угодно. Вот установка:
app->bind('App\Helpers\Bucket', function ($app) { $key = config('amazon.api_key'); return new App\Helpers\Bucket($key); });
Сейчас приложение
Помощник может ввести свежую, предварительно настроен Ведро
Объект где угодно:
addFile($someFile);
Самая крутая вещь, что вам не нужно использовать приложение
Помощник в функциях, как вы можете ввести намек в профиль, и Laravel автоматически разрешит его из контейнера обслуживания:
addFile($someFile); }
TL; доктор
Если вы хотите сделать приложение в режиме реального времени с тонкой одновременных пользователей, или если рендеринг на стороне сервера имеет решающее значение, то, конечно, Node.js является четким выбором. Но для более широкого вопроса о том, мог ли Laravel бороться с узел в качестве спа-спа, я определенно скажу да, как Laravel:
- Это простая и элегантная рамка, которая делает разработку и обслуживание ветером.
- Использует мощные объектно-ориентированные функции дизайна, чтобы помочь архитектору хорошо структурированной бэкэнд.
Если вы посмотрите на последние несколько выпусков Laravel (E.G 5.3, добавляя Vue в качестве Framework js, и 5.4 Добавление Maravel Mix в качестве API WebPack) Понятно, что создатели намерены для Laravel, чтобы оставаться актуальным в мире SPA.
Если вы заинтересованы в слушании, когда моя книга Vue.js Полное развитие стека будет сделано, прыгать на мою рассылку Как у меня будет больше информации об этом в ближайшее время!
Эпилог: сервер рендеринга альтернатив
Это немного пониженного на Laravel (и, чтобы быть справедливым, все остальные не-JS Frameworks), что Server-Side Renseing SPAS часто не является вариантом. Например, Vue.js поддерживает только SSR с Node.js Отказ
Однако одна альтернатива SSR, которая часто подходит Предварительный рендеринг Отказ При таком подходе вы запустите свое приложение перед его развертыванием, захватите вывод страницы и замените файлы HTML с помощью этого захваченного выхода. Это почти такая же концепция, как SSR, за исключением того, что это сделано Предварительное развертывание В вашей среде разработки не живой сервер Отказ Он имеет определенные предостережения, но может быть достаточным решением для вашего спа.
Я писал больше о предварительно рендеринге с Laravel в Предыдущая статья Отказ
Другой вариант состоит в том, чтобы запустить сервер узла параллельно на вашем сервере Laravel и позволить узлу обрабатывать SSR.
Стать старшим Vue Developer в 2020 году.
Учитесь и осваивайте, какие профессионалы знают о строительстве, тестировании и развертывании, полностью стековых Vue Apps в нашем последнем курсе.
Учить больше