-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Performance issue: Changes in cards and boards are not immediately recorded #4823
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Yes, current Meteor WeKan has optimistic UI https://blog.meteor.com/optimistic-ui-with-meteor-67b5a78c3fcf Upcoming Multiverse WeKan will:
|
Hi LauriIs this Optimistic UI a recent change?I had no such issue for the past years until recently. Moving a card to a list with an archiving rule immediately archived the card and you can see it vanishing within a second, now it remains visible which never happened before ?Sent from my iPhoneOn Feb 2, 2023, at 12:05 PM, Lauri Ojansivu ***@***.***> wrote:
Yes, current Meteor WeKan has optimistic UI https://blog.meteor.com/optimistic-ui-with-meteor-67b5a78c3fcf
Upcoming Multiverse WeKan will:
Save immediately #4578
Work with SQLite #4321
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: ***@***.***>
|
WeKan has always had Optimistic UI. Optimistic UI is Meteor feature. I started maintaining WeKan at December 2016. |
No, I can't see. You did not record animgif about it. |
Hi Lauri
Here are two screen recordings where you can see the issue:
The 2 screen recordings are from the same Wekan instance, only the boards
are differents
One board behaves normally, the other one has the issue
Normal behavior:
In board "Manual Data Adjustment" (grey) : moving a card to the list
"Archived", where a rule is set to archive the card when dropped in this
list:
You can see that the card is correctly archived immediately after the drop
https://user-images.githubusercontent.com/15545/216520676-582cf44c-edbc-4d24-a26e-7e57b257b28c.mov
The issue:
Occurs in the board "webERP Features" (blue) where I have an identical rule
set up when a card is moved to the list "in Prod"
I created 2 cards one after the other and moved them to the list "in Prod"
: the cards are not archived after the drop. When reloading the page, one
card has been archived and the other one went back to "Groomed Backlog",
and if moved again to "In Prod", is not archived after the drop. but a page
reload is necessary to see it gone:
https://user-images.githubusercontent.com/15545/216522288-63eaa904-e908-47e8-a143-6a27b396afd4.mp4
Could my data be corrupted as it only seems to appear with the board
"webERP features"?
I installed a second instance of Wekan in a different Docker container and
restored it with a backup from the current one and the same thing is
happening.
Thank you for your input
Hugues
|
Yes, modern webbrowsers like Chrome/Safari/Firefox are very slow when trying to run that 10 MB of Javascript browserside, and a lot more serverside. In current Meteor WeKan, it takes time to save that data and run those rules. Reloading webpage immediately does not leave any time to save data. Networks are not so fast, there is latency etc. There are options like: a) In upcoming Multiverse WeKan, only have minimal HTML4/CSS browserside, and only show small part of board. Not any of that 10 MB of Javascript. Because saving anything anyway requires to post that data. And people are going to reload webpage immediately in every case, because people are so impatient. b) Run most code serverside. c) If interpreted language like Javascript is too slow, even when using minimal amount of it, consider having native apps with native backend, with multiprocess or multithreading for simultaneous upload/download and verifying retry login for unstable network connections. d) Use some database that has git like versioning (like TerminusDB), so when duplicating big board it actually creates a branch (fast operation) and does not physically copy all data (very slow). |
Nowadays people just put huge amount of cards to kanban, about 30k users, and expect everything to still work very fast. It kind of requires different architecture etc. |
Hi Lauri
I understand about situations with 30K users and huge amount of cards but
in my case:
- I'm the only user
- 4 boards only the biggest has 207 cards, 24 only are displayed
- running on localhost
- Entire backup is 2.5 Mb only
Here is another screen movie showing my rules disappearing after a card
being moved:
https://www.dropbox.com/s/xrlwzgnpu6vwo2t/rules-disappearing.mov?dl=0
I truly believe there is something else going on here...
Any ideas?
…On Thu, Feb 2, 2023 at 10:11 PM Lauri Ojansivu ***@***.***> wrote:
Nowadays people just put huge amount of cards to kanban, about 30k users,
and expect everything to still work very fast. It kind of requires
different architecture etc.
—
Reply to this email directly, view it on GitHub
<#4823 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ARJLRNSKWAVBBCT4CK72CR3WVSOSRANCNFSM6AAAAAAUPM3ODE>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
HI Lauri,
Problem solved by exporting by board, deleting and reimporting it.
Thank you for taking the time to address my issue!
Best
Hugues
…On Thu, Feb 2, 2023 at 10:11 PM Lauri Ojansivu ***@***.***> wrote:
Nowadays people just put huge amount of cards to kanban, about 30k users,
and expect everything to still work very fast. It kind of requires
different architecture etc.
—
Reply to this email directly, view it on GitHub
<#4823 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ARJLRNSKWAVBBCT4CK72CR3WVSOSRANCNFSM6AAAAAAUPM3ODE>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
If I understood correctly, how did you manage to export/import a board in Wekan? But I would like to know if there's an easier way. |
Usually WeKan migrations are done with mongodump/mongorestore https://github.com/wekan/wekan/wiki/Backup For Meteor WeKan, there is also JSON:
Currently I'm working on exporting MongoDB text and attachments to SQLite and Minio: I have not yet done scripts to export board from SQLite to various formats. Some other migration info for Trello/Jira/Asana/Zenkit is at wiki right menu topic Migrating: |
Also, at All Boards page when hovering mouse at top of some board icon, there is button "Clone Board" |
Hmm, this issue seems to be about performance in WeKan. Current newest Meteor WeKan is faster than previous versions. It loads faster to webbrowser, because of various optimizations in Meteor, and recently mermaid was removed, that was a lot of code browserside. Upcoming WeKan and Meteor versions will be faster, because they have more optimizations that Meteor developers have recently done. But changes are not immediately recorded. I don't know will it be fixed in Meteor WeKan, or will it just be fast enough. It will be fixed in Multiverse WeKan. |
Hamburger menu on the right side, then "Board Settings": export board to JSON. Be aware that your board and lists will have now different IDs if you have API or webhooks that point to them Hope this helps. |
Thank you both for the answers, it helped it a lot ;) |
Problem description
Performance issue: Changes in cards and boards are not immediately recorded
Reproduction Steps
Changes in cards and boards are not immediately updated
Example 1: Moving a card: I have a rule that archives a card when moved from any list to a specific list: when cards land in that list, they are archived and therefore no longer displayed.
The issue, when the card is moved to the list, it remains displayed in the list and:
If I refresh immediately, the card sometimes goes back to its initial list, sometimes remain in the moved list
If I refresh after 20 or 30 seconds, the card has been correctly archived with the rule and no longer visible
Example 2: Changing data in a card:
if I enter or change a start/end dates and save, the new information is visible in the card when I close the card
But If I refresh the page, I don't see my changes
But if instead If I wait a certain amount of time after having made my change before closing the card , My changes have been recorded
Logs
i18next: languageChanged en
i18next: initialized {
debug: 'false',
initImmediate: true,
ns: [ 'translation' ],
defaultNS: 'translation',
fallbackLng: [ 'en' ],
fallbackNS: false,
supportedLngs: [
'ar-DZ', 'ar-EG', 'ar', 'ary', 'az-AZ', 'az-LA',
'az', 'bg', 'br', 'ca', 'cs', 'cs-CZ',
'cy-GB', 'cy', 'da', 'de-AT', 'de-CH', 'de',
'el-GR', 'el', 'en-BR', 'en-DE', 'en-GB', 'en-IT',
'en-MY', 'en-YS', 'en', 'eo', 'ast-ES', 'es-AR',
'es-CL', 'es-LA', 'es-MX', 'es-PE', 'es-PY', 'es',
'et-EE', 'eu', 'fa-IR', 'fa', 'fi', 'fr-BE',
'fr-CA', 'fr-CH', 'fr', 'fy-NL', 'fy', 'gl-ES',
'gl', 'gu-IN', 'he-IL', 'he', 'hi-IN', 'hi',
'hr', 'hu', 'hy', 'id', 'ig', 'it',
'ja', 'ja-Hira', 'ja-JP', 'ka', 'km', 'ko-KR',
'ko', 'lt', 'lv', 'mk', 'mn', 'ms',
'ms-MY', 'nb', 'nl-NL', 'nl', 'oc', 'pa',
'pl-PL', 'pl', 'pt-BR', 'pt', 'ro', 'ro-RO',
'ru-UA', 'ru', 'sk', 'sl', 'sr', 'st',
'sv', 'sw', 'ta', 'th', 'tr', 'ua-UA',
'ua', 'uz-AR', 'uz-LA', 'uz-UZ',
... 20 more items
],
nonExplicitSupportedLngs: false,
load: 'all',
preload: false,
simplifyPluralSuffix: true,
keySeparator: '.',
nsSeparator: ':',
pluralSeparator: '',
contextSeparator: '',
partialBundledLanguages: false,
saveMissing: false,
updateMissing: false,
saveMissingTo: 'fallback',
saveMissingPlurals: true,
missingKeyHandler: false,
missingInterpolationHandler: false,
postProcess: [ 'sprintf' ],
postProcessPassResolved: false,
returnNull: true,
returnEmptyString: true,
returnObjects: false,
joinArrays: false,
returnedObjectHandler: false,
parseMissingKeyHandler: false,
appendNamespaceToMissingKey: false,
appendNamespaceToCIMode: false,
overloadTranslationOptionHandler: [Function: handle],
interpolation: {
escapeValue: false,
format: [Function: bound format],
prefix: '',
suffix: '',
formatSeparator: ',',
unescapePrefix: '-',
nestingPrefix: '$t(',
nestingSuffix: ')',
nestingOptionsSeparator: ',',
maxReplaces: 1000,
skipOnVariables: true
},
cleanCode: true,
defaultNs: 'translation',
resources: {},
ignoreJSONStructure: true,
lng: 'en'
}
{"line":"87","file":"percolate_synced-cron.js","message":"SyncedCron: Scheduled "notification_cleanup" next run @thu Feb 02 2023 02:23:12 GMT+0000 (Coordinated Universal Time)","time":{"$date":1675304592792},"level":"info"}
i18next: languageChanged en
i18next: initialized {
debug: 'false',
initImmediate: true,
ns: [ 'translation' ],
defaultNS: 'translation',
fallbackLng: [ 'en' ],
fallbackNS: false,
supportedLngs: [
'ar-DZ', 'ar-EG', 'ar', 'ary', 'az-AZ', 'az-LA',
'az', 'bg', 'br', 'ca', 'cs', 'cs-CZ',
'cy-GB', 'cy', 'da', 'de-AT', 'de-CH', 'de',
'el-GR', 'el', 'en-BR', 'en-DE', 'en-GB', 'en-IT',
'en-MY', 'en-YS', 'en', 'eo', 'ast-ES', 'es-AR',
'es-CL', 'es-LA', 'es-MX', 'es-PE', 'es-PY', 'es',
'et-EE', 'eu', 'fa-IR', 'fa', 'fi', 'fr-BE',
'fr-CA', 'fr-CH', 'fr', 'fy-NL', 'fy', 'gl-ES',
'gl', 'gu-IN', 'he-IL', 'he', 'hi-IN', 'hi',
'hr', 'hu', 'hy', 'id', 'ig', 'it',
'ja', 'ja-Hira', 'ja-JP', 'ka', 'km', 'ko-KR',
'ko', 'lt', 'lv', 'mk', 'mn', 'ms',
'ms-MY', 'nb', 'nl-NL', 'nl', 'oc', 'pa',
'pl-PL', 'pl', 'pt-BR', 'pt', 'ro', 'ro-RO',
'ru-UA', 'ru', 'sk', 'sl', 'sr', 'st',
'sv', 'sw', 'ta', 'th', 'tr', 'ua-UA',
'ua', 'uz-AR', 'uz-LA', 'uz-UZ',
... 20 more items
],
nonExplicitSupportedLngs: false,
load: 'all',
preload: false,
simplifyPluralSuffix: true,
keySeparator: '.',
nsSeparator: ':',
pluralSeparator: '',
contextSeparator: '',
partialBundledLanguages: false,
saveMissing: false,
updateMissing: false,
saveMissingTo: 'fallback',
saveMissingPlurals: true,
missingKeyHandler: false,
missingInterpolationHandler: false,
postProcess: [ 'sprintf' ],
postProcessPassResolved: false,
returnNull: true,
returnEmptyString: true,
returnObjects: false,
joinArrays: false,
returnedObjectHandler: false,
parseMissingKeyHandler: false,
appendNamespaceToMissingKey: false,
appendNamespaceToCIMode: false,
overloadTranslationOptionHandler: [Function: handle],
interpolation: {
escapeValue: false,
format: [Function: bound format],
prefix: '',
suffix: '',
formatSeparator: ',',
unescapePrefix: '-',
nestingPrefix: '$t(',
nestingSuffix: ')',
nestingOptionsSeparator: ',',
maxReplaces: 1000,
skipOnVariables: true
},
cleanCode: true,
defaultNs: 'translation',
resources: {},
ignoreJSONStructure: true,
lng: 'en'
}
{"line":"87","file":"percolate_synced-cron.js","message":"SyncedCron: Scheduled "notification_cleanup" next run @thu Feb 02 2023 02:36:15 GMT+0000 (Coordinated Universal Time)","time":{"$date":1675305375820},"level":"info"}
(node:1) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
(Use
node --trace-deprecation ...
to show where the warning was created)(node:1) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
(Use
node --trace-deprecation ...
to show where the warning was created)The text was updated successfully, but these errors were encountered: