Single-pass aser_slot for HTMX path + kernel eval timing + stable hash
Eliminated double-aser for HTMX requests: build OOB wrapper AST (~shared:layout/oob-sx :content wrapped_ast) and aser_slot in ONE pass — same pattern as the full-page path. Halves aser_slot calls. Added kernel-side timing to stderr: [aser-slot] eval=3.6s io_flush=0.0s batched=3 result=22235 chars Results show batch IO works (io_flush=0.0s for 3 highlight calls) and the bottleneck is pure CEK evaluation time, not IO. Performance after single-pass fix: Home: 0.7s eval (was 2.2s total) Reactive: 3.6s eval (was 6.8s total) Language: 1.1s eval (was 18.9s total — double-aser eliminated) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
(executables
|
||||
(names run_tests debug_set sx_server)
|
||||
(libraries sx))
|
||||
(libraries sx unix))
|
||||
|
||||
@@ -736,15 +736,21 @@ let dispatch env cmd =
|
||||
let call = List [Symbol "aser";
|
||||
List [Symbol "quote"; expr];
|
||||
Env env] in
|
||||
let t0 = Unix.gettimeofday () in
|
||||
let result = Sx_ref.eval_expr call (Env env) in
|
||||
let t1 = Unix.gettimeofday () in
|
||||
io_batch_mode := false;
|
||||
Hashtbl.remove env.bindings "expand-components?";
|
||||
let result_str = match result with
|
||||
| String s | SxExpr s -> s
|
||||
| _ -> serialize_value result
|
||||
in
|
||||
let n_batched = List.length !io_queue in
|
||||
(* Flush batched IO: send requests, receive responses, replace placeholders *)
|
||||
let final = flush_batched_io result_str in
|
||||
let t2 = Unix.gettimeofday () in
|
||||
Printf.eprintf "[aser-slot] eval=%.1fs io_flush=%.1fs batched=%d result=%d chars\n%!"
|
||||
(t1 -. t0) (t2 -. t1) n_batched (String.length final);
|
||||
send (Printf.sprintf "(ok-raw %s)" final)
|
||||
with
|
||||
| Eval_error msg ->
|
||||
|
||||
Reference in New Issue
Block a user