Skip to content

Commit

Permalink
Improvements for Web Components
Browse files Browse the repository at this point in the history
Improvements that allow applications with Web Components to run with a lower overhead.
  • Loading branch information
marschall committed Jul 11, 2024
1 parent 44e5bb7 commit 9078882
Show file tree
Hide file tree
Showing 29 changed files with 163 additions and 2 deletions.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
private
createCache
^ WASingleElementCache new
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
testing
testClear
cache at: 1 put: 'one'.
cache clear.
self assert: (cache at: 1 ifAbsent: [ 'two' ]) = 'two'.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
testing
testKeyAtValue
cache at: 1 put: 'one'.
self assert: (cache keyAtValue: 'one' ifAbsent: [ 2 ]) = 1.
self assert: (cache keyAtValue: 'two' ifAbsent: [ 2 ]) = 2.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
testing
testKeysAndValuesDo
| reference readBack |
reference := Dictionary new.

cache at: 1 put: 'one'.
reference at: 1 put: 'one'.

readBack := Dictionary new.
cache keysAndValuesDo: [ :key :value |
readBack at: key put: value ].

self assert: readBack = reference
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
testing
testSize
self assert: cache size = 0.
cache at: 1 put: 'one'.
self assert: cache size = 1.
cache at: 2 put: 'two'.
self assert: cache size = 1.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
testing
testStore
| generator |
generator := WAPrecomputedKeyGenerator keys: #(1 2 3).
WAKeyGenerator
use: generator
during: [
self assert: (cache store: 'key1') = 1.
self assert: (cache store: 'key2') = 2.
self assert: (cache store: 'key3') = 3 ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "",
"super" : "WACacheTest",
"category" : "Seaside-Tests-WebComponents",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "WASingleElementCacheTest",
"type" : "normal"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
I am a session that stores only a single continuation. I am usesful for cases where state snapshots are not used.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
initialization
createContinuationCache
^ WASingleElementCache new

Check warning on line 3 in repository/Seaside-WebComponents-Core.package/WASingleContinuationSession.class/instance/createContinuationCache.st

View check run for this annotation

Codecov / codecov/patch

repository/Seaside-WebComponents-Core.package/WASingleContinuationSession.class/instance/createContinuationCache.st#L1-L3

Added lines #L1 - L3 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "xxx 7/11/2024 13:25",
"super" : "WASession",
"category" : "Seaside-WebComponents-Core",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "WASingleContinuationSession",
"type" : "normal"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
I am a cache that contains at most one element.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
accessing
at: aKey ifAbsent: aBlock
^ key = aKey
ifTrue: [ value ]
ifFalse: [ aBlock value ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
putting
at: aKey put: anObject
key := aKey.
value := anObject.
^ anObject
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
public
clear
key := nil.
value := nil
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
accessing
keyAtValue: anObject ifAbsent: aBlock
^ value = anObject
ifTrue: [ key ]
ifFalse: [ aBlock value ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
enumerating
keysAndValuesDo: aTwoArgumentBlock
key isNil ifFalse: [
aTwoArgumentBlock value: key value: value ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
removing
remove: anObject
value = anObject ifTrue: [
key := nil.
value := nil ]

Check warning on line 5 in repository/Seaside-WebComponents-Core.package/WASingleElementCache.class/instance/remove..st

View check run for this annotation

Codecov / codecov/patch

repository/Seaside-WebComponents-Core.package/WASingleElementCache.class/instance/remove..st#L1-L5

Added lines #L1 - L5 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
accessing
size
^ key isNil
ifTrue: [ 0 ]
ifFalse: [ 1 ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
putting
store: anObject
key := WAKeyGenerator current keyOfLength: self keySize.
value := anObject.
^ key
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"commentStamp" : "xxx 7/11/2024 10:46",
"super" : "WACache",
"category" : "Seaside-WebComponents-Core",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [
"key",
"value"
],
"name" : "WASingleElementCache",
"type" : "normal"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
I am a special action continuation with optimizations for web components.

Since web components have no back button and a full page reload results in an entire new page I perform the following optimizations.

- I do not redirect.
- I do not capture the state.
- I do not restore the state.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
processing
basicPerformAction
super basicPerformAction.
self renderContext callbacks handle: self requestContext

Check warning on line 4 in repository/Seaside-WebComponents-Core.package/WAWebComponentActionContinuation.class/instance/basicPerformAction.st

View check run for this annotation

Codecov / codecov/patch

repository/Seaside-WebComponents-Core.package/WAWebComponentActionContinuation.class/instance/basicPerformAction.st#L1-L4

Added lines #L1 - L4 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
processing
continue
"do not capture state"
self createRenderContinuation handle: self requestContext

Check warning on line 4 in repository/Seaside-WebComponents-Core.package/WAWebComponentActionContinuation.class/instance/continue.st

View check run for this annotation

Codecov / codecov/patch

repository/Seaside-WebComponents-Core.package/WAWebComponentActionContinuation.class/instance/continue.st#L1-L4

Added lines #L1 - L4 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
handling
handle: aRequestContext
"don't restore states"
self withUnregisteredHandlerDo: [ super handle: aRequestContext ]

Check warning on line 4 in repository/Seaside-WebComponents-Core.package/WAWebComponentActionContinuation.class/instance/handle..st

View check run for this annotation

Codecov / codecov/patch

repository/Seaside-WebComponents-Core.package/WAWebComponentActionContinuation.class/instance/handle..st#L1-L4

Added lines #L1 - L4 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
public
jumpToAnchor: aString
"Intentionally empty for compatibility with WACallbackProcessingActionContinuation"

Check warning on line 3 in repository/Seaside-WebComponents-Core.package/WAWebComponentActionContinuation.class/instance/jumpToAnchor..st

View check run for this annotation

Codecov / codecov/patch

repository/Seaside-WebComponents-Core.package/WAWebComponentActionContinuation.class/instance/jumpToAnchor..st#L1-L3

Added lines #L1 - L3 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
private
shouldRedirect
^ false

Check warning on line 3 in repository/Seaside-WebComponents-Core.package/WAWebComponentActionContinuation.class/instance/shouldRedirect.st

View check run for this annotation

Codecov / codecov/patch

repository/Seaside-WebComponents-Core.package/WAWebComponentActionContinuation.class/instance/shouldRedirect.st#L1-L3

Added lines #L1 - L3 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"commentStamp" : "xxx 7/11/2024 13:24",
"super" : "WAActionPhaseContinuation",
"category" : "Seaside-WebComponents-Core",
"classinstvars" : [ ],
"pools" : [ ],
"classvars" : [ ],
"instvars" : [ ],
"name" : "WAWebComponentActionContinuation",
"type" : "normal"
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,8 @@ initialize
"register such that we do not have the developer tools"
application := WAAdmin register: WAApplication at: 'examples/headless-counter' in: WAAdmin defaultDispatcher.
application configuration addParent: WARenderLoopConfiguration instance.
application rootClass: self.
application preferenceAt: #renderPhaseContinuationClass put: WAFragmentRenderPhaseContinuation
application
rootClass: self;
sessionClass: WASingleContinuationSession;
preferenceAt: #renderPhaseContinuationClass put: WAFragmentRenderPhaseContinuation;
preferenceAt: #actionPhaseContinuationClass put: WAWebComponentActionContinuation

0 comments on commit 9078882

Please sign in to comment.