2016-02-16 2 views
10

У меня есть приложение, в котором есть основной веб-сайт, api и область администратора. Я хотел знать, что это плохая идея иметь все в одном приложении, или мне нужно создать другой проект Symfony2, или я должен разделить их на разные ядра?Symfony2 несколько ядер?

Я не уверен, что добавление большого количества пакетов на одном и том же ядре сильно повлияет на производительность или просто немного, что не имеет значения?

Ниже приведены варианты:

  1. держать все на одном ядре, оно не имеют большое значение
  2. есть несколько ядра для другой части приложения (API, администратора и основного сайта)
  3. создавать различные Symfony2 проект для области администрирования и api.
  4. или ваши мудрые слова :)
+1

вы можете попробовать создать Environnement для выполнения этой последующей Dev Exemple для выполнения этого 'если (in_array ($ this-> getEnvironment(), array ('dev', 'test'))) {'in appKernel – pietro

+0

Что вы думаете о моем предыдущем комментарии? – pietro

+0

Ваш забыли один из вариантов: разделить код в нескольких пакетах, он уже обсуждался здесь: [Должно ли все действительно быть пакетом в Symfony 2.x?] (Http://stackoverflow.com/q/9999433/2257664) или [Symfony2 концептуальная проблема: общие связки против конкретных) (http://stackoverflow.com/q/8012191/2257664). –

ответ

2

Вы можете определить более «окружения».

Например:

В AppKernel.php

public function registerBundles() 
    { 
     $bundles = array(
      new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
      new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
      new Symfony\Bundle\TwigBundle\TwigBundle(), 
      new Symfony\Bundle\MonologBundle\MonologBundle(), 
      new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), 
      new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), 
      new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 
      //new AppBundle\AppBundle() 
     ); 

     if (in_array($this->getEnvironment(), array('api'), true)) { 
      $bundles[] = new ApiBundle\ApiBundle(); 
      //-- Other bundle 
     } 
     //-- Other environments 


     return $bundles; 
    } 
} 
+0

Я не думаю, что это правильно идиоматично. Пакет API может быть загружен как в среде ПРОДУКЦИЯ/РАЗВИТИЕ, так и в другом случае. Так, например, ENV - это режим приложений приложения Core App, Api. Кроме того, мы можем иметь среду STAGING, TESTING. – lexeme

0

Это личный выбор, но у меня есть подобный проект и у меня есть publicBundle, adminBundle и apiBundle все в том же проекте.

Дополнительный снимок производительности пренебрежимо мал, но организация является ключевым ... вот почему мы используем пакет MVC (Symfony), в первую очередь, не так ли? :)

NB: Вы терминология немного запутываетесь, я думаю по Kernel вы имеете в виду Bundle.

+0

Нет, по ядру я имею в виду ядро ​​... У меня есть все пакеты. Просто не уверен, что если у вас будет множество пакетов в производстве, это будет хороший выбор, потому что не все пакеты запущены на основном веб-сайте. – Basit

+0

Наличие нескольких пакетов (мы говорим только о парах здесь) действительно не влияет на производительность. Если все для одного домена, тот же брендинг, тот же URL-адрес, а затем использовать одно ядро. – Egg

+0

пара дополнительных пакетов, которые не требуются, почти близки к 10+ связям, так что действительно причудливые вещи и обработки событий .. как sonataAdminBundle – Basit

2

В основном это зависит от качества связок. И это связано с тем, насколько они связаны.

Я бы отказался от пункта 3 при запуске (create different Symfony2 project for admin area and api.) - возможно, вы не создаете два отдельных приложения.

Есть несколько ядро ​​для другой части приложения (API, администратора и основной сайт)

Общие проблемы создается слушателями и услуг в контейнере. Особенно, когда ваш слушатель должен работать только в одном из контекстов приложения (api/frontend/backend). Даже если вы не забыли проверить его в самом начале метода слушателя (и делать магию только в желаемом контексте), то все же слушатель может зависеть от инъецируемых услуг, которые нужно сконструировать и вставить в любом случае. Хорошим примером здесь является FOS/RestBundle: даже если вы настроите zones, то все еще на интерфейсе (когда активирован view_listener для api) view_handler инициализируется и вводится слушателю - https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Resources/config/view_response_listener.xml#L11 Я не уверен, что здесь 100%, но также отключает переводы и веточку (и т. д.) для API (большая часть api не нужна) ускорит его.

Создание отдельного ядра для контекста API позволило бы решить эту проблему (в нашем проекте мы используем одно ядро, и нам пришлось отключить этот прослушиватель), поскольку профили blackfire.io говорили нам, что он сохраняет ~ 15 мс на каждом фронтовом запросе).

Создание нового ядра для API гарантирует, что ни один из служб/слушателей, основанных только на API, не будет вмешиваться в визуализацию frontend/backend (он работает в обоих направлениях). Но это создаст для вас дополнительную работу по созданию общих components, используемых во многих пакетах внутри проекта (из разных ядер), но в мире с композитором это уже не огромная задача.

Но это случай только для людей, которые измеряют каждую миллисекунду времени отклика. И зависит от качества ваших/3dparty.Если все нормально, тогда вам не нужно возиться с ядрами.

0

Имейте несколько ядер, которые не всегда могут помочь.

Разделите приложение в связках и сохраните все преимущества совместного использования объектов (и т. Д.) С помощью различных частей приложения.

Вы можете определить отдельные маршрутизаторы/контроллеры/конфигурацию, которые загружаются в зависимости от хоста/URL-адреса.

Примечание:

Если вы собираетесь разделить ваше приложение в двух больших пучков (т.е. Администратор & АНП), и что две доли одних и тех же лиц, вы, безусловно, придется сделать выбор.

Этот выбор может включать в себя, что один из ваших пакетов содержит слишком много (и несвязанной) логики и позже должен быть реорганизован в несколько пачек.

Создайте пакет в разделе вашего приложения, которое соответствует набору связанных ресурсов, и сделайте разницу между двумя частями в разных контекстах из конфигурации.

Также назовите свои классы/пространства имен разумно.

+0

У меня есть несколько пучков, но создание разных вещей в связках, на самом деле не помогает тому, что я просил.Я спрашивал о производительности, как это будет действовать, даже если у вас есть вещи в разных пакетах, но тысячи пакетов вам не нужны, пока не будет вызван его путь. – Basit

Смежные вопросы