Этот вопрос связан с просмотром речи Расмуса Лердорфа от Drupalcon . Этот вопрос и его беседа, кстати, не имеют ничего общего с Друпалом … это было просто дано при их убеждении. Мой собственный вопрос также не имеет ничего общего с PHP. Это единственная точка входа в общем, что мне интересно.
В наши дни кажется, что большинство фреймворков предлагают единую точку входа для того, что вы строите с ними. В своем разговоре Расмус упоминает, что он считает, что это плохо. Мне кажется, что он был бы прав в этом мышлении. Если все, кто попадает на сайт, вступают через ту же точку входа, что-то не исчезнет после того, как трафик достигнет определенного момента? Не было бы более эффективным, чтобы люди могли напрямую обращаться к определенным точкам на сайте, не имея своего запроса, пройти через ту же точку? Но, возможно, фактическое воздействие не очень плохое? Может быть, современная архитектура может справиться с этим? Может быть, вы должны быть поистине гигантскими по масштабам, прежде чем это станет даже заслуживающим внимания? Мне любопытно, что люди на этом сайте думают об этой проблеме.
Короче говоря, Расмус или интерпретация ошибочны.
Это показывает явное отсутствие понимания того, как работают компьютеры. Чем больше что-то используется, тем более вероятно, что он ближе к процессору и, следовательно, быстрее . Имейте в виду, единственная точка входа! = Единственная точка отказа. Но все дело в том, что, когда люди говорят о единой точке входа, мы говорим о приложении, это единственная точка входа для вашей логики.
Не говоря уже о том, что в архитектуре мозг мертв, чтобы не иметь центральной точки входа или уменьшить количество пунктов входа в целом. Как только вы захотите сделать что-то в своем приложении в каждой точке входа, угадайте, сколько мест нужно изменить? Обратившись к приложению, которое каждая страница стояла на своем собственном, он сосал, чтобы изменить, и я заверяю вас, что нам это нужно.
Важно то, что вы используете веб-фреймворк, который поддерживает масштабируемость с помощью таких методов, как балансировка нагрузки и декларативный код.
Нет, точка с одним входом сама по себе не создает узкого места. На первой странице Google много хитов, но у них много серверов.
Поэтому ответ: это не имеет значения.
Как и в разработке программного обеспечения, это зависит. Возражение Rasmus к фреймворкам стиля front-controller – это поразительная производительность, которую вы берете из-за необходимости загружать так много кода перед каждым запросом. Это на 100% верно. Даже если вы используете модуль загрузки / ресурса smart-resource какого-либо типа, использование фреймворка – это компромисс производительности. Вы принимаете удар производительности, но взамен вы возвращаетесь
Поощрение разделения «бизнес-логики» (что бы это ни было) и логики шаблонов / макетов
Мгновенный и (что более важно) унифицированный доступ к объектам, которые вы будете использовать для запросов к базе данных, вызванной службы, вашей модели данных и т. Д.
Для такого парня, как Rasmus, это не стоит удара производительности. Он программист на C / C ++. Для него, если вы хотите отделить бизнес-логику высокоэффективным образом, вы пишете C / C ++ Extension для PHP.
Поэтому, если у вас есть среда и команда, где вы можете легко писать расширения C / C ++ для PHP, и ваше соотношение времени и производительности и производительности приемлемо, тогда да, отбросьте рамки вашего фронтального контроллера.
Если это не ваша среда, подумайте о том, что производительность повышается, инфраструктура переднего контроллера может привести к вашему (вероятно) простому CRUD-приложению .
Я думаю, что одним из самых больших преимуществ, которые у вас есть, является только одна точка входа – безопасность. Все входные данные с меньшей вероятностью могут повредить систему, если она проверена и проверена в одном месте.
Я думаю, что это большое недоразумение, обсуждающее это с точки зрения «одного файла» и «нескольких файлов».
Один имеет тенденцию думать, что, поскольку точка входа находится в одном файле, тогда все, на что мы должны сосредоточиться, это код в этом одном файле – это неправильно.
Все популярные структуры содержат множество файлов с кодом ввода, кодом интерпретации и кодом проверки для запросов. Код не расположен в одном месте, а распространяется в джунглях оператора require / include, вызывающего разные классы в зависимости от того, что запрашивается и как.
В обоих случаях запрос действительно обрабатывается разными файлами.
Почему тогда следует иметь одну точку входа с какой-то функцией _detect_uri (), которая должна вызывать несколько других функций, таких как strpos (), substr (), strncmp () для очистки, проверки и разделения строки запроса, когда я может просто использовать несколько точек входа, устраняя этот код вместе?
Взгляните на функцию CodeIgniters _detect_uri () в URI.php. Чтобы не выбрать CodeIgniter, это просто пример. Другие структуры делают это аналогично.
Вы можете достичь целей шаблона MVC с одной точкой входа, а также с несколькими точками входа.
Это то, о чем я думал сначала, но это, похоже, не влияет. В конце концов, ваша точка входа (обычно) выполняет только пару действий: установка некоторых констант среды, включая загрузчик начальной загрузки, опционально зависание любых исключений, отбрасываемых и отправляющих фронт-контроллер. Я думаю, причина в том, что это не является неэффективным, потому что этот файл не изменяется в зависимости от контроллера, действия или даже пользователя.
Однако я чувствую, что это странно. В настоящий момент я создаю небольшую структуру MVC, но она немного обратная к большинству фреймворков, которые я использовал. Я поместил логику контроллера в доступный файл. Например, index.php будет содержать IndexController и его действия. Этот подход работает для меня как минимум.
Поскольку большинство фреймов mpc php используют какую-то переписывание URL или, по крайней мере, анализируют что-либо после index.php самостоятельно, требуется одна точка входа.
Кроме того, мне нравится предоставлять точки входа для каждого контекста, например, web (/ soap) / console / …
Просто добавьте, что люди обычно думают, что, поскольку есть одна страница php, это единственная страница, обслуживающая все запросы. Вид вроде очереди.
Важно отметить, что каждый запрос создает экземпляр скрипта, и, таким образом, загрузка такая же, как если бы одновременно выполнялись две разные страницы. Итак, все тот же груз. Практически.
Тем не менее, некоторые структуры могут иметь чертовски много вещей, которые вам не нужны в скрипте ввода. Похоже на то, чтобы удовлетворить все возможные сценарии, и это может вызвать нагрузку.
Лично я предпочитаю многостраничные страницы, так же, как я смешиваю oop и процедурный. Мне нравится php по старой школе.
Есть определенные недостатки в использовании файловой архитектуры переднего контроллера. Как объясняет Сайм, доступ к одному и тому же файлу обычно выгоден для производительности, но, как объясняют Алан Шторм и Расмус Лердорф, пытаясь заставить код обрабатывать многочисленные ситуации (например, фронт-контроллер пытается обрабатывать запрос на каждую «страницу» на сайте ) приводит к раздутой и сложной коллекции кода. Использование раздутой и сложной коллекции кода для каждой загрузки страницы может считаться плохой практикой.
Saem утверждает, что фронт-контроллер может избавить вас от необходимости редактировать код в нескольких местах, но я думаю, что в некоторых случаях это лучше решать путем выделения избыточности.
Наличие структуры каталогов, которая фактически используется веб-сервером, может сделать вещи проще для веб-сервера и более очевидны для разработчиков. Веб-сервер проще обслуживать файлы, переводя URL-адрес в местоположение, как они традиционно представляли, чем переписывать их в новый URL-адрес. Архитектура файлового архива, не относящегося к фронту, может быть более очевидной для разработчика, потому что вместо того, чтобы начинать с контроллера, который вздувается для обработки всего, они начинаются с файла / контроллера, который более специфичен для того, что им нужно разработать.