docs/DeveloperDocs/Optimized-2025-02-07/Performance_optimization_analysis.md
The codebase uses several patterns where Meteor.call() could be replaced with pub/sub subscriptions for faster UI updates:
Location: imports/cronMigrationClient.js lines 26-53, called every 2 seconds via setInterval
Current Issue:
Recommended Solution:
cronMigrationStatus publicationgetMigrationProgress() for non-status data (migration steps list, ETA calculation)Implementation Status: ✅ Already in place
Location: client/components/users/userHeader.js lines 173, 182, 191
Current Methods:
Meteor.call('AccountSettings.allowEmailChange', (_, result) => {...})
Meteor.call('AccountSettings.allowUserNameChange', (_, result) => {...})
Meteor.call('AccountSettings.allowUserDelete', (_, result) => {...})
Current Issue:
Recommended Solution:
accountSettings publication (already exists in server/publications/accountSettings.js)AccountSettings collection insteadaccountSettings in userHeader templateBenefits:
Location: imports/cronMigrationClient.js line 62-67, called every 2 seconds
Current Issue:
Recommended Solution:
cronJobs publication in server/publications/cronJobs.jsCronJobStatus.find({}) for admin usersBenefits:
Location: client/components/users/userHeader.js lines 103, 223
Current Pattern:
Meteor.call('toggleGreyIcons', (err) => {...})
Meteor.call('setAvatarUrl', avatarUrl, (err) => {...})
Recommended Solution:
Status: ✅ Already correct pattern
Location: client/lib/utils.js lines 293, 379, 420
Current Pattern: Write operations via Meteor.call
Status: ✅ Already correct pattern (mutations should use Meteor.call)
Location: client/lib/utils.js lines 748, 799
Current Issue:
Recommended Solution:
customUI and matomoConfig publicationsLocation: client/lib/attachmentMigrationManager.js lines 66, 142, 169
Methods:
attachmentMigration.isBoardMigratedattachmentMigration.migrateBoardAttachmentsattachmentMigration.getProgressRecommended Solution:
attachmentMigrationStatus publicationLocation: client/lib/originalPositionHelpers.js lines 12, 26, 40, 54, 71
Methods:
positionHistory.trackSwimlanepositionHistory.trackListpositionHistory.trackCardCurrent: These are write operations Status: ✅ Correct to use Meteor.call (not candidates for pub/sub)
These are already using pub/sub properly:
Meteor.subscribe('setting') - Global settingsMeteor.subscribe('board', boardId) - Board dataMeteor.subscribe('notificationActivities') - NotificationsMeteor.subscribe('sessionData') - User session dataMeteor.subscribe('my-avatars') - User avatarsMeteor.subscribe('userGreyIcons') - User preferencesMeteor.subscribe('accountSettings') - Account settingsMeteor.subscribe('cronMigrationStatus') - Migration status (just implemented)All recommended changes maintain existing permission model:
No security changes needed - just move from Meteor.call to pub/sub with same permission checks.