Synchronous vs Asynchronous JavaScript: The Single Thread Bottleneck