Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

HTTP_StaticMerger: автоматическая "склейка" CSS- и JS-файлов для быстрой загрузки (Дмитрий Котеров)
Author Message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Sun Nov 23, 2008 9:34 pm (написано за 11 секунд)
   Post subject: HTTP_StaticMerger: автоматическая "склейка" CSS- и JS-файлов для быстрой загрузки
Reply with quote

Russian: dklab.ru/lib/HTTP_StaticMerger/
English: en.dklab.ru/lib/HTTP_StaticMerger/
Back to top
View user's profile Send private message Send e-mail
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Mon Nov 24, 2008 6:32 am (спустя 8 часов 57 минут; написано за 28 секунд)
   Post subject:
Reply with quote

В демо-примерах ошибка:
Code (any language): скопировать код в буфер обмена
Parse error: syntax error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/dklab/domains/www/lib/HTTP_StaticMerger/demo/lib/HTTP/StaticMerger.php on line 13
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 199
   поощрить/наказать

Location: 007 495

PostPosted: Mon Nov 24, 2008 3:12 pm (спустя 8 часов 39 минут; написано за )
   Post subject:
Reply with quote

Дим, а ты слышал про прикольное изобретение программистов из Office Live под названием JSCSS :)? Это склеенный по довольно простым правилам CSS и JS файл, который является одновременно и валидным JS и валидным CSS :).
Back to top
View user's profile Send private message Send e-mail
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 82
   поощрить/наказать


PostPosted: Mon Nov 24, 2008 3:36 pm (спустя 24 минуты; написано за 1 минуту 1 секунду)
   Post subject:
Reply with quote

Нашел. (habrahabr.ru/blogs/webdev/31122/)

Юра, +1 =)
Back to top
View user's profile Send private message Send e-mail
Виктор-тлт
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Nov 24, 2008 3:42 pm (спустя 6 минут; написано за 15 секунд)
   Post subject:
Reply with quote

Если честно я не уловил сути склеивания .
Есть много страниц.
И на каждой CSS и JavaScript немного различаются.
Но ведь часть уже скачались, и подгружаются только новые. А возможно они даже грузятся не отдельным файлом а вместе с сомой html страницей.

А у вас получается для каждой страницы грузить новую (оригинальную) CSS и JavaScript.
Есть смысл объединять только тогда, когда на сайт заходят один раз, тогда действительно количество запросов станет меньше.

Да и так ли много этих CSS и JavaScript по сравнению с графикой ... ?
Нет конечно отимизация вещь хорошая, но в этом случае я ее не увидел. Может откроете глаза ? ;)
Часто приходиться слышать, что нафиг это делать, народ и так хавает.
Не хотят сжать графики без потери качества, ни говоря уже про использование спрайтов.
Не думая о кешировании страниц вообще ...
Реальный случай ... страница 700кб из них 160кб флеш а под ней 160кб jpg + еще картинок
второй заход на страницу 360 кб ... :)
третий тоже ...

На предложение сделать по хорошему ответили "отойди мальчик не мешай"

P.S. мы деньги делаем !
Back to top
Виктор-тлт
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Nov 24, 2008 4:03 pm (спустя 20 минут; написано за 5 минут 53 секунды)
   Post subject:
Reply with quote

Почитал комменты зашел по ссылке, читал я ее раньше.
Пока сам не пробывал, но что там у нас с оперой ?

Вот хотелось бы узнать какова посещаемость скажем этого форума.
Или может на каких нибудь других проектах проверяли ?

Вопрос насущный.
Недавно проверял время генерации страницы на хостинге рбк
0,000720 секунды динамика
0,002000 динамика (без обращения к базе , там помоему gzip-сжатие применино страница становится 7кб помоему.
другая страница
на моем коме
0.009569 секунды (обращение к базе но пустой , всего пару строк инклудится 14 файлов)\

Вот сколько тот же рбк может дать потоков и оперативной памяти и вообще ресурсов. Может кто-то интересовался ?
Back to top
Виктор-тлт
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Nov 24, 2008 5:06 pm (спустя 1 час 3 минуты; написано за 14 минут 45 секунд)
   Post subject:
Reply with quote

собственно про цифры,

Зашел на маил.ру

итого
277724 байт принято 73290 отправлено :) 7.568 секунды
1,979 секунды на текст
5,589 на графику 95 запросов
0,0707секунд в среднем на запрос
средняя скорость 36,697кб/с
у меня скорость 2мбит/с т.е. 256кб/с (скорость реальная проверянна на скачке)


максимальное время


всего 100 запросов
6 абортед (0 байт принято)

запрос номер 2
                        
3.801сек 81261отправлено 165690принято 108 requests

Как я и говорил все убивает графика

и я не совсем разобрался ... напротив каждого файла стоят цифры в секундах ... вроде 1 секунда 0,9 0,5 секунды
и если просуммировать время потраченное на каждую страницу наверно вышло бы секунд 50 ...
а вот и плюсы многопоточности (казалось бы)

на деле на файл уходит 0,070 секунды до 1 ...

третий заход на мал с очищенным кешем
14.762сек 105051отправлено 346909принято 153 requests

у меня вопрос что это за 100кб идущих на верх ???

мерил вот этим только версия 5ой
HttpWatch Basic Edition - Version 6.0.17
www.httpwatch.com/httpwatch.exe (free-версия)
System Requirements:
Windows XP, Vista or 2003/2008 Server
Internet Explorer 6, 7, 8 Beta 2 or Mozilla Firefox 2.0, 3.0, 3.1 Beta 1
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 199
   поощрить/наказать

Location: 007 495

PostPosted: Mon Nov 24, 2008 5:47 pm (спустя 40 минут; написано за )
   Post subject:
Reply with quote

Смысл оптимизации в том, что пока скрипты и цсс не загрузились, браузер страницу вообще не покажет. А без картинок страницу показывать уже можно.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Nov 24, 2008 6:00 pm (спустя 13 минут; написано за 56 секунд)
   Post subject:
Reply with quote

Юрий Насретдинов wrote:
Смысл оптимизации в том, что пока скрипты и цсс не загрузились, браузер страницу вообще не покажет. А без картинок страницу показывать уже можно.
Не вижу момента оптимизации если честно в ваших словах.
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 199
   поощрить/наказать

Location: 007 495

PostPosted: Tue Nov 25, 2008 12:48 pm (спустя 18 часов 47 минут; написано за )
   Post subject:
Reply with quote

Я говорю о том, что для картинок оптимизация загрузки путем склейки в один файл всё же менее критично, чем для тех же JS и CSS файлов.
Back to top
View user's profile Send private message Send e-mail
Виктор-тлт
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Nov 25, 2008 1:43 pm (спустя 55 минут; написано за 4 минуты 20 секунд)
   Post subject:
Reply with quote

НуЮрий Насретдинов
Ну а как же тот факт, что css и javascript кешуруются.
А тут придется с каждой страницей подргужать новый объемный код.
Ни как не уловлю выгоды. И в чем отличие загрузка статичных стилей и скриптов ,
от загрузки статичных рисунков?
0,0707секунд в среднем на запрос если 20 картинок объединить в спрайт, то уже на 19 запросов меньше ...
ну а 20 Css+js это что-то уже фантастикой пахнет
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Wed Nov 26, 2008 3:45 am (спустя 14 часов 2 минуты; написано за 2 минуты 2 секунды)
   Post subject:
Reply with quote

Миша Спларов
Да, черт. Это из-за того, что он для PHP5, а на сервере стоит PHP4.
Спасибо, переключил на PHP5.
Виктор-тлт wrote:
Ну а как же тот факт, что css и javascript кешуруются.
А тут придется с каждой страницей подргужать новый объемный код.
Дело в том, что не обязательно мерджить прямо ВСЕ скрипты на странице. Вполне можно мерджить "все, кроме одного", а в этом "одном" - как раз и есть различающаяся часть. Т.е. для JS как бы происходит 2 мерджа: один - большой, это то, что на всех страницах одинаково (например, jQuery с модулями, какие-то свои общие библиотеки и т.д.), а второй - маленький, реально различающиеся скрипты. То же самое и с CSS (если это требуется).
Back to top
View user's profile Send private message Send e-mail
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 82
   поощрить/наказать


PostPosted: Wed Nov 26, 2008 12:17 pm (спустя 8 часов 31 минуту; написано за 21 секунду)
   Post subject:
Reply with quote

Дмитрий Котеров,
а вообще -- удобная вещь! [+]
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Dec 10, 2008 11:06 pm (спустя 14 дней 10 часов 49 минут; написано за 3 секунды)
   Post subject:
Reply with quote

А если файлы подсоединяются по условию if(...) {include()...} ?
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Sun Dec 14, 2008 5:11 pm (спустя 3 дня 18 часов 4 минуты; написано за 22 секунды)
   Post subject:
Reply with quote

Уточните вопрос. Какие файлы? Где присоединяются? Зачем?
Back to top
View user's profile Send private message Send e-mail
Inkvizitor
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sun Jan 11, 2009 3:09 pm (спустя 27 дней 21 час 58 минут; написано за 3 минуты 39 секунд)
   Post subject:
Reply with quote

Дмитрий, а вы могли бы сделать опцию позволяющая добавлять определенные скрипты к сливаемым в зависимости от типа браузера.
Code (php): скопировать код в буфер обмена
<head>
  <?
  $merger = new HTTP_StaticMerger();
  echo (www.php.net/echo) $merger->getHtml("/merge.php/", array (www.php.net/array)("js/jquery.js", "js/jquery-dimensions.js"), array (www.php.net/array)("ie6"=>array("ie6.css"), "ie7"=>array("ie7.css")));
  ?>
</head>
или
Code (php): скопировать код в буфер обмена
<head>
  <?
  $merger = new HTTP_StaticMerger();
  echo (www.php.net/echo) $merger->getHtml("/merge.php/", array (www.php.net/array)("common"=>array("js/jquery.js", "js/jquery-dimensions.js"), "ie6"=>array("ie6.css"), "ie7"=>array("ie7.css")));
  ?>
</head>
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Thu Jan 22, 2009 9:28 am (спустя 10 дней 18 часов 18 минут; написано за 43 секунды)
   Post subject:
Reply with quote

А зачем об этом знать библиотеке? Вы же можете варьировать список сливаемых файлов, определяя тип браузера в вызывающем кода.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 199
   поощрить/наказать

Location: 007 495

PostPosted: Thu Jan 22, 2009 2:42 pm (спустя 5 часов 14 минут; написано за )
   Post subject:
Reply with quote

Пусть это немного и оффтопик, но все же: я считаю, что хороший верстальщик должен уметь делать такую верстку, которая не требовала бы определения типа браузера пользователя. Или, по крайней мере, количество кода, зависимого от браузера, должно быть сведено к минимуму и включено в основной код.

Причем объяснение моей позиции тоже очень простое: тот же IE6 с каждым годом сдает свои позиции, и в скором времени о нем вообще можно будет забыть. Причем семёрка, ИМХО, недалеко ушла от седьмой версии, и тоже довольно скоро сойдет на нет. А в 8 версии обещают ввести вообще другой режим отображения страниц по умолчанию, несовместимый с ИЕ6. Так вот, по мере выхода новых браузеров, если придерживаться разделения кода для разных браузеров, придется иметь и поддерживать очень много файлов, условий и т.д. Если Гугл еще может себе такое позволить, то среднестатистический ленивый владелец сайта должен уметь делать сразу и "на века", чтобы потом не было мучительно больно опять все переделывать/доделывать с каждым новым браузером на рынке.
Back to top
View user's profile Send private message Send e-mail
Владимир Гаврилов
Участник форума



Joined: 20 Aug 2004
Posts: 73
Карма: 1
   поощрить/наказать

Location: Уфа

PostPosted: Wed Feb 04, 2009 9:49 am (спустя 12 дней 19 часов 6 минут; написано за 9 секунд)
   Post subject:
Reply with quote

Юрий Насретдинов wrote:
Причем семёрка, ИМХО, недалеко ушла от седьмой версии
от 6-й версии?
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 199
   поощрить/наказать

Location: 007 495

PostPosted: Wed Feb 04, 2009 9:22 pm (спустя 11 часов 33 минуты; написано за 22 секунды)
   Post subject:
Reply with quote

Владимир Гаврилов wrote:
от 6-й версии?
Да, конечно с шестой :). Просто с телефона писал, неудобно было проверять, что написал.
Back to top
View user's profile Send private message Send e-mail
Inkvizitor
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Feb 27, 2009 9:35 pm (спустя 23 дня 12 минут; написано за 3 минуты 7 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
А зачем об этом знать библиотеке? Вы же можете варьировать список сливаемых файлов, определяя тип браузера в вызывающем кода.
Так будет изящнее: библиотека автоматически будет добавлять условные комментарии для 6 и 7 ИЕ, при этом в вызывающем коде не придется каждый раз определять тип браузера.
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Sat Feb 28, 2009 3:07 am (спустя 5 часов 32 минуты; написано за 55 секунд)
   Post subject:
Reply with quote

Ну библиотека может еще выкачивать фильмы из Интернета и при запуске с определенными параметрами форматировать винчестер. Тогда не придется это вручную делать каждый раз. :-)
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Tue Jul 07, 2009 5:29 pm (спустя 4 месяца 7 дней 14 часов 22 минуты; написано за 8 секунд)
   Post subject:
Reply with quote

Вышла версия 2.0 библиотеки HTTP_StaticMerger. Теперь поддерживается цифровое подписывание URL склеенных файлов, а в случае несовпадения цифровой подписи выдается ошибка 404. Это особенно удобно, когда библиотека используется в связке с nginx и директивой proxy_store: теперь злоумышленник даже теоретически не сможет "зафлудить" временную директорию кэш-файлами.

dklab.ru/lib/HTTP_StaticMerger/
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Tue Jul 07, 2009 7:07 pm (спустя 1 час 38 минут; написано за 22 секунды)
   Post subject:
Reply with quote

Также дописал инструкцию по использованию HTTP_StaticMerger + nginx + gzip.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Thu Jul 09, 2009 2:44 pm (спустя 1 день 19 часов 37 минут; написано за 23 секунды)
   Post subject:
Reply with quote

version 2.03:
Bugfix: now you can pass FQDN (like example.com) to getHtml(). Don't care about the domain while calculating digital signature.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Mon Aug 03, 2009 8:56 pm (спустя 25 дней 6 часов 11 минут; написано за 40 секунд)
   Post subject:
Reply with quote

version 2.10:
URL compression support (to minimize merged URL length, see dklab.ru/lib/HTTP_StaticMerger/demo/test/HTTP_StaticMerger/)
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Thu Aug 06, 2009 7:26 pm (спустя 2 дня 22 часа 30 минут; написано за 29 секунд)
   Post subject:
Reply with quote

version 2.11:
avoid too long filenames while using base64 encoding (needed for nginx + proxy_store: it has bugs if filenames are too long).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Fri Aug 07, 2009 8:56 pm (спустя 1 день 1 час 29 минут; написано за 13 секунд)
   Post subject:
Reply with quote

version 2.20:
add signature after URL compression, not before, to deny URL falsification
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Wed Oct 07, 2009 12:38 am (спустя 1 месяц 30 дней 3 часа 42 минуты; написано за 8 секунд)
   Post subject:
Reply with quote

version 2.21:
forever Expires and Cache-Control headers for better browser caching (it's safe).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Wed Oct 07, 2009 1:02 am (спустя 23 минуты; написано за 21 секунду)
   Post subject:
Reply with quote

version 2.30:
change separator "--" to "!!", because "--" is not compatible with HTML comments and e.g. conflicts with <!--[if IE]>
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Thu Oct 15, 2009 12:34 pm (спустя 8 дней 11 часов 31 минуту; написано за 5 секунд)
   Post subject:
Reply with quote

version 2.31:
work-around for nginx bug: it treats "Expires" large than 0x7F000000 as "no-cache" and does not cache the merger results at all.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 414
   поощрить/наказать


PostPosted: Fri Jun 11, 2010 2:15 pm (спустя 7 месяцев 27 дней 1 час 41 минуту; написано за 2 минуты 15 секунд)
   Post subject:
Reply with quote

version 2.34:
* Code is moved from SVN to Git: github.com/DmitryKoterov/http_staticmerger
* If some of URIs to merge are specified absolutely (e.g. with http:// protocol), they
  are not included to the merged tag, but a separated tag is generated for each of them.
* In debug mode (noMerge argument) timestamps are added at the end of URIs.
Back to top
View user's profile Send private message Send e-mail
deMone
Участник форума



Joined: 03 May 2004
Posts: 90
Карма: 6
   поощрить/наказать

Location: из России

PostPosted: Sun Jul 25, 2010 3:21 am (спустя 1 месяц 13 дней 13 часов 5 минут; написано за 28 секунд)
   Post subject:
Reply with quote

В соединяемых файлах текущая версия библиотеки не обрабатывает относительные пути к картинкам (те, которые относительно файла CSS).

Багфикс:
Code (php): скопировать код в буфер обмена
    private function _processCss($data, $uri)
    {
        $data = preg_replace (www.php.net/preg_replace)('{/\* .*? \*/}xs', '', $data);

        // обрабатываем URL-ы к картинкам
        $this->_pagePath = pathinfo (www.php.net/pathinfo)($uri, PATHINFO_DIRNAME);

        // обрабатываем конструкции вида ": __ url(...)"
        $data = preg_replace_callback (www.php.net/preg_replace_callback)('#
                \: .*? url \s* \( \s* (["\']?) ([^"\'()]+) \1 \s* \)
        #sxi'
, array (www.php.net/array)($this, '_processImagesPath'), $data);

        // ... дальнейшее содержимое _processCSS()
    }

    public function _processImagesPath($m) {
        // for absolute paths or paths like "://www.site.com/style.css"
        if ($m[2]{0} == '/' or $m[2]{0} == ':') return $m[0];

        if (in_array (www.php.net/in_array)(strtok (www.php.net/strtok)($m[2], ':'), array (www.php.net/array)('http', 'https'))) return $m[0];

        return str_replace (www.php.net/str_replace)($m[2], $this->_pagePath . '/' . $m[2], $m[0]);
    }
Back to top
View user's profile Send private message Send e-mail
deMone
Участник форума



Joined: 03 May 2004
Posts: 90
Карма: 6
   поощрить/наказать

Location: из России

PostPosted: Sun Jul 25, 2010 3:35 am (спустя 14 минут; написано за 1 минуту 33 секунды)
   Post subject:
Reply with quote

Ну, а тем, кто хочет сжимать свой CSS подойдёт ещё и вот такая функция:
Code (php): скопировать код в буфер обмена
    public function _clearCSS($data) {
        $data = preg_replace (www.php.net/preg_replace)('#\s{2,}|\r|\n#i', '', $data);
        $data = preg_replace (www.php.net/preg_replace)('#([^0-9])0px#i', '${1}0', $data);
        $data = str_replace (www.php.net/str_replace)(array (www.php.net/array)('{ ', ' }', ': ', ';}'), array (www.php.net/array)('{', '}', ':', '}'), $data);
        return $data;
    }
Вызов её должен происходить внутри _processCSS в двух местах:
Code (php): скопировать код в буфер обмена
        if (false === strpos (www.php.net/strpos)($data, "@import")) {
            return $data; // заменить на return $this->_clearCSS($data);
        }
и
Code (php): скопировать код в буфер обмена
        return $result; //
 
Back to top
View user's profile Send private message Send e-mail
amixen
Участник форума



Joined: 04 Jul 2005
Posts: 32
Карма: 0
   поощрить/наказать


PostPosted: Thu Aug 26, 2010 9:40 pm (спустя 1 месяц 1 день 18 часов 4 минуты; написано за 37 секунд)
   Post subject:
Reply with quote

Большое спасибо, deMone !
deMone wrote:
В соединяемых файлах текущая версия библиотеки не обрабатывает относительные пути к картинкам (те, которые относительно файла CSS).
Багфикс:
очень помог Ваш фикс :-)
Back to top
View user's profile Send private message Send e-mail
deMone
Участник форума



Joined: 03 May 2004
Posts: 90
Карма: 6
   поощрить/наказать

Location: из России

PostPosted: Mon Oct 11, 2010 4:42 am (спустя 1 месяц 15 дней 7 часов 2 минуты; написано за 3 минуты 45 секунд)
   Post subject:
Reply with quote

Для разработчиков, использующих 1С-Битрикс также могу предложить следующее решение, которое забирает не только все скрипты и стили, добавленные вами, но также все скрипты и стили, выводимые панелью администратора Битрикса:
Code (php): скопировать код в буфер обмена
//
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/HTTP/StaticMerger.php';

function StartMergerScript() {
  global (www.php.net/global) $APPLICATION;

  $merger = new HTTP_StaticMerger('a-secret-and-constant-string');

  $css = $APPLICATION->sPath2css;
  foreach($css as $i => $file) $css[$i] = strtok (www.php.net/strtok)($file, '?');

  $scripts = $APPLICATION->arHeadScripts;

  // search for scripts in arHeadStrings
  $list = $APPLICATION->arHeadStrings;
  foreach($list as $i => $v) {
    if (substr (www.php.net/substr)($v, 0, 36) == '<script type="text/javascript" src="') {
      $scripts[] = strtok (www.php.net/strtok)(substr (www.php.net/substr)($v, 36), '"');
      unset (www.php.net/unset)($APPLICATION->arHeadStrings[$i]);
    }

    if (substr (www.php.net/substr)($v, 0, 13) == '<script src="') {
      $scripts[] = strtok (www.php.net/strtok)(substr (www.php.net/substr)($v, 13), '"');
      unset (www.php.net/unset)($APPLICATION->arHeadStrings[$i]);
    }
  }

  foreach($scripts as $i => $file) $scripts[$i] = strtok (www.php.net/strtok)($file, '?');
  $APPLICATION->arHeadScripts = $APPLICATION->sPath2css = array (www.php.net/array)();

  return $merger->getHTML('/merge.php?', $css) . $merger->getHTML('/merge.php?', $scripts);
}

//
$APPLICATION->AddBufferContent('StartMergerScript');

//
$APPLICATION->ShowHead();
Чтобы всё работало корректно, важно добавлять собственные скрипты и стили через $APPLICATION->AddHeadScript() и $APPLICATION->AddHeadString();
Back to top
View user's profile Send private message Send e-mail
mihdan
Заглянувший
Warnings: 1


Joined: 20 Jul 2009
Posts: 7
Карма: -2
   поощрить/наказать


PostPosted: Mon Dec 17, 2012 11:46 pm (спустя 2 года 2 месяца 6 дней 19 часов 3 минуты; написано за 9 секунд)
   Post subject:
Reply with quote

А файловый КЭШ не предусмотрен в классе?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML