The event on_tick is fired each tick and can cause performance issue.
the event on_player_cursor_stack_changed exist and can be used, it permit to fire when something is put inside the cursor_stack, when the number of item is modified or the cursor_stack is cleared.
Additionnaly there is one command I use when I want to test what can be triggered by events :
/c script.on_event(defines.events,function(event) if event.name ~= defines.events.on_tick then function name(id) events={} for key,value in pairs(defines.events) do events[value]=key end return events[id] end event.id=event.name event.name=name(event.id) game.print(serpent.dump(event)) end end)