micro-optimization in (web server)
authorAndy Wingo <wingo@pobox.com>
Tue, 6 Mar 2012 21:22:31 +0000 (22:22 +0100)
committerAndy Wingo <wingo@pobox.com>
Tue, 6 Mar 2012 21:22:31 +0000 (22:22 +0100)
* module/web/server.scm (extend-response): Micro-optimize to not mutate
  data, and to copy as little as possible.

module/web/server.scm

index 42887e6..fbd5d95 100644 (file)
@@ -198,11 +198,13 @@ values."
                                          (display str port)))))
 
 (define (extend-response r k v . additional)
+  (define (extend-alist alist k v)
+    (let ((pair (assq k alist)))
+      (acons k v (if pair (delq pair alist) alist))))
   (let ((r (build-response #:version (response-version r)
                            #:code (response-code r)
                            #:headers
-                           (assoc-set! (copy-tree (response-headers r))
-                                       k v)
+                           (extend-alist (response-headers r) k v)
                            #:port (response-port r))))
     (if (null? additional)
         r