You should not save the effect as you do in material.onBindObservable because this event is raised several times, when rendering into the shadow (cascade) map(s) and when rendering the regular object.
Also, you should update time somewhere else than in material.onBindObservable because this method is called several times in a frame.