2003-01-07 16:57:44 UTC

Если вы просто помешаны на оптимизации и хотите убрать всё лишнее из HTML — ненужные переводы строк, кавычки в некоторых атрибутах тегов, вашему вниманию предлагается следующий метод, делающий это за вас.

Такую оптимизацию очень удобно делать в методе @postrocess класса MAIN.

#######
@postprocess[buffer][attr_string;code;code_num;replace]
# вытаскиваем содержимое тегов pre, script в таблицу $code
$code[^buffer.match[<(pre|script)(.*?)>(.+?)</\1>][ig]]

# меняем теги <pre>...</pre> на <pre>1</pre>, <pre>2</pre> ... и <script> тоже
$code_num(1)
# код замены
$replace{<^match.1.lower[]$match.2>$code_num</^match.1.lower[]>^code_num.inc(1)} 
$buffer[
	^buffer.match[<(pre|script)(.*?)>(.+?)</\1>][ig]{$replace}
]

$buffer[^trim[$buffer]]

# attr="*" меняем на attr=*
# строка атрибутов у которых надо убрать кавычки
$attr_string[class|align|width|bgcolor|border|cellpadding|cellspacing]
$buffer[^buffer.match[($attr_string)="(.+?)"][ig]{$match.1=$match.2}]

# убираем лишние, но не все!, переводы строк и табуляторы
$buffer[^buffer.match[(\s{2,})][g]{^match.1.left(1)}]

# вывод результата,
# возвращаем теги <pre>, <script> в первоначальное состояние

# код замены
$replace{<${match.1}$match.2>^taint[as-is][$code.3]</$match.1>^code.offset(1)}
$result[^buffer.match[<(pre|script)(.*?)>(\d+)</\1>][g]{$replace}]

#######
# Copyright Michael Petrushin (http://misha.design.ru/)
# обрезает начальные и конечные символы char. 
# если char не задан - то обрезает начальные и 
# конечные пробельные символы
@trim[str;char][chr;tbl]
^if(def $str){
	$chr[^if(def $char){$char}{\s}]
	$str[^str.match[^^$chr*][]{}]
#	$result[^str.match[$chr+^$][]{}]
#	эта замена существенно быстрее на больших текстах
	$tbl[^str.match[^^(.*[^^$chr])$chr*^$]]
	$result[$tbl.1]
}{
	$result[]
}

Определите этот метод в нужной странице или если вы хотите обрабатывать все страницы каталога и подкаталогов ниже или всего сайта то в auto.p каталога или в корне сайта соответственно.

2003-01-07 16:57:44 UTC parser performance snippet web