У меня есть вопрос, который парит в моей голове несколько дней.
Почему люди не делают файлы .php
для своих файлов CSS
и JavaScript
?
Добавление <?php header("Content-type: text/javascript; charset: UTF-8"); ?>
<?php header("Content-type: text/javascript; charset: UTF-8"); ?>
в файл делает его доступным для чтения браузерами, и вы можете сделать то же самое с css-файлами, установив свойство Content-type
в text/css
.
Он позволяет использовать все переменные PHP и методы на других языках. Позволяя вам, например, изменить основные цвета темы в зависимости от предпочтений пользователя в css или предварительно загружать данные, которые ваш javascript может использовать при загрузке документа.
Существуют ли плохие стороны использования этой техники?
Заранее благодарю за ваше время, и у вас хороший день.
Люди делают это чаще, чем вы думаете. Вы просто не видите этого, потому что обычно этот метод используется в сочетании с переписыванием URL, что означает, что браузер не может отличить статический файл .css и динамическую таблицу стилей, сгенерированную PHP-скриптом.
Однако есть несколько серьезных причин не делать этого:
И есть несколько альтернатив, которые легче настроить:
Если вы хотите использовать PHP для генерации CSS динамически:
<link rel="stylesheet" type="text/css" href="http://example.com/stylesheet.css?dummy=121748283923">
) и изменяйте его при каждом изменении сценария: браузеры интерпретируют это как другой URL-адрес и пропускают кешированную версию. Content-Type
. Некоторые делают, лучше всего сгенерировать сценарии JS / CSS в PHP и кэшировать их в файл.
Если вы используете все ваши файлы CSS / JS с помощью PHP, тогда вам нужно вызывать PHP больше, что накладывает дополнительные накладные расходы (процессор и память), что не нужно при обслуживании статических файлов. Лучше просто позволить веб-серверу (Apache / nginx / lighttpd / iis и т. Д.) Выполнять свою работу и обслуживать эти файлы для вас без необходимости в PHP.
Запуск PHP-движка не имеет нулевой стоимости, как в момент времени, так и в CPU. И так как файлы CSS и JavaScript обычно редко меняются, их запуск через движок абсолютно ничего не имеет смысла; лучше позволить браузеру кэшировать их, когда это необходимо.
Вот один из методов, которые я использовал: Страница HTML содержит ссылку на /path/12345.stylesheet.css
. Этот файл не существует. Таким образом .htaccess
направляет запрос в /path/index.php
. Этот файл (a) выполняет запрос базы данных, (b) создает CSS, (c) сохраняет файл в следующий раз, (d) служит CSS для браузера. Это означает, что в следующий раз есть запрос на /path/12345.stylesheet.css
, на самом деле есть физический статический файл, который должен быть установлен Apache как обычно.
О, и всякий раз, когда редактируются правила стилей (a) статический файл удаляется, и (b) идентификатор ссылки изменяется, так что на странице HTML в будущем будет содержаться ссылка на /path/10995.stylesheet.css
или без разницы. (Фактически, я использую временную метку UNIX.)
Я использую аналогичный метод для создания эскизов изображений: создайте файл по первому запросу и сохраните статический файл в том же месте для будущих запросов. Мне никогда не приходилось делать то же самое для javascript, но нет основополагающих причин, почему нет.
Иногда вам может потребоваться динамическое создание javascript или стилей.
проблема заключается в том, что веб-серверы оптимизированы для обслуживания статического контента. Динамическое создание контента с помощью php может быть огромным ударом perforamce, потому что он должен генерироваться при каждом запросе.
Это неплохая идея или все это необычно, но есть недостатки. Кэширование – важное соображение – вам нужно, чтобы браузеры кэшировали, когда контент один и тот же, но обновляется, когда он будет меняться (например, когда кто-то еще входит в систему). Любая строка запроса немедленно остановит кеширование браузеров, поэтому вам понадобятся правила перезаписи, а также заголовки HTTP.
Любая обработка, которая занимает заметное время или требует блокировки на что-либо (например, session_start), задерживает браузер, пока он ждет актива.
Наконец, и, что немаловажно, смешивание языков может затруднить редактирование кода. Синтаксическая подсветка и структурные браузеры могут не справиться, а перекрытие синтаксиса может привести к уродливым вещам, таким как множественные обратные следы.
В javascript может быть полезно преобразовать некоторые данные PHP в (JSON) переменные, а затем перейти к статическому JS-коду. Существует также преимущество в производительности для объединения нескольких JS-файлов назад, браузер загружает их все за один раз.
Для CSS существуют определенные языки, такие как «Меньше», которые больше подходят для этой цели. Используя LessPHP (http://leafo.net/lessphp/), вы можете легко инициализировать шаблон Less с переменными и обратными вызовами из вашего PHP-скрипта.
PHP часто используется в качестве процессора для создания динамического содержимого. Для обработки страницы требуется время, а затем отправить ее. Ради эффективности (как для сервера, так и для времени, затраченного на программирование) динамические файлы JS или CSS создаются только в том случае, если статический файл не может успешно выполнить свою намеченную цель.
Я рекомендую делать это только в том случае, если вам абсолютно необходима помощь динамического процессора, управляемого базой данных.
Плохие стороны: много, но назвать несколько:
Это будет медленным: создание пользовательских таблиц стилей для каждого запроса ставит огромную нагрузку на сервер, а не то, что вы хотите.
Дизайнеры создают файлы CSS, программисты не должны (в некоторых случаях не должны допускать). Это не их работа / их специальность.
Смешивание JS и PHP – это ИМХО, одна из самых больших ошибок может сделать. Поскольку jQuery является очень популярным lib, используя знак $
, он может быть огромным источником ошибок и синтаксических ошибок. Кроме того: JS – совершенно другой язык, чем любой другой язык программирования. Очень немногие люди знают, как извлечь максимальную выгоду из этого, и позволить разработчикам PHP писать обширные сценарии JS, которые часто заканчиваются слезами.
JavaScript – это функциональный OO ( прототипный ) язык. Люди, которые не полностью понимают эти критические различия, пишут плохой код в результате. Я знаю, потому что я написал множество ужасных JS-кодов.
Зачем вам это делать? PHP позволяет вам изменять классы всех элементов при создании страницы, просто убедитесь, что классы имеют соответствующие правила стиля в ваших файлах css, и цвета будут меняться так, как вы хотите, без необходимости отправлять разные файлы, возиться с заголовками и всеми головными болями который приходит с этой практикой
Если вы хотите больше причин, почему вы не должны этого делать, я могу подумать, по крайней мере, еще несколько десятков.
Тем не менее: я могу только думать о 1 причине, почему вы думаете об этом: это делает проблемы, вызванные кэшированными сценариями на стороне клиента, меньше, чем проблема. Не то чтобы в первую очередь это была проблема, но эй …