mirror of
https://github.com/nginx/nginx.git
synced 2025-06-12 13:42:55 +08:00
speed up ngx_http_charset_recode() for 25%: google-perftools reported
that CPU usage of charset body filter has decreased from 7.5% to 5.5% if gzipping is disabled
This commit is contained in:
parent
70d0961658
commit
430db103f6
@ -561,25 +561,33 @@ ngx_http_charset_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
|||||||
static ngx_uint_t
|
static ngx_uint_t
|
||||||
ngx_http_charset_recode(ngx_buf_t *b, u_char *table)
|
ngx_http_charset_recode(ngx_buf_t *b, u_char *table)
|
||||||
{
|
{
|
||||||
u_char *p;
|
u_char *p, *last;
|
||||||
|
|
||||||
for (p = b->pos; p < b->last; p++) {
|
last = b->last;
|
||||||
|
|
||||||
if (*p == table[*p]) {
|
for (p = b->pos; p < last; p++) {
|
||||||
continue;
|
|
||||||
|
if (*p != table[*p]) {
|
||||||
|
goto recode;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (p < b->last) {
|
|
||||||
*p = table[*p];
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
b->in_file = 0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
recode:
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (*p != table[*p]) {
|
||||||
|
*p = table[*p];
|
||||||
|
}
|
||||||
|
|
||||||
|
p++;
|
||||||
|
|
||||||
|
} while (p < last);
|
||||||
|
|
||||||
|
b->in_file = 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user