From b28ac8ca19c589f20d2b2c4ab9ed0707dcdc80ef Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Wed, 24 Dec 2025 12:37:47 +0300 Subject: [PATCH 1/2] run microtasks after each script execution This don't change the behavior for async and deferred scripts. just run microtasks after a script execution --- src/browser/ScriptManager.zig | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/browser/ScriptManager.zig b/src/browser/ScriptManager.zig index 5f55952f..945738e2 100644 --- a/src/browser/ScriptManager.zig +++ b/src/browser/ScriptManager.zig @@ -38,7 +38,7 @@ const ScriptManager = @This(); page: *Page, -// used to prevent recursive evalutaion +// used to prevent recursive evaluation is_evaluating: bool, // Only once this is true can deferred scripts be run @@ -801,7 +801,8 @@ pub const Script = struct { log.debug(.browser, "executed script", .{ .src = url, .success = success, .on_load = script_element._on_load != null }); } - defer page.tick(); + // We should run microtasks even if script execution fails. + defer page.js.runMicrotasks(); if (success) { self.executeCallback("load", script_element._on_load, page); From abc89b7eae5e5a505699e9534187e5ea5476ac80 Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Mon, 29 Dec 2025 11:04:10 +0300 Subject: [PATCH 2/2] run tasks after microtasks Also removes `page.tick`. --- src/browser/Page.zig | 10 ---------- src/browser/ScriptManager.zig | 9 +++++++-- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/browser/Page.zig b/src/browser/Page.zig index fd42b083..b646cb78 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -947,16 +947,6 @@ fn printWaitAnalysis(self: *Page) void { } } -pub fn tick(self: *Page) void { - if (comptime IS_DEBUG) { - log.debug(.page, "tick", .{}); - } - _ = self.scheduler.run() catch |err| { - log.err(.page, "tick", .{ .err = err }); - }; - self.js.runMicrotasks(); -} - pub fn isGoingAway(self: *const Page) bool { return self._queued_navigation != null; } diff --git a/src/browser/ScriptManager.zig b/src/browser/ScriptManager.zig index 945738e2..2b1f099c 100644 --- a/src/browser/ScriptManager.zig +++ b/src/browser/ScriptManager.zig @@ -801,8 +801,13 @@ pub const Script = struct { log.debug(.browser, "executed script", .{ .src = url, .success = success, .on_load = script_element._on_load != null }); } - // We should run microtasks even if script execution fails. - defer page.js.runMicrotasks(); + defer { + // We should run microtasks even if script execution fails. + page.js.runMicrotasks(); + _ = page.scheduler.run() catch |err| { + log.err(.page, "scheduler", .{ .err = err }); + }; + } if (success) { self.executeCallback("load", script_element._on_load, page);