Project

General

Profile

Feature #7986

Consider optimizing updates by only changing changed form values?

Added by Roel Standaert 6 months ago. Updated 6 months ago.

Status:
New
Priority:
Normal
Assignee:
-
Target version:
Start date:
01/19/2021
Due date:
% Done:

0%

Estimated time:

Description

On every signal all form data is submitted to the server, even form data that hasn't changed since the last signal. Maybe we could make it so that only updated form data is sent, and not all form data.

Special care will have to be taken for situations where absence of form data has a particular meaning, e.g. no values for WSelectionBox means no selection. In that case we could encode it as an array instead? Since WSelectionBox is supported when JavaScript is disabled, the old behavior should still work.

Apart from making the signals a bit smaller this may help in situations where many signals are being sent very quickly, causing the server side value of some widgets to be temporarily reset to their old value.

Suppose an update from the server changes the selected item in a WComboBox, but before that update was received and processed by the browser many events occur. These events will still have the old item selected. The effect will be that the current selected item of the WComboBox temporarily switches back to the old value after being changed, to then settle to the new value once a signal from the client comes in after the client has updated its value.

#1

Updated by Roel Standaert 6 months ago

Note: we'd also have to take note of all of the form values after every server update, so we can catch the situation where the server changes something and the user changes it back to the old value.

#2

Updated by Korneel Dumon 6 months ago

I think the race condition can still occur. If the formwidget value in the client changes rather than stay the same, then the server will still get the wrong value.

#3

Updated by Roel Standaert 6 months ago

Hence I said "may help". I think that's the more uncommon case, and we can't really (or at least easily) avoid a race condition in that case.

Also available in: Atom PDF