ಏಕಕಾಲೀನ ಅಪ್ಡೇಟ್ಗಳು, ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಯುಐ ಮತ್ತು ರೇಸ್ ಕಂಡೀಷನ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ರಿಯಾಕ್ಟ್ನ experimental_useOptimistic ಹುಕ್ ಅನ್ನು ಅನ್ವೇಷಿಸಿ. ಜಾಗತಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳನ್ನು ಕಲಿಯಿರಿ.
ರಿಯಾಕ್ಟ್ನ experimental_useOptimistic ನೊಂದಿಗೆ ಏಕಕಾಲೀನ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳುವುದು: ಒಂದು ಜಾಗತಿಕ ಮಾರ್ಗದರ್ಶಿ
ಫ್ರಂಟ್-ಎಂಡ್ ಡೆವಲಪ್ಮೆಂಟ್ನ ವೇಗದ ಜಗತ್ತಿನಲ್ಲಿ, ಸುಗಮ ಮತ್ತು ಸ್ಪಂದನಾಶೀಲ ಬಳಕೆದಾರರ ಅನುಭವವನ್ನು ನೀಡುವುದು ಅತ್ಯಂತ ಮುಖ್ಯವಾಗಿದೆ. ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹೆಚ್ಚು ಸಂವಾದಾತ್ಮಕ ಮತ್ತು ಡೇಟಾ-ಚಾಲಿತವಾಗುತ್ತಿದ್ದಂತೆ, ಏಕಕಾಲೀನ ಅಪ್ಡೇಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು ಮತ್ತು ಡೇಟಾ ಸ್ಥಿರತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದು ಒಂದು ಪ್ರಮುಖ ಸವಾಲಾಗಿದೆ. ರಿಯಾಕ್ಟ್ನ ಪ್ರಾಯೋಗಿಕ experimental_useOptimistic
ಹುಕ್ ಈ ಸಂಕೀರ್ಣತೆಗಳನ್ನು ನಿಭಾಯಿಸಲು ಒಂದು ಶಕ್ತಿಯುತ ಸಾಧನವನ್ನು ಒದಗಿಸುತ್ತದೆ, ವಿಶೇಷವಾಗಿ ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಯುಐ ಮತ್ತು ಸಂಭಾವ್ಯ ರೇಸ್ ಕಂಡೀಷನ್ಗಳನ್ನು ನಿಭಾಯಿಸುವ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ. ಈ ಮಾರ್ಗದರ್ಶಿ experimental_useOptimistic
ನ ಸಮಗ್ರ ಪರಿಶೋಧನೆ, ಅದರ ಪ್ರಯೋಜನಗಳು, ಪ್ರಾಯೋಗಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ಜಾಗತಿಕ ಮಟ್ಟದ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಪರಿಗಣನೆಗಳನ್ನು ನೀಡುತ್ತದೆ.
ಸವಾಲನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು: ಏಕಕಾಲೀನ ಅಪ್ಡೇಟ್ಗಳು ಮತ್ತು ರೇಸ್ ಕಂಡೀಷನ್ಸ್
experimental_useOptimistic
ಗೆ ಧುಮುಕುವ ಮೊದಲು, ಅದು ಪರಿಹರಿಸುವ ಸಮಸ್ಯೆಗಳ ಬಗ್ಗೆ ದೃಢವಾದ ತಿಳುವಳಿಕೆಯನ್ನು ಪಡೆಯೋಣ. ಆಧುನಿಕ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಏಕಕಾಲದಲ್ಲಿ ಅನೇಕ ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ. ಈ ಸಾಮಾನ್ಯ ಸನ್ನಿವೇಶಗಳನ್ನು ಪರಿಗಣಿಸಿ:
- ಬಳಕೆದಾರರ ಸಂವಹನಗಳು: ಬಳಕೆದಾರರು ಸಾಮಾಜಿಕ ಮಾಧ್ಯಮದ ಪೋಸ್ಟ್ನಲ್ಲಿ 'ಲೈಕ್' ಬಟನ್ ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡುತ್ತಾರೆ. ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಎಪಿಐ ಕರೆಯು ಸರ್ವರ್ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡುವಾಗ ಯುಐ ತಕ್ಷಣವೇ ಕ್ರಿಯೆಯನ್ನು ಪ್ರತಿಬಿಂಬಿಸಬೇಕು ('ಲೈಕ್' ಸಂಖ್ಯೆ ಹೆಚ್ಚಾಗುತ್ತದೆ).
- ಡೇಟಾ ಸಿಂಕ್ರೊನೈಸೇಶನ್: ಬಳಕೆದಾರರು ಸಹಯೋಗದ ವಾತಾವರಣದಲ್ಲಿ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಎಡಿಟ್ ಮಾಡುತ್ತಾರೆ. ಬದಲಾವಣೆಗಳು ತಕ್ಷಣದ ಪ್ರತಿಕ್ರಿಯೆಗಾಗಿ ಸ್ಥಳೀಯವಾಗಿ ಪ್ರತಿಬಿಂಬಿಸಬೇಕು, ಮತ್ತು ನಂತರ ರಿಮೋಟ್ ಸರ್ವರ್ನೊಂದಿಗೆ ಸಿಂಕ್ರೊನೈಸ್ ಆಗಬೇಕು.
- ಫಾರ್ಮ್ ಸಲ್ಲಿಕೆಗಳು: ಬಳಕೆದಾರರು ಫಾರ್ಮ್ ಅನ್ನು ಸಲ್ಲಿಸುತ್ತಾರೆ. ಡೇಟಾವನ್ನು ಸರ್ವರ್ಗೆ ಕಳುಹಿಸುವಾಗ ಯುಐ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು (ಉದಾಹರಣೆಗೆ, 'ಸೇವಿಂಗ್' ಸೂಚಕ) ನೀಡುತ್ತದೆ.
ಈ ಪ್ರತಿಯೊಂದು ಸನ್ನಿವೇಶದಲ್ಲಿ, ಯುಐ ಬಳಕೆದಾರರ ಕ್ರಿಯೆಯ ಆಧಾರದ ಮೇಲೆ ತಕ್ಷಣದ ದೃಶ್ಯ ಬದಲಾವಣೆಯನ್ನು ಪ್ರಸ್ತುತಪಡಿಸುತ್ತದೆ. ಇದನ್ನು ಸಾಮಾನ್ಯವಾಗಿ 'ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಯುಐ' ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ - ಕ್ರಿಯೆಯು ಯಶಸ್ವಿಯಾಗುತ್ತದೆ ಎಂದು ಭಾವಿಸುವುದು. ಆದಾಗ್ಯೂ, ಸರ್ವರ್-ಸೈಡ್ ಕಾರ್ಯಾಚರಣೆಯ ನಿಜವಾದ ಫಲಿತಾಂಶ (ಯಶಸ್ಸು ಅಥವಾ ವೈಫಲ್ಯ) ನಿರ್ಧರಿಸಲು ಹೆಚ್ಚು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು. ಇದು ರೇಸ್ ಕಂಡೀಷನ್ಗಳ ಸಂಭಾವ್ಯತೆಯನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ, ಅಲ್ಲಿ ಕಾರ್ಯಾಚರಣೆಗಳ ಕ್ರಮ ಮತ್ತು ಡೇಟಾ ಅಪ್ಡೇಟ್ಗಳು ಅಸಂಗತತೆಗಳಿಗೆ ಮತ್ತು ಕಳಪೆ ಬಳಕೆದಾರರ ಅನುಭವಕ್ಕೆ ಕಾರಣವಾಗಬಹುದು.
ಒಂದು ಪ್ರೋಗ್ರಾಂನ ಫಲಿತಾಂಶವು ಏಕಕಾಲೀನ ಕಾರ್ಯಾಚರಣೆಗಳು ಕಾರ್ಯಗತಗೊಳ್ಳುವ ಅನಿರೀಕ್ಷಿತ ಕ್ರಮವನ್ನು ಅವಲಂಬಿಸಿದಾಗ ರೇಸ್ ಕಂಡೀಷನ್ ಸಂಭವಿಸುತ್ತದೆ. ಯುಐ ಅಪ್ಡೇಟ್ಗಳು ಮತ್ತು ಅಸಿಂಕ್ರೋನಸ್ ಎಪಿಐ ಕರೆಗಳ ಸಂದರ್ಭದಲ್ಲಿ, ರೇಸ್ ಕಂಡೀಷನ್ ಈ ಕೆಳಗಿನವುಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು:
- ತಪ್ಪಾದ ಡೇಟಾ: ಸರ್ವರ್ ಅಪ್ಡೇಟ್ ವಿಫಲಗೊಳ್ಳುತ್ತದೆ, ಆದರೆ ಯುಐ ಇನ್ನೂ ಯಶಸ್ವಿ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ.
- ವಿರೋಧಾತ್ಮಕ ಅಪ್ಡೇಟ್ಗಳು: ಏಕಕಾಲದಲ್ಲಿ ಅನೇಕ ಅಪ್ಡೇಟ್ಗಳು ಸಂಭವಿಸಿ, ಡೇಟಾ ಭ್ರಷ್ಟಾಚಾರ ಅಥವಾ ಪ್ರದರ್ಶನ ಸಮಸ್ಯೆಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ.
- ವಿಳಂಬಿತ ಪ್ರತಿಕ್ರಿಯೆ: ಸರ್ವರ್ ಪ್ರತಿಕ್ರಿಯೆಗಳಿಗಾಗಿ ಕಾಯುತ್ತಿರುವಾಗ ಯುಐ ಫ್ರೀಜ್ ಆಗುತ್ತದೆ ಅಥವಾ ಸ್ಪಂದಿಸುವುದಿಲ್ಲ.
experimental_useOptimistic ಅನ್ನು ಪರಿಚಯಿಸುವುದು: ಏಕಕಾಲೀನ ಅಪ್ಡೇಟ್ಗಳಿಗೆ ಒಂದು ಪರಿಹಾರ
ರಿಯಾಕ್ಟ್ನ experimental_useOptimistic
ಹುಕ್ ಏಕಕಾಲೀನ ಅಪ್ಡೇಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ರೇಸ್ ಕಂಡೀಷನ್ಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಅಪಾಯಗಳನ್ನು ತಗ್ಗಿಸಲು ಒಂದು ಯಾಂತ್ರಿಕ ವ್ಯವಸ್ಥೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಇದು ಡೆವಲಪರ್ಗಳಿಗೆ ಇದನ್ನು ಅನುಮತಿಸುತ್ತದೆ:
- ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಯುಐ ರಚಿಸಿ: ಬಳಕೆದಾರರ ಕ್ರಿಯೆಗಳನ್ನು ತಕ್ಷಣವೇ ಯುಐ ನಲ್ಲಿ ಪ್ರತಿಬಿಂಬಿಸಿ, ಗ್ರಹಿಸಿದ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ.
- ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಸರಾಗವಾಗಿ ನಿರ್ವಹಿಸಿ: ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಗಳ ಜೀವನಚಕ್ರವನ್ನು ನಿರ್ವಹಿಸಿ ಮತ್ತು ಡೇಟಾ ಸ್ಥಿರತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
- ವೈಫಲ್ಯದ ಮೇಲೆ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಹಿಂತಿರುಗಿಸಿ: ಸರ್ವರ್-ಸೈಡ್ ಕಾರ್ಯಾಚರಣೆ ವಿಫಲವಾದರೆ ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಸುಲಭವಾಗಿ ಹಿಂಪಡೆಯಿರಿ.
- ಲೋಡಿಂಗ್ ಮತ್ತು ಎರರ್ ಸ್ಥಿತಿಗಳನ್ನು ನಿರ್ವಹಿಸಿ: ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಾಚರಣೆಗಳ ಸಮಯದಲ್ಲಿ ಬಳಕೆದಾರರಿಗೆ ಸ್ಪಷ್ಟ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನೀಡಿ.
ಅದರ ಮೂಲದಲ್ಲಿ, experimental_useOptimistic
ನಿಮಗೆ ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಸ್ಟೇಟ್ ಮತ್ತು ಆ ಸ್ಟೇಟ್ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲು ಒಂದು ಫಂಕ್ಷನ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಅವಕಾಶ ನೀಡುವ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು 'ಆಪ್ಟಿಮಿಸ್ಟಿಕ್' ಅಪ್ಡೇಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಸಂಭಾವ್ಯ ವೈಫಲ್ಯಗಳನ್ನು ನಿಭಾಯಿಸಲು ಯಾಂತ್ರಿಕ ವ್ಯವಸ್ಥೆಗಳನ್ನು ಸಹ ಒದಗಿಸುತ್ತದೆ.
ಪ್ರಮುಖ ಪರಿಕಲ್ಪನೆಗಳು
- ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಸ್ಟೇಟ್: ಬಳಕೆದಾರರ ಕ್ರಿಯೆಯ ಆಧಾರದ ಮೇಲೆ ತಕ್ಷಣವೇ ಅಪ್ಡೇಟ್ ಆಗುವ ಸ್ಟೇಟ್ (ಉದಾಹರಣೆಗೆ, 'ಲೈಕ್' ಕೌಂಟ್).
- ಅಪ್ಡೇಟ್ ಫಂಕ್ಷನ್: ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಸ್ಟೇಟ್ ಅನ್ನು ಹೇಗೆ ಅಪ್ಡೇಟ್ ಮಾಡುವುದು ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸುವ ಫಂಕ್ಷನ್ (ಉದಾಹರಣೆಗೆ, 'ಲೈಕ್' ಕೌಂಟ್ ಅನ್ನು ಹೆಚ್ಚಿಸುವುದು).
- ರೋಲ್ಬ್ಯಾಕ್ ಫಂಕ್ಷನ್: ಆಧಾರವಾಗಿರುವ ಕಾರ್ಯಾಚರಣೆ ವಿಫಲವಾದರೆ ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಅಪ್ಡೇಟ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಲು ಒಂದು ಫಂಕ್ಷನ್.
ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳು: experimental_useOptimistic ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದು
experimental_useOptimistic
ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದರ ಕೆಲವು ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳನ್ನು ನೋಡೋಣ. ಈ ಉದಾಹರಣೆಗಳು ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಯುಐ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುವುದು, ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿಭಾಯಿಸುವುದು ಮತ್ತು ಸಂಭಾವ್ಯ ರೇಸ್ ಕಂಡೀಷನ್ಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವುದು ಹೇಗೆ ಎಂಬುದನ್ನು ವಿವರಿಸುತ್ತದೆ.
ಉದಾಹರಣೆ 1: ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ 'ಲೈಕ್' ಬಟನ್ (ಜಾಗತಿಕ ಅಪ್ಲಿಕೇಶನ್)
ಜಾಗತಿಕ ಸಾಮಾಜಿಕ ಮಾಧ್ಯಮ ವೇದಿಕೆಯನ್ನು ಪರಿಗಣಿಸಿ. ವಿವಿಧ ದೇಶಗಳ (ಉದಾ., ಜಪಾನ್, ಬ್ರೆಜಿಲ್, ಜರ್ಮನಿ) ಬಳಕೆದಾರರು ಪೋಸ್ಟ್ಗಳನ್ನು 'ಲೈಕ್' ಮಾಡಬಹುದು. ಬ್ಯಾಕೆಂಡ್ ಅಪ್ಡೇಟ್ ಆಗುತ್ತಿರುವಾಗ ಯುಐ ತಕ್ಷಣವೇ 'ಲೈಕ್' ಅನ್ನು ಪ್ರತಿಬಿಂಬಿಸಬೇಕು. ಇದನ್ನು ಸಾಧಿಸಲು ನಾವು experimental_useOptimistic
ಅನ್ನು ಬಳಸುತ್ತೇವೆ.
import React, { experimental_useOptimistic, useState } from 'react';
function Post({ postId, likeCount, onLike }) {
const [optimisticLikes, addOptimisticLike] = experimental_useOptimistic(
likeCount, // Initial value
(currentLikes) => currentLikes + 1, // Update function
(currentLikes, originalLikeCount) => originalLikeCount // Rollback function
);
const [isLiking, setIsLiking] = useState(false);
const [likeError, setLikeError] = useState(null);
const handleLike = async () => {
setIsLiking(true);
setLikeError(null);
const optimisticId = addOptimisticLike(likeCount);
try {
await onLike(postId);
} catch (error) {
setLikeError(error);
// Revert the optimistic update
addOptimisticLike(likeCount, optimisticId);
} finally {
setIsLiking(false);
}
};
return (
Likes: {optimisticLikes}
{likeError && Error liking post: {likeError.message}
}
);
}
// Example usage (assuming an API call)
function App() {
const [posts, setPosts] = useState([
{ id: 1, likeCount: 10 },
{ id: 2, likeCount: 5 },
]);
const handleLike = async (postId) => {
// Simulate an API call (e.g., to a server in the US)
await new Promise((resolve) => setTimeout(resolve, 1000));
// Simulate a potential error (e.g., network issue)
// if (Math.random() < 0.2) {
// throw new Error('Failed to like post.');
// }
// Update the post's like count on the server (in a real application)
setPosts((prevPosts) =>
prevPosts.map((post) =>
post.id === postId ? { ...post, likeCount: post.likeCount + 1 } : post
)
);
};
return (
{posts.map((post) => (
))}
);
}
export default App;
ಈ ಉದಾಹರಣೆಯಲ್ಲಿ:
experimental_useOptimistic
ಅನ್ನು 'ಲೈಕ್' ಕೌಂಟ್ ನಿರ್ವಹಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. ಆರಂಭಿಕ ಮೌಲ್ಯವನ್ನು (ಉದಾ., ಡೇಟಾಬೇಸ್ನಿಂದ) ಪಡೆಯಲಾಗುತ್ತದೆ.- ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ಅಪ್ಡೇಟ್ ಫಂಕ್ಷನ್ ತಕ್ಷಣವೇ ಸ್ಥಳೀಯ 'ಲೈಕ್' ಕೌಂಟ್ ಅನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ.
handleLike
ಫಂಕ್ಷನ್ ಎಪಿಐ ಕರೆಯನ್ನು ಅನುಕರಿಸುತ್ತದೆ. ಇದು ಲೋಡಿಂಗ್ ಅನ್ನು ಸೂಚಿಸಲು ಬಟನ್ಗಾಗಿ `isLiking` ಸ್ಥಿತಿಯನ್ನು ಸಹ ಹೊಂದಿಸುತ್ತದೆ.- ಎಪಿಐ ಕರೆ ವಿಫಲವಾದರೆ, ನಾವು ದೋಷ ಸಂದೇಶವನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತೇವೆ ಮತ್ತು ರೋಲ್ಬ್ಯಾಕ್ ಫಂಕ್ಷನ್ ಮೂಲಕ ಯುಐ ಅಪ್ಡೇಟ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಲು ಮೂಲ `likeCount` ನೊಂದಿಗೆ `addOptimisticLike` ಅನ್ನು ಮತ್ತೆ ಬಳಸುತ್ತೇವೆ.
ಉದಾಹರಣೆ 2: 'ಸೇವಿಂಗ್' ಸೂಚಕವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದು (ಜಾಗತಿಕ ಸಹಯೋಗ ಸಾಧನ)
ಜಾಗತಿಕ ಡಾಕ್ಯುಮೆಂಟ್ ಎಡಿಟಿಂಗ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ, ಅಲ್ಲಿ ವಿವಿಧ ದೇಶಗಳ (ಉದಾ., ಭಾರತ, ಕೆನಡಾ, ಫ್ರಾನ್ಸ್) ಬಳಕೆದಾರರು ಡಾಕ್ಯುಮೆಂಟ್ನಲ್ಲಿ ಸಹಯೋಗಿಸುತ್ತಾರೆ. ಪ್ರತಿ ಕೀಸ್ಟ್ರೋಕ್ 'ಸೇವಿಂಗ್' ಸೂಚಕವನ್ನು ಪ್ರಚೋದಿಸಬೇಕು, ಮತ್ತು ಬದಲಾವಣೆಗಳನ್ನು ಅಸಿಂಕ್ರೋನಸ್ ಆಗಿ ಸರ್ವರ್ಗೆ ಉಳಿಸಲಾಗುತ್ತದೆ. ಈ ಉದಾಹರಣೆಯು ಸೇವಿಂಗ್ ಸೂಚಕವನ್ನು ಪ್ರದರ್ಶಿಸಲು ಹುಕ್ ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ.
import React, { experimental_useOptimistic, useState, useEffect } from 'react';
function DocumentEditor({ documentId, content, onContentChange }) {
const [optimisticContent, setOptimisticContent] = experimental_useOptimistic(
content, // Initial content
(currentContent, newContent) => newContent, // Update function
(currentContent, originalContent) => originalContent // Rollback function
);
const [isSaving, setIsSaving] = useState(false);
const [saveError, setSaveError] = useState(null);
useEffect(() => {
const saveContent = async () => {
if (!isSaving && optimisticContent !== content) {
setIsSaving(true);
setSaveError(null);
try {
await onContentChange(documentId, optimisticContent);
} catch (error) {
setSaveError(error);
// Optionally, revert the content on error.
}
finally {
setIsSaving(false);
}
}
};
saveContent();
}, [optimisticContent, content, documentId, onContentChange, isSaving]);
const handleChange = (event) => {
setOptimisticContent(event.target.value);
};
return (
{isSaving && Saving...}
{saveError && Error saving: {saveError.message}
}
);
}
function App() {
const [documentContent, setDocumentContent] = useState('Initial content');
const handleContentChange = async (documentId, newContent) => {
// Simulate an API call (e.g., to a server in Australia)
await new Promise((resolve) => setTimeout(resolve, 1500));
// Simulate a potential error
if (Math.random() < 0.1) {
throw new Error('Failed to save document.');
}
setDocumentContent(newContent);
};
return (
);
}
export default App;
ಈ ಉದಾಹರಣೆಯಲ್ಲಿ:
experimental_useOptimistic
ಡಾಕ್ಯುಮೆಂಟ್ನ ವಿಷಯವನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.- ಅಪ್ಡೇಟ್ ಫಂಕ್ಷನ್
textarea
ನಲ್ಲಿ ಬಳಕೆದಾರರ ಇನ್ಪುಟ್ ಅನ್ನು ತಕ್ಷಣವೇ ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ. useEffect
ಹುಕ್ ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ವಿಷಯವು ಬದಲಾದಾಗ (ಮತ್ತು ಆರಂಭಿಕ ವಿಷಯಕ್ಕಿಂತ ಭಿನ್ನವಾಗಿದ್ದಾಗ) ಅಸಿಂಕ್ರೋನಸ್ ಸೇವ್ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪ್ರಚೋದಿಸುತ್ತದೆ.- ಸೇವ್ ಕಾರ್ಯಾಚರಣೆಯ ಸಮಯದಲ್ಲಿ ಯುಐ 'ಸೇವಿಂಗ್...' ಸೂಚಕವನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ, ಬಳಕೆದಾರರಿಗೆ ಸ್ಪಷ್ಟ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನೀಡುತ್ತದೆ.
- ಎಪಿಐ ಕರೆ ವಿಫಲವಾದರೆ ಯಾವುದೇ ಬದಲಾವಣೆಗಳನ್ನು ಹಿಂತಿರುಗಿಸಲು ಮತ್ತು `content` ಮೌಲ್ಯದೊಂದಿಗೆ ಮರು-ರೆಂಡರ್ ಮಾಡಲು ಹೆಚ್ಚು ಅತ್ಯಾಧುನಿಕ ಅನುಷ್ಠಾನದಲ್ಲಿ ರೋಲ್ಬ್ಯಾಕ್ ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸಬಹುದು.
ಸುಧಾರಿತ ಬಳಕೆಯ ಪ್ರಕರಣಗಳು ಮತ್ತು ಪರಿಗಣನೆಗಳು
ಅಪ್ಡೇಟ್ಗಳನ್ನು ಬ್ಯಾಚಿಂಗ್ ಮಾಡುವುದು
ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ, ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಲು ಮತ್ತು ಮರು-ರೆಂಡರ್ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲು ನೀವು ಬಹು ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಬ್ಯಾಚ್ ಮಾಡಲು ಬಯಸಬಹುದು. experimental_useOptimistic
ಇದನ್ನು ನಿಭಾಯಿಸಬಲ್ಲದು, ಆದರೂ ನಿರ್ದಿಷ್ಟ ಅನುಷ್ಠಾನವು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ನ ಅವಶ್ಯಕತೆಗಳನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ.
ಒಂದು ಸಾಮಾನ್ಯ ವಿಧಾನವೆಂದರೆ ಅನೇಕ ಪ್ರಾಪರ್ಟಿಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಒಂದೇ ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಸ್ಟೇಟ್ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಬಳಸುವುದು. ಒಂದು ಕ್ರಿಯೆಯು ಅನೇಕ ಪ್ರಾಪರ್ಟಿಗಳನ್ನು ಬದಲಾಯಿಸಿದಾಗ, ನೀವು ಅವುಗಳನ್ನು ಏಕಕಾಲದಲ್ಲಿ ಅಪ್ಡೇಟ್ ಮಾಡಬಹುದು.
ದೋಷ ನಿರ್ವಹಣೆ ಮತ್ತು ರೋಲ್ಬ್ಯಾಕ್ ತಂತ್ರಗಳು
ಉತ್ತಮ ಬಳಕೆದಾರರ ಅನುಭವಕ್ಕಾಗಿ ದೃಢವಾದ ದೋಷ ನಿರ್ವಹಣೆ ನಿರ್ಣಾಯಕವಾಗಿದೆ. ಎಪಿಐ ಕರೆ ವಿಫಲವಾದಾಗ, ದೋಷವನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸಬೇಕೆಂದು ನೀವು ನಿರ್ಧರಿಸಬೇಕಾಗುತ್ತದೆ. ಸಾಮಾನ್ಯ ತಂತ್ರಗಳು ಸೇರಿವೆ:
- ದೋಷ ಸಂದೇಶಗಳನ್ನು ಪ್ರದರ್ಶಿಸುವುದು: ಬಳಕೆದಾರರಿಗೆ ಸ್ಪಷ್ಟ ದೋಷ ಸಂದೇಶಗಳನ್ನು ನೀಡಿ, ಏನು ತಪ್ಪಾಗಿದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ.
- ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಹಿಂತಿರುಗಿಸುವುದು: ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಯುಐ ಬದಲಾವಣೆಗಳನ್ನು ಹಿಂದಿನ ಸ್ಥಿತಿಗೆ ಹಿಂತಿರುಗಿಸಿ.
- ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಮರುಪ್ರಯತ್ನಿಸುವುದು: ಅಸ್ಥಿರ ದೋಷಗಳಿಗಾಗಿ ಮರುಪ್ರಯತ್ನ ಯಾಂತ್ರಿಕ ವ್ಯವಸ್ಥೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿ.
ತಂತ್ರದ ಆಯ್ಕೆಯು ದೋಷದ ತೀವ್ರತೆ ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಬಳಕೆದಾರರ ಸಂವಹನವನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ.
ಪರೀಕ್ಷೆ ಮತ್ತು ಡೀಬಗ್ ಮಾಡುವುದು
experimental_useOptimistic
ಬಳಸುವ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಪರೀಕ್ಷಿಸಲು ಎಚ್ಚರಿಕೆಯ ಪರಿಗಣನೆ ಅಗತ್ಯ:
- ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಮಾಕಿಂಗ್ ಮಾಡುವುದು: ಎಪಿಐ ಕರೆಗಳನ್ನು ಮಾಕ್ ಮಾಡಲು ಮತ್ತು ವಿಭಿನ್ನ ಸನ್ನಿವೇಶಗಳನ್ನು (ಯಶಸ್ಸು, ವೈಫಲ್ಯ, ನೆಟ್ವರ್ಕ್ ಸಮಸ್ಯೆಗಳು) ಅನುಕರಿಸಲು ಮಾಕಿಂಗ್ ಫ್ರೇಮ್ವರ್ಕ್ಗಳನ್ನು (ಉದಾ., Jest, React Testing Library) ಬಳಸಿ.
- ಯುಐ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಪರೀಕ್ಷಿಸುವುದು: ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಅಪ್ಡೇಟ್ಗಳು ಮತ್ತು ದೋಷ ಪರಿಸ್ಥಿತಿಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯೆಯಾಗಿ ಯುಐ ಸರಿಯಾಗಿ ಅಪ್ಡೇಟ್ ಆಗಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ.
- ಡೀಬಗ್ ಮಾಡುವ ಪರಿಕರಗಳು: ಸ್ಟೇಟ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಲು ಮತ್ತು ಸಂಭಾವ್ಯ ಸಮಸ್ಯೆಗಳನ್ನು ಗುರುತಿಸಲು ಬ್ರೌಸರ್ ಡೆವಲಪರ್ ಪರಿಕರಗಳನ್ನು (ಉದಾ., React DevTools) ಬಳಸಿ.
ಜಾಗತಿಕ ಪರಿಗಣನೆಗಳು ಮತ್ತು ಸ್ಥಳೀಕರಣ
experimental_useOptimistic
ನೊಂದಿಗೆ ಜಾಗತಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸುವಾಗ, ಈ ಅಂಶಗಳನ್ನು ಪರಿಗಣಿಸಿ:
- ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ನೆಟ್ವರ್ಕ್ ಲೇಟೆನ್ಸಿ: ಹೆಚ್ಚಿನ ನೆಟ್ವರ್ಕ್ ಲೇಟೆನ್ಸಿ ಇರುವ ಪ್ರದೇಶಗಳಲ್ಲಿ ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಯುಐ ನ ಕಾರ್ಯಕ್ಷಮತೆಯ ಪ್ರಭಾವವು ವಿಶೇಷವಾಗಿ ಮುಖ್ಯವಾಗಿರುತ್ತದೆ. ನಿಮ್ಮ ಎಪಿಐ ಕರೆಗಳನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡಿ ಮತ್ತು ಡೇಟಾ ಕ್ಯಾಶಿಂಗ್ನಂತಹ ತಂತ್ರಗಳನ್ನು ಪರಿಗಣಿಸಿ.
- ಸ್ಥಳೀಕರಣ: ಎಲ್ಲಾ ದೋಷ ಸಂದೇಶಗಳು ಮತ್ತು ಯುಐ ಅಂಶಗಳು ವಿವಿಧ ಭಾಷೆಗಳು ಮತ್ತು ಸಂಸ್ಕೃತಿಗಳಿಗೆ ಸ್ಥಳೀಕರಿಸಲ್ಪಟ್ಟಿವೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
- ಸಮಯ ವಲಯಗಳು ಮತ್ತು ದಿನಾಂಕ/ಸಮಯ ಫಾರ್ಮ್ಯಾಟ್ಗಳು: ವಿವಿಧ ಸಮಯ ವಲಯಗಳಲ್ಲಿನ ಬಳಕೆದಾರರಿಗೆ ಗೊಂದಲವನ್ನು ತಪ್ಪಿಸಲು ದಿನಾಂಕ/ಸಮಯ ಫಾರ್ಮ್ಯಾಟ್ಗಳನ್ನು ಸರಿಯಾಗಿ ನಿರ್ವಹಿಸಿ.
- ಕರೆನ್ಸಿ ಮತ್ತು ಸಂಖ್ಯೆ ಫಾರ್ಮ್ಯಾಟಿಂಗ್: ವಿವಿಧ ಪ್ರದೇಶಗಳಿಗೆ ಕರೆನ್ಸಿ ಮತ್ತು ಸಂಖ್ಯೆಗಳನ್ನು ಸೂಕ್ತವಾಗಿ ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಿ.
- ಪ್ರವೇಶಸಾಧ್ಯತೆ: ಬಳಕೆದಾರರ ಸ್ಥಳವನ್ನು ಲೆಕ್ಕಿಸದೆ, ವಿಕಲಾಂಗ ಬಳಕೆದಾರರಿಗೆ ಯುಐ ಪ್ರವೇಶಿಸಬಹುದೆಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ಇದು ARIA ಗುಣಲಕ್ಷಣಗಳು, ಬಣ್ಣದ ಕಾಂಟ್ರಾಸ್ಟ್, ಮತ್ತು ಕೀಬೋರ್ಡ್ ನ್ಯಾವಿಗೇಷನ್ನ ಸರಿಯಾದ ಬಳಕೆಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.
ಅತ್ಯುತ್ತಮ ಅಭ್ಯಾಸಗಳು ಮತ್ತು ಕ್ರಿಯಾತ್ಮಕ ಒಳನೋಟಗಳು
- ಸರಳವಾಗಿ ಪ್ರಾರಂಭಿಸಿ: ಸಂಕೀರ್ಣ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮೊದಲು
experimental_useOptimistic
ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸರಳ ಬಳಕೆಯ ಪ್ರಕರಣಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಿ. - ಬಳಕೆದಾರರ ಅನುಭವಕ್ಕೆ ಆದ್ಯತೆ ನೀಡಿ: ಯಾವಾಗಲೂ ಬಳಕೆದಾರರ ಅನುಭವಕ್ಕೆ ಆದ್ಯತೆ ನೀಡಿ. ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸುವಾಗಲೂ ಯುಐ ಸ್ಪಂದನಾಶೀಲವಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
- ದೋಷಗಳನ್ನು ಸರಾಗವಾಗಿ ನಿರ್ವಹಿಸಿ: ಬಳಕೆದಾರರಿಗೆ ಸಹಾಯಕವಾದ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನೀಡಲು ಮತ್ತು ಡೇಟಾ ಅಸಂಗತತೆಗಳನ್ನು ತಡೆಯಲು ದೃಢವಾದ ದೋಷ ನಿರ್ವಹಣೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿ.
- ಸಂಪೂರ್ಣವಾಗಿ ಪರೀಕ್ಷಿಸಿ: ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಏಕಕಾಲೀನ ಅಪ್ಡೇಟ್ಗಳು ಮತ್ತು ರೇಸ್ ಕಂಡೀಷನ್ಗಳನ್ನು ಸರಿಯಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಅದನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಪರೀಕ್ಷಿಸಿ.
- ನೆಟ್ವರ್ಕ್ ಪರಿಸ್ಥಿತಿಗಳನ್ನು ಪರಿಗಣಿಸಿ: ವಿವಿಧ ಪ್ರದೇಶಗಳಲ್ಲಿನ ಬದಲಾಗುವ ನೆಟ್ವರ್ಕ್ ಪರಿಸ್ಥಿತಿಗಳನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಿ. ನಿಮ್ಮ ಎಪಿಐ ಕರೆಗಳನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡಿ ಮತ್ತು ಸೂಕ್ತವಾದಾಗ ಕ್ಯಾಶಿಂಗ್ ಬಳಸಿ.
- ಸರ್ವರ್ನಲ್ಲಿ ಅಟಾಮಿಕ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಿ: ನಿಮ್ಮ ಸರ್ವರ್-ಸೈಡ್ ಲಾಜಿಕ್ನಲ್ಲಿ, ಅಟಾಮಿಕ್ ಕಾರ್ಯಾಚರಣೆಗಳಿಗೆ ಆದ್ಯತೆ ನೀಡಿ.
ತೀರ್ಮಾನ: ಏಕಕಾಲೀನ ಅಪ್ಡೇಟ್ ನಿರ್ವಹಣೆಯೊಂದಿಗೆ ಜಾಗತಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಸಶಕ್ತಗೊಳಿಸುವುದು
ರಿಯಾಕ್ಟ್ನ experimental_useOptimistic
ಹುಕ್ ಆಧುನಿಕ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಏಕಕಾಲೀನ ಅಪ್ಡೇಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಬಳಕೆದಾರರ ಅನುಭವವನ್ನು ಸುಧಾರಿಸಲು ಒಂದು ಶಕ್ತಿಯುತ ಮತ್ತು ಸೊಗಸಾದ ಪರಿಹಾರವನ್ನು ನೀಡುತ್ತದೆ. ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಯುಐ ಅನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವ ಮೂಲಕ, ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಸರಾಗವಾಗಿ ನಿರ್ವಹಿಸುವ ಮೂಲಕ ಮತ್ತು ಬಳಕೆದಾರರಿಗೆ ಸ್ಪಷ್ಟ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನೀಡುವ ಮೂಲಕ, ನೀವು ಹೆಚ್ಚು ಸ್ಪಂದನಾಶೀಲ ಮತ್ತು ಸ್ಥಿತಿಸ್ಥಾಪಕ ಜಾಗತಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಬಹುದು.
ಈ ಮಾರ್ಗದರ್ಶಿ experimental_useOptimistic
ನ ಸಮಗ್ರ ಅವಲೋಕನವನ್ನು ಒದಗಿಸಿದೆ, ಅದರ ಪ್ರಮುಖ ಪರಿಕಲ್ಪನೆಗಳು, ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳು ಮತ್ತು ಜಾಗತಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಪರಿಗಣನೆಗಳನ್ನು ಒಳಗೊಂಡಂತೆ. ಈ ಶಕ್ತಿಯುತ ಸಾಧನವನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ, ಡೆವಲಪರ್ಗಳು ತಮ್ಮ ರಿಯಾಕ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಬಳಕೆದಾರರ ಅನುಭವವನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಹೆಚ್ಚಿಸಬಹುದು, ಅವರ ಬಳಕೆದಾರರ ಭೌಗೋಳಿಕ ಸ್ಥಳಗಳು ಮತ್ತು ತಾಂತ್ರಿಕ ಸವಾಲುಗಳನ್ನು ಲೆಕ್ಕಿಸದೆ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳು ನಾವೀನ್ಯತೆಯ ಮುಂಚೂಣಿಯಲ್ಲಿ ಉಳಿಯುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ರಿಯಾಕ್ಟ್ ಮತ್ತು ಫ್ರಂಟ್-ಎಂಡ್ ಡೆವಲಪ್ಮೆಂಟ್ನಲ್ಲಿನ ಇತ್ತೀಚಿನ ಪ್ರಗತಿಗಳ ಬಗ್ಗೆ ನವೀಕೃತವಾಗಿರಲು ಮರೆಯದಿರಿ.