Joplin continuously synchronizes while entering notes

How is your log file? Can you check what size it is?

I just updated to v2.12.10 and have noticed constant syncing while writing. I'm on a gigabit connection, so I'm not concerned about performance issues -- it's just really distracting having that sync notice pop up constantly!

If real-time syncing is The Way™ moving forward so be it, but I'd rather not have a little tab thing reminding me about it every few seconds. I'm not a UI guy, but I'm sure there's a simpler and more out-of-the-way method show sync status.

That's what worries me too, as I said in my first post.
It's disturbing to see those little lines of text jumping around every second.

IIRC it was less frequent in previous versions of Joplin.

There's a commit for v2.12.5 prerelease that changed the delay for checking for updates in the current note from 30 seconds to 1 second.

This number needs to be configurable in the settings or the UI surrounding pushing local updates upstream needs to be changed. Like, I'm about to hide that pop-up notice with CSS if that's any indication of how annoying it is having it fire multiple times per sentence as I type. D:

1 Like

@laurent: i am using the markdown editor. I only have a log-clipper.txt which is around 1.4mb in size.

In my case, it is not only the pop-ups as reported by others, but the editing performance, in general, is quite slow. I'm using a Thinkpad X1 Carbon 5th and sync with joplin cloud.

Joplin 2.12.10 (prod, win32)

Client ID: 09ddd0e3697849fea5e98d88633eeff6
Sync Version: 3
Profile Version: 43
Keychain Supported: Yes

Revision: 40b89f6

Note overview: 1.6.0
Simple Backup: 1.3.3
Templates: 2.4.0

I've noticed this as well. If I am running down a bunch of checkboxes, checking them off one by one, it does the update with every click and often bounces me back up to the top of the list as if it did the update and now thinks I'm just starting to edit the note. Every click, every character typed causes an update and often throws away recent typing or puts it up at the top of the note instead of where I thought I was typing it. I'm not a touch-typist so I have to look at the keyboard and after typing for a minute or two I discover nothing is where it was supposed to be. It's this update business causing the problem because I can watch the screen while typing gibberish and see when it updates and shifts my cursor up to the top.

BTW. I do not have any tags.

I feel there may be several unrelated issues in this thread. For now I've changed it so that it synchronises after 15 seconds instead of 1 second

Indeed. I landed here from Google after the sync notice kept popping up every time I typed anything. No performance or editing issues for me; I was just like, "What is going on here...?"


If anyone happens to be curious about the CSS I said I might write above, here's what I added to userchrome.css:

.sidebar:not(:hover) > div:last-child {
    display: none;
}

It hides the sync notice and the sync button until you hover over the notebook list. I kinda like the clean notebook list, so I might keep it in place even once the update timer gets changed to 15 seconds.

Please could you provide your log? 30 seconds usually means that there's an error and the app is retrying synchronisation multiple times, but the log would tell us that. How to enable debugging | Joplin

Just lost an important bit of a note when I was typing away at the end of a note, decided to delete the last sentence and pressed and held the delete key. The "instant update" flipped my cursor to the top of the note where a rather important URL resided and that's what got deleted. Thank goodness for the "Ctrl-Z" undo feature. It's getting a lot of use these days.

If any of you are having this issue of slow sync, please do as follow:

You don't need to post the whole thing, just the last lines from the moment you clicked "Synchronise".

I'm going to push a Joplin Cloud update soon which should address at least one of these sync issues (or maybe all of them, but I don't know if we're talking about unrelated issues or not here)

Does anybody know when this "instant update" started? I have all previous versions of Joplin so I can export/delete/uninstall/reinstall/import and get back to a usable state. The cursor jumping to the top of the note when it does the update is making the current 2.12.10 version impossible to use.

Does the cursor jumping around happen both in the rich text and markdown editors? Does this still happen even when the sync target is set to "none"?

I don't use the rich text editor at all and haven't tried setting the sync target to "none." I'm using WebDAV to my local NAS (hardwired) and just spent a week reinstalling on my laptop/Surface Pro/and a bunch of mobiles trying to figure out what was happening. Only the laptop is used for editing and that's where the problem is. Start typing, watch the sync/update status at the lower left and every keystroke it triggers an update and frequently pops the cursor to the top of the note. A few characters are lost while the cursor moves but you end up with the start of a sentence at the bottom and the balance of it up at the beginning of the note. I can easily (only take a week or so) revert to a previous version if I knew when this instant updating started. I've got about 2200 notes (6900 items) which somehow are now considered 35000 resources so a few devices take a couple of days each to re-sync.

I got fed up and uninstalled the 2.12.10 and reverted to the 2.11.11 version from a month or so ago. Problem gone!

I didn't install pre-release versions and I still have 2.11.11
But the cursor sometimes jumps to the top. Not often. Only few times per day.
Synchronization starts 30 seconds after I stop updating note.

my log file when joplin synchronizes

09:05:52: CommandService::execute: synchronize false
Logger.ts:247 09:05:52: Scheduling sync operation... 0
Logger.ts:247 09:05:52: Preparing scheduled sync
Logger.ts:247 09:05:52: Starting scheduled sync
Logger.ts:247 09:05:52: Synchronizer: Sync: starting: Starting synchronisation to target 10... supportsAccurateTimestamp = true; supportsMultiPut = true [1691391952491]
Logger.ts:247 09:05:52: Synchronizer: Indexing resources...
Logger.ts:247 09:05:52: ResourceService::indexNoteResources: Start
Logger.ts:247 09:05:52: ResourceService::indexNoteResources: Completed
Logger.ts:247 09:05:52: models/Folder: updateFolderShareIds: {shareUpdateCount: 0, unshareUpdateCount: 0}
Logger.ts:247 09:05:52: models/Folder: updateNoteShareIds: notes to update: 0
Logger.ts:247 09:05:52: FileApi: get info.json
Logger.ts:247 09:05:53: Synchronizer: Sync target remote info: SyncInfo {version_: 3, masterKeys_: Array(4), e2ee_: {…}, activeMasterKeyId_: {…}, ppk_: {…}}
Logger.ts:247 09:05:53: Synchronizer: Sync target is already setup - checking it...
Logger.ts:247 09:05:53: Synchronizer: Sync target local info: SyncInfo {version_: 3, masterKeys_: Array(4), e2ee_: {…}, activeMasterKeyId_: {…}, ppk_: {…}}
Logger.ts:247 09:05:53: Synchronizer: TaskQueue.stop: syncDownload: waiting for tasks to complete: 0
Logger.ts:247 09:05:53: Synchronizer: TaskQueue.stop: syncDownload: Done, waited for 0
Logger.ts:247 09:05:53: FileApi: delta 
Logger.ts:247 09:05:53: Synchronizer: Sync: fetchingTotal: Fetching delta items from sync target
2Logger.ts:247 09:05:54: Synchronizer: Sync: fetchingProcessed: Processing fetched item
Logger.ts:247 09:05:54: ShareService: Refresh share invitations:
Logger.ts:247 09:05:54: models/Setting: Saving settings...
Logger.ts:247 09:05:54: models/Setting: Settings have been saved.
Logger.ts:247 09:05:54: ShareService: Refreshed shares: {items: Array(0), has_more: false}
Logger.ts:247 09:05:54: models/Folder: updateNoLongerSharedItems: {folders: 0, notes: 0, resources: 0}
Logger.ts:247 09:05:54: Synchronizer: Sync: finished: Synchronisation finished [1691391952491]
Logger.ts:247 09:05:54: Synchronizer: Operations completed: 
Logger.ts:247 09:05:54: Synchronizer: fetchingTotal: 2
Logger.ts:247 09:05:54: Synchronizer: fetchingProcessed: 2
Logger.ts:247 09:05:55: Synchronizer: Total folders: 14
Logger.ts:247 09:05:55: Synchronizer: Total notes: 6861
Logger.ts:247 09:05:55: Synchronizer: Total resources: 5050
Logger.ts:247 09:05:55: Sync has finished and note has never been changed - reloading it
Logger.ts:247 09:05:55: Setting up recurrent sync with interval 1800
Logger.ts:102 Logger: Trying to access globalLogger, but it has not been initialized. Make sure that initializeGlobalLogger() has been called before logging. Will use the console as fallback.
get globalLogger @ Logger.ts:102
debug @ Logger.ts:118
(anonymous) @ PluginRunner.ts:161
(anonymous) @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:8
__awaiter @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:4
(anonymous) @ PluginRunner.ts:138
emit @ node:events:525
onMessage @ node:electron/js2c/renderer_init:2
Logger.ts:106 [UNINITIALIZED GLOBAL LOGGER] debug: PluginRunner: (2) ['Got message (3): joplin.workspace.selectedNote', Array(0)]
Logger.ts:102 Logger: Trying to access globalLogger, but it has not been initialized. Make sure that initializeGlobalLogger() has been called before logging. Will use the console as fallback.
get globalLogger @ Logger.ts:102
debug @ Logger.ts:118
(anonymous) @ PluginRunner.ts:161
(anonymous) @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:8
__awaiter @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:4
(anonymous) @ PluginRunner.ts:138
emit @ node:events:525
onMessage @ node:electron/js2c/renderer_init:2
Logger.ts:106 [UNINITIALIZED GLOBAL LOGGER] debug: PluginRunner: (2) ['Got message (3): joplin.settings.globalValue', Array(1)]
Logger.ts:102 Logger: Trying to access globalLogger, but it has not been initialized. Make sure that initializeGlobalLogger() has been called before logging. Will use the console as fallback.
get globalLogger @ Logger.ts:102
debug @ Logger.ts:118
(anonymous) @ PluginRunner.ts:161
(anonymous) @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:8
__awaiter @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:4
(anonymous) @ PluginRunner.ts:138
emit @ node:events:525
onMessage @ node:electron/js2c/renderer_init:2
Logger.ts:106 [UNINITIALIZED GLOBAL LOGGER] debug: PluginRunner: (2) ['Got message (3): joplin.data.get', Array(2)]
Logger.ts:102 Logger: Trying to access globalLogger, but it has not been initialized. Make sure that initializeGlobalLogger() has been called before logging. Will use the console as fallback.
get globalLogger @ Logger.ts:102
debug @ Logger.ts:118
(anonymous) @ PluginRunner.ts:161
(anonymous) @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:8
__awaiter @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:4
(anonymous) @ PluginRunner.ts:138
emit @ node:events:525
onMessage @ node:electron/js2c/renderer_init:2
Logger.ts:106 [UNINITIALIZED GLOBAL LOGGER] debug: PluginRunner: (2) ['Got message (3): joplin.data.get', Array(2)]
Logger.ts:102 Logger: Trying to access globalLogger, but it has not been initialized. Make sure that initializeGlobalLogger() has been called before logging. Will use the console as fallback.
get globalLogger @ Logger.ts:102
debug @ Logger.ts:118
(anonymous) @ PluginRunner.ts:161
(anonymous) @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:8
__awaiter @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:4
(anonymous) @ PluginRunner.ts:138
emit @ node:events:525
onMessage @ node:electron/js2c/renderer_init:2
Logger.ts:106 [UNINITIALIZED GLOBAL LOGGER] debug: PluginRunner: (2) ['Got message (3): joplin.data.get', Array(2)]
Logger.ts:102 Logger: Trying to access globalLogger, but it has not been initialized. Make sure that initializeGlobalLogger() has been called before logging. Will use the console as fallback.
get globalLogger @ Logger.ts:102
debug @ Logger.ts:118
(anonymous) @ PluginRunner.ts:161
(anonymous) @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:8
__awaiter @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:4
(anonymous) @ PluginRunner.ts:138
emit @ node:events:525
onMessage @ node:electron/js2c/renderer_init:2
Logger.ts:106 [UNINITIALIZED GLOBAL LOGGER] debug: PluginRunner: (2) ['Got message (3): joplin.data.get', Array(2)]
Logger.ts:102 Logger: Trying to access globalLogger, but it has not been initialized. Make sure that initializeGlobalLogger() has been called before logging. Will use the console as fallback.
get globalLogger @ Logger.ts:102
debug @ Logger.ts:118
(anonymous) @ PluginRunner.ts:161
(anonymous) @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:8
__awaiter @ /tmp/.mount_joplindBIp38/resources/app.asar/services/plugins/PluginRunner.js:4
(anonymous) @ PluginRunner.ts:138
emit @ node:events:525
onMessage @ node:electron/js2c/renderer_init:2
Logger.ts:106 [UNINITIALIZED GLOBAL LOGGER] debug: PluginRunner: (2) ['Got message (3): joplin.views.panels.setHtml', '<hidden>']
Logger.ts:247 09:05:56: DecryptionWorker: starting decryption...
Logger.ts:247 09:05:56: DecryptionWorker: completed decryption.
Logger.ts:247 09:05:57: RevisionService: maintenance: Starting...
Logger.ts:247 09:05:57: RevisionService: maintenance: Service is enabled
Logger.ts:247 09:05:57: RevisionService: collectRevisions: Saved revision 83657537c8b0438a8b0a4e8d9cfea056 (Last rev was more than 600000 ms ago)
Logger.ts:247 09:05:57: RevisionService: collectRevisions: Saved revision c407ccfb9d38446a8f290734ee1b89f5 (Last rev was more than 600000 ms ago)
Logger.ts:247 09:05:57: models/Setting: Saving settings...
Logger.ts:247 09:05:58: models/Setting: Settings have been saved.
Logger.ts:247 09:05:58: RevisionService: collectRevisions: Created revisions for 2 notes
Logger.ts:247 09:05:58: RevisionService: maintenance: Done in 516ms

Check my link to Github in the comments above. It happened in the 2.12.5 prerelease with the "Quickly synchronise immediately after changing a note" commit. The delay between checks went from 30 seconds to 1. It's currently back to 15 seconds on the dev branch, but I don't think that's been pushed into a [pre]release yet.

Thanks for sharing your log. I don't see anything unusual in there, so it's probably due to the sync frequency update (which may have uncovered another subtle bugs). Normally it should be back to normal from the next release, with a less frequent sync interval

Thank you for the reply. I will check the next release!

Do you plan to set the synchronizing interval back to 30s?
Would it make sense to handle it more flexibly, e.g., user-defined or adaptive for slower hardware or internet connections?

You mentioned a Joplin cloud update. Could it help, although the log looks normal?