8000 Performance issue: Changes in cards and boards are not immediately recorded · Issue #4823 · wekan/wekan · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

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

Open
huguesderiau opened this issue Feb 2, 2023 · 15 comments

Comments

@huguesderiau
Copy link
  • Did you test in newest Wekan?: V 6.71.0
  • Did you configure root-url correctly so Wekan cards open correctly (see https://github.com/wekan/wekan/wiki/Settings)? Yes
  • Operating System: MacOsX 10.14.6
  • Deployment Method (Snap/Docker/Sandstorm/bundle/source): Docker
  • Http frontend if any (Caddy, Nginx, Apache, see config examples from Wekan GitHub wiki first):
  • Node.js Version: 14.21.2
  • MongoDB Version: 6.0.4
  • What webbrowser version are you using (Wekan should work on all modern browsers that support Javascript)? Chrome 109.0.5414.119

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)

@xet7
Copy link
Member
xet7 commented Feb 2, 2023

Yes, current Meteor WeKan has optimistic UI https://blog.meteor.com/optimistic-ui-with-meteor-67b5a78c3fcf

Upcoming Multiverse WeKan will:

@huguesderiau
Copy link
Author
huguesderiau commented Feb 2, 2023 via email

@xet7
Copy link
Member
xet7 commented Feb 2, 2023

@huguesderiau

WeKan has always had Optimistic UI. Optimistic UI is Meteor feature. I started maintaining WeKan at December 2016.

@xet7
Copy link
Member
xet7 commented Feb 2, 2023

@huguesderiau

No, I can't see. You did not record animgif about it.

@huguesderiau
Copy link
Author
huguesderiau commented Feb 3, 2023 via email

@xet7
Copy link
Member
xet7 commented Feb 3, 2023

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).

@xet7
Copy link
Member
xet7 commented Feb 3, 2023

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.

@huguesderiau
Copy link
Author
huguesderiau commented Feb 3, 2023 via email

@huguesderiau
Copy link
Author
huguesderiau commented Feb 4, 2023 via email

@SmartPhoneLover
Copy link

If I understood correctly, how did you manage to export/import a board in Wekan?
I'm looking for exporting my boards, and import them in another instance, as I need to clone it. I can make a dump of the database, create a second Wekan container and point that container to the second restored database (previous dump).

But I would like to know if there's an easier way.

@xet7
Copy link
Member
xet7 commented Mar 16, 2023

@SmartPhoneLover

Usually WeKan migrations are done with mongodump/mongorestore https://github.com/wekan/wekan/wiki/Backup

For Meteor WeKan, there is also JSON:

  • Export: At board, right sidebar / Board Settings / Export / JSON. But currently it does not export attachments yet at some versions of WeKan. Also, JSON structure could be different in different versions of WeKan, depending on what features are implemented. Not everything is exported with JSON.
  • Import: All Boards / New Board / Import / From previous Export

Currently I'm working on exporting MongoDB text and attachments to SQLite and Minio:
https://github.com/wekan/minio-metadata

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:
https://github.com/wekan/wekan/wiki

@xet7
Copy link
Member
xet7 commented Mar 16, 2023

@SmartPhoneLover

Also, at All Boards page when hovering mouse at top of some board icon, there is button "Clone Board"

@xet7
Copy link
Member
xet7 commented Mar 16, 2023

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.

@huguesderiau
Copy link
Author

@SmartPhoneLover

Hamburger menu on the right side, then "Board Settings": export board to JSON.
Once you've got your export, do a "All Boards" and click on "Add Board" and click on "Import" from Previous Export and paste the JSON that you have in your exported file.

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.
I had a similar issue recently, where I lost the labels section when I was editing cards and it was fixed with an export/import.

@SmartPhoneLover
Copy link

Thank you both for the answers, it helped it a lot ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants
0