Рубрики
Без рубрики

Одиночные страницы App Backends: где Laravel Beats Node.js

Node.js имеет много преимуществ в качестве бэкэнда для спа. Это позволяет вам иметь один язык в вашем проекте и дает вам такие функции, как рендеринг на стороне сервера. Пользователи ли Laravel оставлены в пыли с полным стеком JavaScript?

Автор оригинала: 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 имеет несколько очень четких преимуществ в качестве спа-спа-салона:

  1. Один язык в проекте (JavaScript) означает просто для кода просто легче.
  2. Существует возможность поделиться кодом между приложениями Frontend и Backend или даже сделать ISOMORPHIC приложение.
  3. Node.js позволяет рендеринг на стороне сервера. Это означает, что вы можете сделать вашу страницу на сервере, прежде чем он попадет в браузер, позволяя пользователям видеть страницу быстрее. (Есть попытки достичь этого с расширениями PHP/JS, но в настоящее время они не работают со многими спа-каркасами, такими как Vue, и если они сделают, они намного медленнее).
  4. Узел имеет неблокирующий ввод/вывод и лучше при обращении сооперационные запросы (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} где {пользователь} это идентификатор пользователя, но вы можете не подобрали следующее:

  1. Аргумент функции $ Пользователь Тип подсказки Приложение \ Пользователь класс. Сервисный контейнер Larave (описанный ниже) будет разрешать это и ввести экземпляр этого класса в закрытии.
  2. Larave знает, что это модель данных с момента Пользователь класс расширяет Красноречивый Класс (красноречивый – это Орм Ларавела). Экземпляр пользователя, который вы получаете, будет один, где идентификатор соответствует соответствующему идентификатору от запроса URI I.E. {пользователь} Отказ
  3. Если в базе отсутствует экземпляр модельных моделей не найден в базе данных, будет автоматически генерироваться ответ 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 в нашем последнем курсе.

Учить больше