Управление включением верхнего и нижнего колонтитулов в php

#php

Вопрос:

давайте предположим, что я хочу организовать свои страницы следующим образом:

 lt;?php include('header.inc.php'); ?gt;  my-page-content  lt;?php include('footer.inc.php'); ?gt;  

в верхнем колонтитуле у нас есть .css файлы, а в нижнем колонтитуле у нас есть .js файлы.

как мне поступить, если я хочу загружать только CSS и JS, необходимые для текущей страницы?

например, на странице статьи мне не нужно загружать ресурсы JS, которые управляют картами и календарем.

Комментарии:

1. Вы можете установить переменную перед включением, в которой указано, какой должен быть js/css, и использовать ее в верхнем и нижнем колонтитулах. Однако чаще всего используется только один файл js/css, который включает в себя все это. Браузер кэширует эти файлы, поэтому в любом случае они будут загружены только один раз.

2. Спасибо @M. Эрикссон, интересно, я не думал об этой идее. Таким образом, вы имеете в виду, что наличие всех js/css в верхнем/нижнем колонтитуле не снизит производительность страницы, поскольку браузер будет загружать только те js/css, которые нужны текущей странице?

3. Нет, вы должны поместить весь свой JS-код в один .js-файл, а весь CSS-в один .css-файл. Затем вы загружаете этот единственный файл на каждую страницу. Затем браузер загрузит эти файлы при первом посещении страницы посетителем и будет использовать кэшированную версию, когда пользователь после этого посетит другие страницы.

4. Один файл css со всеми стилями и один файл js со всеми сценариями в наши дни не являются хорошим решением, если вы учитываете скорость загрузки на мобильных устройствах (см. Google pagespeed insights: удаление неиспользуемых css и js). Лучший способ-иметь один css-файл с глобальными стилями, которые повторяются на каждой странице, и загружать дополнительные файлы на страницы, которые действительно нуждаются в дополнительном стиле. Аналогичная ситуация с файлами js. Лучшим решением было бы, если бы вы объявили (в каком-либо контроллере), какие css и js должны загружаться на определенные страницы (в дополнение к глобальным).

Ответ №1:

Лично я считаю, что бесполезно вставлять в html другие файлы, которые никогда не будут использоваться — для целей управления кэшем. Чем меньше используемое пространство кэша html, тем более эффективной и мощной будет html — страница.

Рассмотрим следующий пример:

файл: library.php

 lt;?php  function includeFiles(string $typeFile, array $source_arr, array $request_file): array  {  $tmp = [];  $element = $typeFile === "css" ? "lt;link rel="stylesheet" href="%s"gt;" : "lt;script src="%s"gt;lt;scriptgt;";  foreach ($request_file as $file) {  if (array_key_exists($file, $source_arr)) {  array_push($tmp, [sprintf($element, "https://example.com" .$css[$file])]);  }  }  return count($tmp) gt; 0 ? $tmp : false;  }   // Make a list of all .js and .css files using the php array:  $css = [  // List all the .css files you are using here  "css1" =gt; "/css/css1.css",  "css2" =gt; "/css/css2.css",  "css3" =gt; "/css/css3.css",  "css4" =gt; "/css/css4.css",  "css5" =gt; "/css/css5.css"  ];    $js = [  // List all the .js files you are using here  "js1" =gt; "/js/js1.js",  "js2" =gt; "/js/js2.js",  "js3" =gt; "/js/js3.js",  "js4" =gt; "/js/js4.js"  ]; ?gt;  

файл: main_html.php

 lt;?php   include "library.php";   $css_files = ["css1", "css3", "css5"];  $headers = implode(PHP_EOL, includeFiles("css", $css, $css_files));   $js_files = ["js1", "js3", "js5"];   $footer = implode(PHP_EOL, includeFiles("js", $js, $js_files));   ?gt; lt;!-- Here html --gt; lt;!DOCTYPE htmlgt;  lt;htmlgt;  lt;headgt;  lt;meta charset="UTF-8"gt;    lt;?php echo $headers; ?gt;   lt;!-- and other your required head element parameters --gt;  lt;/headgt;  lt;bodygt;     lt;!-- includes .js files --gt;   lt;?php echo $footer; ?gt;    lt;/bodygt;  lt;/htmlgt;    

Комментарии:

1. Вы не должны добавлять include "library.php" и header.php то, и footer.php другое, так как это определенно приведет к ошибкам

2. Спасибо за предупреждение, я этого не понимал. Спасибо за ваше внимание. Я обновил ответ, на самом деле сам фрагмент php. В «footer.php» файл не нужен. @DarkBee