tool-bar icon indicating copy to clipboard operation
tool-bar copied to clipboard

[Performance] improve atom.tooltips.add

Open aminya opened this issue 5 years ago • 1 comments

You would be surprised if you know that most of the time spent for creating the buttons, is spent in adding the tooltips to them! We might want to write a faster version of the original https://github.com/suda/tool-bar/blob/937f75719a1002af5b207c073b6e45dd82617f44/lib/items/tool-bar-button-view.js#L121

https://github.com/atom/atom/blob/e4b9c1e0815c5c07514a0649e7ebb9b5226a2931/src/tooltip-manager.js#L113-L181

For 30 buttons, this becomes ~6ms.

Details

image

Which is almost the same as the whole time spent on the buttons:

Details

image

I am going to port the function to our package and see if I can write a faster version.

aminya avatar Jun 10 '20 04:06 aminya

Further investigation shows that the time is spent here, to add keyBindingCommand, which is because we set keyBindingCommand even when the user gives it null
https://github.com/atom/atom/blob/e4b9c1e0815c5c07514a0649e7ebb9b5226a2931/src/tooltip-manager.js#L126-L139

  const { keyBindingCommand, keyBindingTarget } = options;

  if (keyBindingCommand != null) {
    const bindings = atom.tooltips.keymapManager.findKeyBindings({
      command: keyBindingCommand,
      target: keyBindingTarget
    });
    const keystroke = getKeystroke(bindings);
    if (options.title != null && keystroke != null) {
      options.title += ` ${getKeystroke(bindings)}`;
    } else if (keystroke != null) {
      options.title = getKeystroke(bindings);
    }
  }

We don't need to use keyBindingCommand, because we already add a callback through callback option, and tooltip callback is redundant.

aminya avatar Jun 10 '20 04:06 aminya