08.07.2018 06:03:03 pm
Недавно я "мучил" функцию для сжатия CSS (Сжатие CSS кода в phpBB), сегодня я мучился с функцией для сжатия JS, самое трудно мне далось - это удаление комментариев из кода, "запыхался" с этим... Немного запутался с удалением лишних пробелов, но, думаю, со временем доведу до ума.
Значит, открываем: "phpbb/template/assets_bag.php", находим функцию "get_scripts_content" и полностью ее заменяем на:
Готово. Теперь, рядом с некоторыми JS файлами будут созданы их сжатые копии и будут подключены к документу.
Наверняка, вы скажите, что это:
Не есть хоро, мол можно регулярным выражение сделать тоже самое, будет красивее и кода раза в четыре меньше. Я согласен с этим, но не смог я написать регулярное выражение, чтобы оно не удаляло то, чего удалять нельзя.
После обновления движка, в случае замены всех файлов, правку компрессора придется повторить.
Будьте внимательны, функция сыровата.
Значит, открываем: "phpbb/template/assets_bag.php", находим функцию "get_scripts_content" и полностью ее заменяем на:
public function get_scripts_content()
{
$output = '';
foreach ($this->scripts as $script)
{
$press_file = $script->get_url();
if (strpos($press_file, 'min') === false)
{
$press_file = str_replace('.js', '_press.js', $press_file);
$file = explode('?', $press_file);
if (!file_exists($file[0]))
{
$url_js = explode('?', $script->get_url());
if (strpos($url_js[0], '..') !== false)
{
$url_js[0] = str_replace('../', '', $url_js[0]);
$file[0] = str_replace('../', '', $file[0]);
}
$code_js = file_get_contents($url_js[0]);
$code_js = preg_replace('/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\|\'|\")\/\/.*))/', '', $code_js);
$code_js = str_replace(array("\n", "\t"), ' ', $code_js);
$code_js = preg_replace('~ {2,}~', ' ', $code_js);
$code_js = str_replace(
array('if (', ' +', '+ ', '{ ', ' {', '} ', ' }', '= ', ' =', '| ', ' |', '- ', ' -', ': ', ' :', '; ', '* ', ' *', '&& ', ' &&', '< ', ' <', '> ', ' >', '? ', ' ?', '/ ', ' /'),
array('if(', '+', '+', '{', '{', '}', '}', '=', '=', '|', '|', '-', '-', ':', ':', ';', '*', '*', '&&', '&&', '<', '<', '>', '>', '?', '?', '/', '/'),
$code_js);
$fp = fopen($file[0], 'w');
fwrite($fp, $code_js);
fclose($fp);
}
}
$output .= '<script type="text/javascript" src="' . $press_file . '"></script>' . "\n";
}
return $output;
}
Готово. Теперь, рядом с некоторыми JS файлами будут созданы их сжатые копии и будут подключены к документу.
Наверняка, вы скажите, что это:
$code_js = str_replace(
array('if (', ' +', '+ ', '{ ', ' {', '} ', ' }', '= ', ' =', '| ', ' |', '- ', ' -', ': ', ' :', '; ', '* ', ' *', '&& ', ' &&', '< ', ' <', '> ', ' >', '? ', ' ?', '/ ', ' /'),
array('if(', '+', '+', '{', '{', '}', '}', '=', '=', '|', '|', '-', '-', ':', ':', ';', '*', '*', '&&', '&&', '<', '<', '>', '>', '?', '?', '/', '/'),
$code_js);
Не есть хоро, мол можно регулярным выражение сделать тоже самое, будет красивее и кода раза в четыре меньше. Я согласен с этим, но не смог я написать регулярное выражение, чтобы оно не удаляло то, чего удалять нельзя.
После обновления движка, в случае замены всех файлов, правку компрессора придется повторить.
Будьте внимательны, функция сыровата.
- Жалоба