# Optimizing List Multiplications

I've got a list manipulation optimization problem. Consider a two-dimensional nxm list list1, and a three-dimensional nxmxm list, list2. Is there a faster way of taking the following product?

Table[list1[[i]].list2[[i]].list1[[i]], {i, 1, length}]


I know that Table operators are notoriously slow, and this seems like there might be a built-in list-manipulation operator to accomplish the same thing, or something very similar.

This is a straightforward application of MapThread:
out = MapThread[Dot, {list1, list2, list1}]

You can also use Thread as in the following, but it displays a Dot::dotsh message (which can be silenced with Quiet)
out = Quiet@Thread[list1.list2.list1];