Views is a core module that has ability to create simple to complex listings from entities. It is possible to optimize them depending on use cases. Let's cover them.
Results per page
Best way to make views quick and fast is to limit how many rows are shown - the less, the better. Additionally the modules like views_infinite_scroll can be also helpful. In most cases it should be enough, but there may be some exceptions where more rows are needed to show.
Rendering
Advanced rendering is something that can be quite expensive, it can be triggered by anything if the output is not shown directly - mainly "Rewrite results" options. If there are a lot of fields and rows shown, it can be quite expensive. Most cases the rows are limited to reasonable size, but if there is a need to output all rows (data export for example), it can be really slow.

Caching
Enable tag-based caching to make it faster. While cache build can be slow, it is one time thing (while cache is valid) and could be warmed with other solutions.

Alternative solutions
You could also consider to use simple entity query to get all required data. The benefit here is that you can load all entities at once reducing database queries - views load everything one by one. While entities are most of the time in cache tables, it can still put some load to it and it could affect thing if database is over the network. Redis or memcache could give some boost, but if they are also working over the network then is will still affect load times.