]> git.kaiwu.me - nginx.git/commitdiff
speed up ngx_http_charset_recode() for 25%: google-perftools reported
authorIgor Sysoev <igor@sysoev.ru>
Sun, 16 Mar 2008 16:52:15 +0000 (16:52 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Sun, 16 Mar 2008 16:52:15 +0000 (16:52 +0000)
that CPU usage of charset body filter has decreased from 7.5% to 5.5%
if gzipping is disabled

src/http/modules/ngx_http_charset_filter_module.c

index f7d9906a86b206b2e6b5a56cf6ad18707dd055c6..850e64e759050e950624109885af1faaebc19c11 100644 (file)
@@ -561,25 +561,33 @@ ngx_http_charset_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
 static ngx_uint_t
 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]) {
-            continue;
+    for (p = b->pos; p < last; p++) {
+
+        if (*p != table[*p]) {
+            goto recode;
         }
+    }
+
+    return 0;
 
-        while (p < b->last) {
+recode:
+
+    do {
+        if (*p != table[*p]) {
             *p = table[*p];
-            p++;
         }
 
-        b->in_file = 0;
+        p++;
 
-        return 1;
-    }
+    } while (p < last);
 
-    return 0;
+    b->in_file = 0;
+
+    return 1;
 }