Laravel Performance ನಲ್ಲಿ ಪರಿಣತಿಯನ್ನು ಪಡೆಯಿರಿ
ನಿಮಗೆ ವೇಗದ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಬೇಕು. ನಿಧಾನಗತಿಯ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಬಳಕೆದಾರರನ್ನು ಬೇಸರಗೊಳಿಸುತ್ತವೆ ಮತ್ತು ನಿಮ್ಮ ವ್ಯವಹಾರಕ್ಕೆ ಹಾನಿ ಮಾಡುತ್ತವೆ. "N+1 query problem" ನಿಮ್ಮ Laravel ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿಧಾನಗೊಳಿಸಬಹುದು. ಆದರೆ Laravel ಬಳಿ ಇದಕ್ಕೆ ಪರಿಹಾರವಿದೆ: eager loading.
ಈ ತಂತ್ರವು with() ಮೆಥಡ್ ಅನ್ನು ಪರಿಣತವಾಗಿ ಬಳಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಹೇಗೆ ವೇಗವಾಗಿ ಮತ್ತು ಪರಿಣಾಮಕಾರಿಯಾಗಿಡಬೇಕೆಂದು ನೀವು ಕಲಿಯುವಿರಿ.
ಒಂದು ಉದಾಹರಣೆಯನ್ನು ನೋಡೋಣ. ನಿಮ್ಮ ಬಳಿ ಒಂದು ಬ್ಲಾಗಿಂಗ್ ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಇದೆ ಎಂದು ಭಾವಿಸೋಣ. ಪ್ರತಿಯೊಂದು ಪೋಸ್ಟ್ ಒಂದು ಲೇಖಕರಿಗೆ (author) ಸೇರಿರುತ್ತದೆ. ನೀವು ಪ್ರತಿಯೊಂದು ಪೋಸ್ಟ್ನ ಲೇಖಕನೊಂದಿಗೆ ಪೋಸ್ಟ್ಗಳ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಲು ಬಯಸುತ್ತೀರಿ.
ಎಲ್ಲಾ ಪೋಸ್ಟ್ಗಳನ್ನು ಪಡೆದು (fetch), ನಂತರ ಪ್ರತಿಯೊಂದು ಪೋಸ್ಟ್ನ ಲೇಖಕನನ್ನು ಪಡೆಯುವುದು ಒಂದು ಸಾಮಾನ್ಯ ವಿಧಾನವಾಗಿದೆ. ಇದು ಅನೇಕ ಡೇಟಾಬೇಸ್ ಕ್ವೇರಿಗಳಿಗೆ (database queries) ಕಾರಣವಾಗುತ್ತದೆ.
ನಿಮ್ಮ ಬಳಿ 100 ಪೋಸ್ಟ್ಗಳಿದ್ದರೆ, ಈ ಕೋಡ್ 101 ಡೇಟಾಬೇಸ್ ಕ್ವೇರಿಗಳನ್ನು ಮಾಡುತ್ತದೆ. ಇದನ್ನೇ "N+1 query problem" ಎನ್ನಲಾಗುತ್ತದೆ. ಇದು ಹೆಚ್ಚಿನ ಹೊರೆಯನ್ನು (overhead) ಉಂಟುಮಾಡುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿಧಾನಗೊಳಿಸುತ್ತದೆ.
with() ಮೆಥಡ್ ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುತ್ತದೆ. ಇದು ಎಲ್ಲಾ ಸಂಬಂಧಿತ ಮಾಡೆಲ್ಗಳನ್ನು (related models) ಒಂದೇ ಅಥವಾ ಎರಡು ಕ್ವೇರಿಗಳಲ್ಲಿ ಪಡೆಯುತ್ತದೆ.
ನೀವು ಇದನ್ನು ಈ ರೀತಿ ಬಳಸಬಹುದು: $posts = App\Models\Post::with('author')->get();
ಈ ಕೋಡ್ ಎಲ್ಲಾ ಪೋಸ್ಟ್ಗಳು ಮತ್ತು ಅವುಗಳ ಲೇಖಕರನ್ನು ಎರಡು ಕ್ವೇರಿಗಳಲ್ಲಿ ಪಡೆಯುತ್ತದೆ.
ನೀವು ಏಕಕಾಲದಲ್ಲಿ ಹಲವಾರು ಸಂಬಂಧಗಳನ್ನು (multiple relationships) ಕೂಡ ಲೋಡ್ ಮಾಡಬಹುದು: $posts = App\Models\Post::with(['author', 'category'])->get();
ಅಥವಾ ಸಂಬಂಧಗಳ ಒಳಗಿರುವ ಸಂಬಂಧಗಳನ್ನು (relationships of relationships) ಲೋಡ್ ಮಾಡಬಹುದು: $posts = App\Models\Post::with('author.profile')->get();
ವೇಗದ Laravel ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು eager loading ಅತ್ಯಗತ್ಯ. ಇದು N+1 query ಸಮಸ್ಯೆಯನ್ನು ಹೋಗಲಾಡಿಸುತ್ತದೆ ಮತ್ತು ಡೇಟಾಬೇಸ್ ಕ್ವೇರಿಗಳನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ನ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು (performance) ಸುಧಾರಿಸಲು with() ಮೆಥಡ್ ಬಳಸಿ.
ಮೂಲ: https://dev.to/prabashanadev/mastering-laravel-performance-a-deep-dive-into-eager-loading-22l0