From 5931f69abadce1d5c69133769912aef035972642 Mon Sep 17 00:00:00 2001 From: Eckehard Date: Wed, 7 Jun 2023 00:10:35 +0200 Subject: [PATCH 1/4] limit the state updates to a maximum updateRate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Van still provides the tools to limit the update rate. ```JS let {updateRate} = van updateRate(100) ``` This set´s the update rate to 100ms. state changes are delayed by up to 100 ms, before they are propagated to the DOM. If multiple changes are applied withi this time, only the last is updating the DOM. --- src/van.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/van.js b/src/van.js index f25b9535..29ed76ed 100644 --- a/src/van.js +++ b/src/van.js @@ -18,6 +18,7 @@ function end(cnt = 1) { } // This file consistently uses `let` keyword instead of `const` for reducing the bundle size. +var updateRate = 0 // Initial update timeout 0 ms // Aliasing some builtin symbols to reduce the bundle size. let Obj = Object, _undefined, protoOf = Object.getPrototypeOf @@ -35,7 +36,7 @@ let stateProto = { let s = this, curV = s._val if (v !== curV) { if (s.oldVal === curV) - changedStates = addAndScheduleOnFirst(changedStates, s, updateDoms) + changedStates = addAndScheduleOnFirst(changedStates, s, updateDoms, updateRate) else if (v === s.oldVal) changedStates.delete(s) s._val = v @@ -110,5 +111,5 @@ let bind = (...deps) => { } return binding.dom } - -export default {add, tags, state, bind, begin, end} +let updateRate = (t) => updateRate = t +export default {add, tags, state, bind, begin, end, updateRate} From a193604bea0ec340e8f7f09dd26b690bd7a3fe5e Mon Sep 17 00:00:00 2001 From: Eckehard Date: Wed, 7 Jun 2023 22:00:44 +0200 Subject: [PATCH 2/4] Revert "limit the state updates to a maximum updateRate" This reverts commit 5931f69abadce1d5c69133769912aef035972642. --- src/van.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/van.js b/src/van.js index 29ed76ed..f25b9535 100644 --- a/src/van.js +++ b/src/van.js @@ -18,7 +18,6 @@ function end(cnt = 1) { } // This file consistently uses `let` keyword instead of `const` for reducing the bundle size. -var updateRate = 0 // Initial update timeout 0 ms // Aliasing some builtin symbols to reduce the bundle size. let Obj = Object, _undefined, protoOf = Object.getPrototypeOf @@ -36,7 +35,7 @@ let stateProto = { let s = this, curV = s._val if (v !== curV) { if (s.oldVal === curV) - changedStates = addAndScheduleOnFirst(changedStates, s, updateDoms, updateRate) + changedStates = addAndScheduleOnFirst(changedStates, s, updateDoms) else if (v === s.oldVal) changedStates.delete(s) s._val = v @@ -111,5 +110,5 @@ let bind = (...deps) => { } return binding.dom } -let updateRate = (t) => updateRate = t -export default {add, tags, state, bind, begin, end, updateRate} + +export default {add, tags, state, bind, begin, end} From 0b7221d1a0c9a234fe428481c3f72c2389e4181b Mon Sep 17 00:00:00 2001 From: Eckehard Date: Wed, 7 Jun 2023 22:01:00 +0200 Subject: [PATCH 3/4] Revert "add Auto-Append feature to van.js" This reverts commit 944ae80777b5ebaf88d55f65d253f77ca10365cf. --- src/van.js | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/src/van.js b/src/van.js index f25b9535..bd98435f 100644 --- a/src/van.js +++ b/src/van.js @@ -1,22 +1,3 @@ -// Auto-Append feature -let _base; // Global element stores current insert position. If empty, elements are added at the end of document. -let _baseStack = []; // Stack for storing _base positions - -// set a new basepoint for append, save previous on baseStack -function begin(ID) { - _baseStack.push(_base);// Save old base - if (_baseStack.length > 100) throw new Error("_baseStackOverflow in begin()"); - - _base = (typeof (ID) === 'string') ? document.getElementById(ID) : ID - return _base -} -// restore last base, cnt: call multiple times -function end(cnt = 1) { - if (cnt > 1) end(cnt - 1) - if (_baseStack.length <= 0) throw new Error("_baseStack empty in end()") - return (_base = _baseStack.pop()) // restore old stack -} - // This file consistently uses `let` keyword instead of `const` for reducing the bundle size. // Aliasing some builtin symbols to reduce the bundle size. @@ -74,9 +55,7 @@ let tags = new Proxy((name, ...args) => { else if (protoOf(v) === objProto) bind(...v["deps"], (...deps) => (setter(v["f"](...deps)), dom)) else setter(v) } - let r = add(dom, ...children) - if (_base) add(_base, r) // auto-Append, if base not empty - return r + return add(dom, ...children) }, {get: (tag, name) => tag.bind(_undefined, name)}) let filterBindings = s => s.bindings = s.bindings.filter(b => b.dom?.isConnected) @@ -111,4 +90,4 @@ let bind = (...deps) => { return binding.dom } -export default {add, tags, state, bind, begin, end} +export default {add, tags, state, bind} From a8d340faa507694a68a4f76e654fcf6f14a6e5f0 Mon Sep 17 00:00:00 2001 From: Eckehard Date: Thu, 8 Jun 2023 17:55:22 +0200 Subject: [PATCH 4/4] Branch commit --- src/van.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/van.js b/src/van.js index bd98435f..5eaa5a0e 100644 --- a/src/van.js +++ b/src/van.js @@ -6,7 +6,7 @@ let Obj = Object, _undefined, protoOf = Object.getPrototypeOf let addAndScheduleOnFirst = (set, s, func, waitMs) => (set ?? (setTimeout(func, waitMs), new Set)).add(s) -let changedStates +let changedStates, ur let stateProto = { get "val"() { return this._val }, @@ -16,7 +16,7 @@ let stateProto = { let s = this, curV = s._val if (v !== curV) { if (s.oldVal === curV) - changedStates = addAndScheduleOnFirst(changedStates, s, updateDoms) + changedStates = addAndScheduleOnFirst(changedStates, s, updateDoms, ur) else if (v === s.oldVal) changedStates.delete(s) s._val = v @@ -89,5 +89,5 @@ let bind = (...deps) => { } return binding.dom } - -export default {add, tags, state, bind} +let rate = (ms) => ur = ms +export default {add, tags, state, bind, rate}