DecompositionSprint 3β successCompiled Learning ObjectivesWebSocketsStream live updates from a server using WebSockets.Discuss the trade-offs of using WebSockets or polling.Describe properties of message formats (e.g. including a command name).Adding like/dislikeIdentify what data needs to be stored and exchanged between a client and server.Devise a scheme for differentiating messages with different meanings (e.g. a new message vs a new like).Contrast giving updated values as absolute values or relative changes.Implement an end-to-end feature involving data updates and reconciliation across a client and server.Identifying common functionalityIdentify and explain the risks and costs of duplicate code.Identify which code is equivalent, equivalent with parameters, or unique.Extracting common functionalityExtract functionality used by multiple route handlers into a common function.Continuation stylesCompare different approaches to choosing how to handle potential request errors.Extracting a middlewareIdentify and explain the risks and costs of manually calling code (e.g. authentication validators/extractors) from multiple route handlers.Explain the middleware pattern.Implement and wire up a middleware with Express.Using existing middlewareUse an existing middleware with Express.