[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как устроен современный сайт?
Владимир55
В свое время использовались статические страницы, и тогда вызываемый адрес соответствовал имени страницы (точнее, наоборот - имя адресу):
по адресу https://site.ru/prumer.html открывалась страница prumer.html и показывался контент с нее.

На современных сайтах по адресу http://site.ru/prumer.html будет вызвана страница index.php, которая извлечет из базы контент, соответствующий содержимому страницы prumer.html, которой физически не существует.

Перечитал массу статей, но так и не понял, каким образом это происходит. Почему при адресе prumer.html открывается index.php вместо сообщения 404?

И как в РНР коде на странице index.php определяется, что ее вызвали по адресу prumer.html ?

Что случится, если в базе не будет кода для страницы prumer.html ?

(Разумеется, через htaccess индексной может быть назначена любая страница - не в этом суть.)
brevis
Цитата (Владимир55 @ 6.04.2022 - 16:17)
Почему при адресе prumer.html открывается index.php вместо сообщения 404?

И как в РНР коде на странице index.php определяется, что ее вызвали по адресу prumer.html?

Этим всем занимаются компоненты современного сайта под названием фронт-контроллер и роутер / маршрутизатор.

https://maxsite.org/page/routing
https://maxsite.org/page/how-works-routing

Еще вот это можно почитать для начала https://symfony.ru/doc/current/introduction...to_symfony.html

_____________
Чатик в телеге
Kusss
Цитата
(Разумеется, через htaccess индексной может быть назначена любая страница - не в этом суть.)

Именно в этом и суть.
Весь трафик идет через index . Оттуда в контроллер/роутер, который анализирует заголовок и параметры, и подставляет нужный шаблон.
Владимир55
Схематически конструкция кода индексной страницы index.php такая.


<?php
include 'config.php';

$query = mysqli_query($db, "SELECT `kod` FROM `baza` WHERE URI = $_SERVER['REQUEST_URI']");

while ($row = mysqli_fetch_assoc($query))
{
$kod = $row['kod'];
}

echo $kod;

/*
Между этими комментариями находится
код регистрации, идентификации
и код комментирования статьи
*/

?>


Происходит подключение к базе в config.php, определяется адрес открываемой страницы и воспроизводится ее код.

Этот процесс довольно быстрый, а потому посетитель мог бы быстро получить первый экран. Но дело в том, что на этой же странице ниже расположен код регистрации пользователя и его идентификации, а также система комментирования под статьей. Этот модуль фрилансер сделал чрезвычайно тяжелым - 195 Кб. И это только вес РНР кода страницы, но ведь код должен не только прочитаться, но и исполниться! И до завершения этого весьма длительного процесса посетитель не получит ни одного байта HTML кода.

Нельзя ли сделать как-то так, чтобы первая часть кода, определяющая первый экран, формировалась сразу, а оставшаяся часть начинала обрабатываться только после завершения вывода первой части?

Справочно:

<IfModule mod_rewrite.c> 
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
</IfModule>
brevis
Цитата (Владимир55 @ 6.04.2022 - 18:48)
Нельзя ли сделать как-то так, чтобы первая часть кода, определяющая первый экран, формировалась сразу, а оставшаяся часть начинала обрабатываться только после завершения вывода первой части?

Сделать можно все что угодно. Но есть ли смысл начинать обрабатывать любые оставшиеся части после того, как "посетитель получил первый экран"?

Цитата (Владимир55 @ 6.04.2022 - 18:48)
код регистрации пользователя и его идентификации, а также система комментирования под статьей

Ну очевидно же, что эти части должны подключаться только тогда и там, где они нужны (как конфиг в схематической конструкции)?

Цитата (Владимир55 @ 6.04.2022 - 18:48)
...195 Кб. И это только вес РНР кода страницы, но ведь код должен не только прочитаться, но и исполниться!

В "современных сайтах" OPCache немного помогает справиться с такими "проблемами".
Но, если код построен так, что в любом случае, всегда выполняется каждая строчка/инструкция -- то на OPCache не стоит сильно полагаться smile.gif

_____________
Чатик в телеге
Владимир55
Цитата
Ну очевидно же, что эти части должны подключаться только тогда и там, где они нужны
Ну, вот программер утверждает, что по другому у него не получается.

Цитата
Но есть ли смысл начинать обрабатывать любые оставшиеся части после того, как "посетитель получил первый экран"?
Смысл в этом есть, и именно так поступают с CSS и JS, подключая их в HTML теле страницы после загрузки первого экрана.

Цитата
Сделать можно все что угодно.
Действительно можно с РНР осуществить такой алгоритм?
brevis
В современных сайтах PHP никак не связан с HTML+JS+CSS.

Вообще, если есть вот такие вопросы/проблемы, рекомендую Wordpress с кеширующими + оптимизационными + seo плагинами.

_____________
Чатик в телеге
Владимир55
Я понял - проблему снимет
ob_flush ();
flush();

brevis
В привычной схеме request -> response -> die (интуиция мне подсказывает, что у вас именно так), после того, когда отдали клиенту ответ (response) -- обычно больше ничего не обрабатывают (по крайней мере в этом же процессе / потоке).

_____________
Чатик в телеге
miketomlin
Цитата (Владимир55 @ 6.04.2022 - 16:17)
Разумеется, через htaccess индексной может быть назначена любая страница - не в этом суть.
Только это не «индексная», а единая точка входа или по-другому фронт-контроллер.
miketomlin
Цитата (Владимир55 @ 6.04.2022 - 18:48)
Схематически конструкция кода индексной страницы index.php такая.
Это «Архиварикс» какой-то. Юзайте норм. MVC-движок.
miketomlin
Цитата (Владимир55 @ 7.04.2022 - 12:41)
Я понял - проблему снимет
Проблему снимает лечение, все остальное – костыли или тяжелая наркота.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.