Skip to content

Releases: neomjs/neo

list.Base: afterSetFocusIndex() honor the mounted state

21 Jan 18:34
Compare
Choose a tag to compare

form.field.ComboBox: when showing the picker, the list focus & selected index should be in sync

21 Jan 17:53
Compare
Choose a tag to compare

data.RecordFactory: performance boost for creating records

21 Jan 16:03
Compare
Choose a tag to compare

old version:
Screenshot 2025-01-19 at 15 25 04

new version:
Screenshot 2025-01-19 at 15 25 47

While it is definitely not "best practises" to create massive amounts of records inside your UI at once (you would pull ranges from a backend), a framework should handle it as fast as possible.

To get the numbers up this drastically, I needed to move the fields creation outside of the record constructor and into the class generation. The API for records is the same as before, however the internal structure how data gets stored did change.

For nested data, you can change specific leaf nodes without overriding other siblings (it will get merged):

record.set({user: {firstname: 'Tobias'}})

You can also still trigger bulk updates => multiple fields getting into the same update cycle:

record.set({user: {firstname: 'Tobias', lastname: 'Uhlig'}})

You can still use the shortcut around the set() API to change root level fields, but this can no longer work for nested fields directly. Examples:

record.country = 'Germany'; // Internal setter, will trigger a change event like before

// No longer supported!
record.annotations.selected = false; // this shortcut syntax did work in previous versions, but no longer matches the internal structure

// Instead use the API:
record.set({annotations: {selected: false}})

// In case you want a direct field access to trigger the field change event, you can also use this shortcut (outside the API):
record['annotations.selected'] = false;

Records now provide a JSON export:
Screenshot 2025-01-21 at 16 31 17

To see the editing inside an example app:
https://neomjs.com/examples/table/nestedRecordFields/index.html

Smarter vdom update aggregation for colliding updates

16 Jan 14:22
Compare
Choose a tag to compare

grid.View: added support for a column buffer range

14 Jan 19:21
Compare
Choose a tag to compare

collection.Base: performance improvement

14 Jan 14:49
Compare
Choose a tag to compare

required for safari, to no longer hit the end of the road:

Screenshot 2025-01-14 at 15 02 39

Buffered Data Grid with 5M cells example

14 Jan 13:43
Compare
Choose a tag to compare

Critical Rendering Paths for run-time updates

12 Jan 23:55
Compare
Choose a tag to compare

I am very excited on this one!

Screen.Recording.2025-01-13.at.00.23.51.mov

Optimising critical rendering paths

12 Jan 15:59
Compare
Choose a tag to compare

While neo.mjs is focussing on high performance apps, which often run inside envs with fast internet connections, it also should not ignore users with slow network connections.

When analysing the initial paintings inside throttled envs, I realised that it can happen that widgets try to get painted before their related CSS files got loaded. Please watch the 2 short (30s) videos so see how drastic this change is.

  1. Non-optimised critical rendering paths:
    https://youtu.be/pUPLUUeuxZo

  2. Optimised critical rendering paths:
    https://youtu.be/rwH1ATOgkyI

Enjoy the new version!

Buffered Grid - polishing for dist/production & slow connections

12 Jan 12:56
Compare
Choose a tag to compare