My opinion is that scripts that doesn't change any objects current status by moving or rotating are quite light. Foe example, I made a script that checks if a unit is dead. If it is dead, it will be removed and deleted (I know it isn't my idea, but it works). Anyway, it checked about 60 units and no waiting times from an array. I didn't see any lag in my machine (Celeron 500, 320MB, Ati Radeon 7200) which is quite a surprise to me.
The if you have a script that moves object(s) rapidly, like an artillery script, it slows computer, at least mine.
I usually use triggers, that checks if there is people from wanted side. I think if you use waypoints (I don't use them, I do everything by scripting) script is launched when group comes to that waypoint, not when they are commanded to move to that waypoint. Not sure, haven't tested.
Hups, little way out of the question.
You could sychronize waypoint with trigger so that when trigeer is activated, waypoint will be released or you could use
LockWP command which locks next waypoint. If I remember correctly it is used like this:
GroupName LockWP True or False
True locks next waypoint and False releases it.
Long questions, longer answers