use Worker (if possible) for better performance