In practice, the circuit need to be proved always has a large size, maybe nearly billion gates, when turns such circuit to QAP, it will generate a large polynomial, which is a high cost to use zkSNARK. So, could the circuit be decomposed into different sub-circuit to reduce the scale of the circuit and also the scale of the polynomial?
Large circuits are definitely a bottleneck for proof systems. Splitting them into sub-circuits (often reffered to as "gadgets") is mainly a programming construct: gadgets are the equivalent of functions, methods or classes in circuits.
To illustrate, imagine the (informal) statement "The data I am sending to you decrypts to something that is a picture". Proving that statement involves multiple steps, and you can decompose it into
- Decrypt the data (prove that you know the decryption key)
- Typecheck the data (prove that the decrypted data is in fact a picture)
The first step involves a circuit that is equivalent with the decryption and the authentication (which demonstrates the knowledge of the key), and the output of that sub-circuit can be fed into the second sub-circuit, which checks that the output is in fact a picture.
To come back to your question: no, this does not allow for more compact circuits (at least not in the proof systems that I know), since it is merely a programming construct, an abstraction for the programmer. It does however allow to investigate the performance of the gadgets separately, and perhaps optimize them.
Depending on the problem at hand, you might be interested in recursive proof composition (e.g. ), which allows you to recursively nest a circuit. This is especially useful if you are thinking about incrementally verifiable computation (IVC) or proof-carrying data (PCD).
 Bowe, Sean, Jack Grigg, and Daira Hopwood. "Halo: Recursive Proof Composition without a Trusted Setup." IACR Cryptol. ePrint Arch. 2019 (2019): 1021.