Вход

Просмотр полной версии : Как отключить compressor в 4.4+ и его последствия?


-=UncleByte=-
15.12.2010, 11:44
Недавно обновился на версию 4.4.4 с версии 4.3.8 и все ссылки на css и js моего шаблона приобрели вид /fileadmin/template/screen.css?1289786904 .
Подозреваю что это последствия работы compressor, хотя любой gzip в localconf.php отключен наглухо.
Такого вида "динамические" ссылки на тщательно вылизанный и пожатый мой собственный css категорически не устраивают хотя из-за того что вся статика заранее пожата gzip и отдается только через nginx, который ищет именно статически пожатые файлы, а такого вида ссылка вводит его в заблуждение и он заново жмет один и то же файл на лету.
Гугль ничего путного, за исключением правки класса pagerenderer, не посоветовал, поэтому обращаюсь тут к коллективному разуму.
Возможно ли как-то при помощи TS привести эти ссылки к прежнему виду без "динамической" составляющей?
Заранее признателен за любые советы.

Андрей Аксенов
16.12.2010, 11:55
Залезаем в папку с распакованным новым ядром typo3 (у меня это typo3_src-4.4.4). Видим файл NEWS.txt - читаем. Этот файл рекомендуется читать при каждом обновлении ядра системы!
Видим:

* All CSS and JS files in the TYPO3 Backend are compressed now. This
means that they are added up to a single file without unnecessary
whitespace. This will reduce the count of requests drastically, which
eventually leads to faster loading and better performance.
CAUTION: If compressionLevel is configured
($TYPO3_CONF_VARS[TYPO3_MODE]['compressionLevel'] = 1 [1-9 for compression
level or TRUE for "enabled"]) the files will be served with gzip compression.
Be sure to enable / uncomment the needed configuration in your .htaccess file,
also found in misc/advanced.htaccess.

<FilesMatch "\.js\.gzip$">
AddType "text/javascript" .gzip
</FilesMatch>
<FilesMatch "\.css\.gzip$">
AddType "text/css" .gzip
</FilesMatch>
AddEncoding gzip .gzip

IMPORTANT: If you have any trouble accessing the Backend after upgrading
to TYPO3 4.4, make sure to clear the typo3temp/ directory manually or through
the TYPO3 install tool.
Что касается добавления ?1289786904 к файлам, то читаем далее:
* Automatic version-numbers of CSS and JS files to avoid caching problems:
This feature provides automatic numbering of CSS and JS files using the
files modified timestamp. This way the file reference will change when a
CSS or JS files is changed, and by this the browser and proxy will re-cache
the file. This feature can be configured to include the timestamp within the
filename (before .ext) or as a parameter to the file (default).
If versioning is done directly inside the filename (by setting
$TYPO3_CONF_VARS[BE][versionNumberInFilename] = TRUE) you need the
following line as the first rewrite rule in .htaccess:

# Rule for versioned static files (see $TYPO3_CONF_VARS[BE][versionNumberInFilename])
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ $1.$3 [L]

IMPORTANT: This rule has to be the very first rule to work properly,
at least it has to be placed before the "^typo3..." rewrite rule
Developers can use this API for versioning of files in their own backend mods,
by calling t3lib_div::createVersionNumberedFilename or using the core API
for including files in the page renderer class.
Из всего этого следует, что сейчас поджимаются css и JS файлы внутреннего интерфейса.
К этим же файлам для внешнего интерфейса добавляется временной шаблон во избежание проблем с кешированием. То есть, если время сохранения файла изменилось на сервере, то и добавляемое число также меняется, при этом содержимое самого файла остается прежним. Это позволяет механизмам кеширования правильно обрабатывать измененные файлы - их название поменялось... Как-то так.

-=UncleByte=-
16.12.2010, 14:29
Отдельно отмечу что выдаются с этим самым timestamp выдаются мои собственные один раз и навсегда написанные css и js, а вот как раз стили того же CSC выдаются без timestamp. Точно так же хочу заметить что мои стили уже запакованы прекрасно работающей под любой *nix системой командой find /www -type f -name '*.css' -exec gzip -9 '{}' \; и мне соверщенно не нужно сжимать их каждый раз на лету gzip с участием nginx. Собственно потому и компилился nginx с gzip_static модулем.
Повторю вопрос - как эту "фичу" отключить не залезая в код ядра?

Valery Romanchev
16.12.2010, 17:18
В файле t3lib/config_default.php
написано про $TYPO3_CONF_VARS[FE][versionNumberInFilename]


'versionNumberInFilename' => 'querystring', // String. Allows to automatically include a version number (timestamp of the file) to referred CSS and JS filenames on the rendered page. This will make browsers and proxies reload the files if they change (thus avoiding caching issues). Set to 'embed' will have the timestamp embedded in the filename, ie. filename.1269312081.js. IMPORTANT: 'embed' requires this .htaccess rule to work: RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif)$ $1.$3 [L]. Set to 'querystring' (default setting) to append the version number as a query parameter (doesn't require mod_rewrite). Set to '' will turn this functionality off (behaves like TYPO3 < v4.4).


т.е. надо поставить в localconf.php
$TYPO3_CONF_VARS['FE']['versionNumberInFilename'] = '';

-=UncleByte=-
16.12.2010, 23:59
Так это просто поменяет отображение этих самых имен с вида file.js?timestamp на file.timestamp.js и это будет касаться только динамически создаваемых при генерации страницы самой typo3 стилей и скриптов.
Меня же волнует вопрос почему он этот самый querystring добавляет к моим файлам, которые, подчеркиваю, не меняются вовсе, и как эту ненужность отключить.

Valery Romanchev
17.12.2010, 12:02
Так это просто поменяет отображение этих самых имен с вида file.js?timestamp на file.timestamp.js и это будет касаться только динамически создаваемых при генерации страницы самой typo3 стилей и скриптов.

нет, будет file.js и file.css

-=UncleByte=-
17.12.2010, 12:24
Попробовал и включить и выключить этот параметр в InstallTool - влияет исключительно на отображение админки. Для фронтенда в обоих случаях выводит одно и то же:<link rel="stylesheet" type="text/css" href="typo3temp/stylesheet_670d0f71b2.css?1291940230" media="all" />
<link rel="stylesheet" type="text/css" href="fileadmin/tmpl/screen.css?1292374803" media="screen" />
<link rel="stylesheet" type="text/css" href="fileadmin/tmpl/print.css?1163606366" media="print" />
<script src="typo3temp/javascript_93077bb238.js?1291906354" type="text/javascript"></script>

Похоже действительно придется лезть в ядро и отключать там.

Андрей Аксенов
17.12.2010, 12:26
Ну если переключить на file.timestamp.js, а в настройках поставить:
$TYPO3_CONF_VARS['FE']['versionNumberInFilename'] = '';.
То к названию файла будет прибавлятся это самое ''... То есть ничего...
А что касается ядра, то где и как, надо бы почитать в релизе, или в фордж, там наверняка есть, просто со временем сейчас туго...

-=UncleByte=-
17.12.2010, 12:51
Именно так и стоит в последнем варианте, результат тот же.
Если переключить в единицу, то ломается вид админки, потому что не прописана добавка в htaccess, а для фронтенда все остается по-прежнему.

-=UncleByte=-
17.12.2010, 20:36
Исправляюсь - есть два параметра VersionNumberInFilename - один для бэкенда, второй для фронтенда. Соответственно если менять параметр для фронтенда как указал Валерий все работает как надо.
Вопрос решен. Спасибо.