#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