efficiently check for tasks (advancement/item/else)

I'm currently working on a datapack with a "gamemode" where a group of players need to complete tasks in a given time. Since now, the only way to modify these tasks was making them myself using what i know from datapacks, but my final goal is publishing this datapack when its done, and obviously, there needs to be some easy way for anyone who wants to use this to modify the tasks.

So i came up with an idea: a storage with multiple categories, like advancements or items, where you can just add the ID of the e.g. advancement (like "nether/create_beacon") and then it checks for all these entries if someone completed them. Here is my problem: from what i have heard, macro functions (which i need a few for this) have a higher impact on performance than normal functions, and since i need to test for these tasks ideally every tick it could create a spike in performance regarding the entire datapack. To be honest, i don't know how much it really impacts performance, but i at least want to try to optimize everything as good as possible. Keep in mind that with my approach i would need to test every single task that is in these data storages with a new iteration of a macro function where i just change the ID using the macro, every time it checks for all tasks (so worst case every tick).

Is there a more efficient way to create what i need? I know i can also make it so it doesn't check every tick but i just want to know if there is a better system. Edit: Version 1.21.5 but i don't think that changes anything

Continue to help post