Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как правильно минимизировать css с помощью php
Форумы портала PHP.SU » » Вопросы новичков » Как правильно минимизировать css с помощью php

Страниц (2): [1] 2 »
 

1. Synov_son - 03 Сентября, 2013 - 16:42:10 - перейти к сообщению
Есть набор css фалов разбитых, скажем по-категориям, для удобства.
Есть задача: выводить все css файлы в одном.
Пытался так брать все css файлы из папки
PHP:
скопировать код в буфер обмена
  1. header("Content-type: text/css; charset: UTF-8");
  2.  
  3. $files = glob(CSS."*.css");
  4. foreach ($files as $file) {
  5.         $css = file_get_contents($file);
  6.         print $css;
  7. }

а в head вставляю
CODE (html):
скопировать код в буфер обмена
  1. <link rel="stylesheet" href="css.php" type="text/css">

Вообщем, таким методом тыка у меня ничего не вышло. Как правильно это реализовать ? Не понял
2. etoYA - 03 Сентября, 2013 - 17:10:34 - перейти к сообщению
http://htmlbook[dot]ru/css/import
3. Synov_son - 03 Сентября, 2013 - 17:25:12 - перейти к сообщению
etoYA пишет:
http://htmlbook.ru/css/import

точно, точно, спасибо
4. IllusionMH - 03 Сентября, 2013 - 17:27:29 - перейти к сообщению
etoYA, вот не нужно использовать @import т.к. это замедляет загрузку страницы.
Synov_son, лучше загуглить php css minification
5. esterio - 03 Сентября, 2013 - 17:32:16 - перейти к сообщению
А зачем все ети костили. Блин первый раз погрузиться дольше, ну а кеш в браузере то за чем придумали. Нет нужно же каждый раз нагружать ядро ПХП для поиска файлов и склеивания их в одно целое. Я понимаю если бы еще хидер для кеширования ишел. Но в Вашем примере только одни минуса
6. Synov_son - 03 Сентября, 2013 - 17:53:15 - перейти к сообщению
esterio пишет:
А зачем все ети костили. Блин первый раз погрузиться дольше, ну а кеш в браузере то за чем придумали. Нет нужно же каждый раз нагружать ядро ПХП для поиска файлов и склеивания их в одно целое. Я понимаю если бы еще хидер для кеширования ишел. Но в Вашем примере только одни минуса

Я же говорю, есть задача, зачем, то совсем другое дело.
(Добавление)
IllusionMH пишет:
etoYA, вот не нужно использовать @import т.к. это замедляет загрузку страницы.
Synov_son, лучше загуглить php css minification

Гуглил нашел только скрипты удаления пробелов, преобразования в одну строку и т.д.
Знаю что замедляет, но не могу додуматься до альтернативы.
7. DelphinPRO - 03 Сентября, 2013 - 22:13:14 - перейти к сообщению
1. @import - не подходит для решения задачи. т.к. файлы по-прежнему грузятся по-одному. Количество запросов к серверу не уменьшается.
2. ваш скрипт можно переписать так
PHP:
скопировать код в буфер обмена
  1. header("Content-type: text/css; charset: UTF-8");
  2.  
  3. $files = glob(CSS."*.css");
  4. $css = '';
  5. foreach ($files as $file) {
  6.         $css .= file_get_contents($file) . ';' . "\n";
  7. }
  8. echo $css;

Но запускать php-процесс на каждый вызов стилей - не комильфо. Нужно разрулить на уровне индейца. Пусть проверяет, существует ли результирующий файл, и отдает либо его, либо запускает пых.
3. Из второго пункта следует вывод - лучше пережимать файлы перед выкладкой на сервер. Т.е. Выкладывать уже готовые, сжатые. Для этого подойдет любой онлайн-сервис минификации, или десктопная программа.
4. Лучше всего с этим справится sass-препроцессор с опцией "compressed"
8. LIME - 03 Сентября, 2013 - 22:31:39 - перейти к сообщению
и каков профит от таких шевелений?
поддержу естерио
препроцессор хорош если каша из файлов
нет?
9. DelphinPRO - 03 Сентября, 2013 - 23:56:06 - перейти к сообщению
LIME пишет:
и каков профит от таких шевелений?

ну у меня рабочая станция настроена ) на ней есть установленный ruby\sass. Есть заготовка для новых проектов. Копирнул заготовку в рабочую папку, запустил слежение в sass и спокойно работаешь\верстаешь. В sass-файлах директива @import именно внедряет вызываемый файл в вызывающий. Стили в sass-файлах раскиданы по логическим группам, а на выходе автоматом получаем единый минифицированный CSS. Без всяких заморочек.
10. Мелкий - 04 Сентября, 2013 - 09:30:49 - перейти к сообщению
LIME пишет:
и каков профит от таких шевелений?

1 запрос на 10кб значительно дешевле 10 запросов по 1кб.
Если добавить gzip static (всё равно же процессить css, шагом меньше, шагом больше - какая разница?) - профит налицо.

Экономия времени на загрузку, экономия трафика, экономия ресурсов сервера.
При сохранении удобства разработки и разбиения несвязанных между собой css на разные файлы. Плюс препроцессор может давать свои плюшки, вроде автоматической подстановки префиксов вендорных свойств - в профите невозможность что-то забыть описать и более чистый исходный код.
11. LIME - 04 Сентября, 2013 - 09:42:22 - перейти к сообщению
Мелкий пишет:
1 запрос на 10кб значительно дешевле 10 запросов по 1кб.
только при первом обращении
12. Zuldek - 04 Сентября, 2013 - 09:56:39 - перейти к сообщению
Не понимаю для какого удобства держать 10 css файлов, а не один и склеивать их каждый раз пыхой... .
Если для удобства редактирования этих css файлов, — то это проблема рук, а не поставленная задача.
13. DelphinPRO - 04 Сентября, 2013 - 10:03:47 - перейти к сообщению
LIME пишет:
только при первом обращении

Умножим на количество посетителей.
14. avtor.fox - 04 Сентября, 2013 - 10:07:10 - перейти к сообщению
Zuldek пишет:
Не понимаю для какого удобства держать 10 css файлов

Сталкивался с таким, что (не) каждая страница сайта должна быть уникальной. В данном случае хранить все стили в одном не кошерно. Да и вообще, копаться в тысячах строк отвратительно. А так открыл нужный стиль, изменил что-нибудь и вуаля.
15. Synov_son - 04 Сентября, 2013 - 10:55:32 - перейти к сообщению
avtor.fox пишет:
Zuldek пишет:
Не понимаю для какого удобства держать 10 css файлов

Сталкивался с таким, что (не) каждая страница сайта должна быть уникальной. В данном случае хранить все стили в одном не кошерно. Да и вообще, копаться в тысячах строк отвратительно. А так открыл нужный стиль, изменил что-нибудь и вуаля.

Для удобства создания и редактирования новых шаблонов для своего движка, например на этом сайте будут другие цвета - идем в colors.css, а тут будут другие размеры - идем в sizes.css. А теперь все же к делу. Как их правильно склеить: может создания файла на лету и использование его как и обычно. Или есть все же способ заставить работать
CODE (html):
скопировать код в буфер обмена
  1. <link rel="stylesheet" href="css.php" type="text/css">

именно php файл. Где я пишу
PHP:
скопировать код в буфер обмена
  1. header("Content-type: text/css; charset: UTF-8");
  2.  
  3. $files = glob("templates/default/css/*.css");
  4. foreach ($files as $file) {
  5.         include($file);
  6. }

(Добавление)
DelphinPRO пишет:
2. ваш скрипт можно переписать так

Так тоже не работает. И @import не работает...
PHP:
скопировать код в буфер обмена
  1. <style><?PHP
  2. foreach ($files as $file) {
  3.         print("@import '$file'");
  4. }
  5. ?></style>
  6.  

(Добавление)
DelphinPRO пишет:
3. Из второго пункта следует вывод - лучше пережимать файлы перед выкладкой на сервер. Т.е. Выкладывать уже готовые, сжатые. Для этого подойдет любой онлайн-сервис минификации, или десктопная программа.
4. Лучше всего с этим справится sass-препроцессор с опцией "compressed"

Думаю, так действительно лучше. Просто хотел, что бы не случалось, что вроде и отредактировал файлы, а забыл перезаписать результирующий файл. Вообще такая идея пришла, когда редактировал сайт заказчику, там стояла джумла и шаблон написанный с использованием ооп (в настройках можно было редактировать цвета и размеры). Так при
inspect element браузером показывался только один файл стилей типа css.php?id=14&file=default
(Добавление)
Попробую все же создавать результирующий файл и проверять не только его существование но и брать размер всех файлов css и умножать на коэффициент, который будет давать сжатие и если размеры не будут соответствовать то перезапись файла

 

Powered by ExBB FM 1.0 RC1