Re-introduce postAttach

index_get seems to be ~1000x slower than setting the value directly on the
v8.Object. There's a lot of information on "v8 fast properties", and values
set directly on objects seem to be heavily optimized. Still, I can't imagine
indexed properties are always _that_ slow, so I must be doing something wrong.
Still, for now, this brings back the original functionality / behavior / perf.

Introduce the ability for Zig functions to take a Env.JsObject parameter. While
this isn't currently being used, it aligns with bringing back the postAttach /
JSObject functionality in main.

Moved function *State to the end of the function list (making it consistent with
getters and setters). The optional Env.JsObject parameter comes after the
optional state.

Removed some uncessary arena deinits from a few webapis.
This commit is contained in:
Karl Seguin
2025-04-17 09:26:37 +08:00
parent e3638053d0
commit f4e8bb6c66
24 changed files with 201 additions and 157 deletions

View File

@@ -226,8 +226,8 @@ pub const Element = struct {
pub fn _getElementsByTagName(
self: *parser.Element,
state: *SessionState,
tag_name: []const u8,
state: *SessionState,
) !collection.HTMLCollection {
return try collection.HTMLCollectionByTagName(
state.arena,
@@ -239,8 +239,8 @@ pub const Element = struct {
pub fn _getElementsByClassName(
self: *parser.Element,
state: *SessionState,
classNames: []const u8,
state: *SessionState,
) !collection.HTMLCollection {
return try collection.HTMLCollectionByClassName(
state.arena,
@@ -306,7 +306,7 @@ pub const Element = struct {
}
}
pub fn _querySelector(self: *parser.Element, state: *SessionState, selector: []const u8) !?Union {
pub fn _querySelector(self: *parser.Element, selector: []const u8, state: *SessionState) !?Union {
if (selector.len == 0) return null;
const n = try css.querySelector(state.arena, parser.elementToNode(self), selector);
@@ -316,7 +316,7 @@ pub const Element = struct {
return try toInterface(parser.nodeToElement(n.?));
}
pub fn _querySelectorAll(self: *parser.Element, state: *SessionState, selector: []const u8) !NodeList {
pub fn _querySelectorAll(self: *parser.Element, selector: []const u8, state: *SessionState) !NodeList {
return css.querySelectorAll(state.arena, parser.elementToNode(self), selector);
}