{"id":26439,"date":"2026-07-08T20:35:25","date_gmt":"2026-07-08T20:35:25","guid":{"rendered":"https:\/\/umang.pk\/2026\/07\/08\/%d8%a7%db%8c%d9%be-%d8%b3%d9%b9%d9%b9%d8%b1-%da%a9%d9%88-%da%a9%db%8c%d8%b3%db%92-%d9%b9%da%be%db%8c%da%a9-%da%a9%d8%b1%db%8c%da%ba-%da%88%db%8c%d9%88-%d9%b9%d9%88%d9%84%d8%b2-%da%a9%db%92-%d8%b3\/"},"modified":"2026-07-08T20:35:25","modified_gmt":"2026-07-08T20:35:25","slug":"%d8%a7%db%8c%d9%be-%d8%b3%d9%b9%d9%b9%d8%b1-%da%a9%d9%88-%da%a9%db%8c%d8%b3%db%92-%d9%b9%da%be%db%8c%da%a9-%da%a9%d8%b1%db%8c%da%ba-%da%88%db%8c%d9%88-%d9%b9%d9%88%d9%84%d8%b2-%da%a9%db%92-%d8%b3","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/07\/08\/%d8%a7%db%8c%d9%be-%d8%b3%d9%b9%d9%b9%d8%b1-%da%a9%d9%88-%da%a9%db%8c%d8%b3%db%92-%d9%b9%da%be%db%8c%da%a9-%da%a9%d8%b1%db%8c%da%ba-%da%88%db%8c%d9%88-%d9%b9%d9%88%d9%84%d8%b2-%da%a9%db%92-%d8%b3\/","title":{"rendered":"\u0627\u06cc\u067e \u0633\u0679\u0679\u0631 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba: \u0688\u06cc\u0648 \u0679\u0648\u0644\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u06a9\u06cc \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0639\u0645\u0644\u06cc \u06af\u0627\u0626\u06cc\u0688"},"content":{"rendered":"\n<div id=\"\">\n<p>\u067e\u06be\u0691\u067e\u06be\u0691\u0627\u06c1\u0679 \u0622\u067e \u06a9\u0648 \u062e\u0648\u0628\u0635\u0648\u0631\u062a UI \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u0628\u0646\u0627\u0646\u06d2 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631\u0686\u06c1 \u06cc\u06c1 \u0631\u0641\u062a\u0627\u0631 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u0633\u0628 \u0633\u06d2 \u0628\u0691\u06d2 \u0641\u0648\u0627\u0626\u062f \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0633\u06d2 \u0628\u0627\u0631\u06cc\u06a9 \u0645\u0633\u0627\u0626\u0644 \u0628\u06be\u06cc \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2 \u0627\u0648\u0631 \u0635\u062d\u06cc\u062d \u0679\u0648\u0644\u0632 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0645\u0634\u06a9\u0644 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u06a9\u0644\u0627\u0646\u0627 (\u0645\u0631\u0626\u06cc \u06c1\u06a9\u0644\u0627\u0646\u0627\u060c \u06c1\u06a9\u0644\u0627\u0646\u0627\u060c \u0627\u0648\u0631 \u062c\u0645\u0646\u0627) \u0634\u0627\u0630 \u0648 \u0646\u0627\u062f\u0631 \u06c1\u06cc \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u0627\u0633 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062c\u0628 \u0645\u0633\u0626\u0644\u06c1 \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u0646\u0648 \u06a9\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0646\u06cc\u0679 \u0648\u0631\u06a9\u0646\u06af \u0627\u0633 \u06a9\u0627 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0645\u0633\u0626\u0644\u06c1 \u0645\u0642\u0627\u0645\u06cc \u062a\u0646\u06c1\u0627\u0626\u06cc \u0645\u06cc\u06ba \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u062a\u062c\u0632\u06cc\u06c1 \u06c1\u06d2\u060c \u062a\u0648 \u0633\u0633\u062a API \u06a9\u06cc \u0686\u06be\u0627\u0646 \u0628\u06cc\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0627\u0635\u0644 \u0645\u062c\u0631\u0645 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u06cc\u0645\u06cc\u0634\u0646 \u06c1\u06d2 \u062c\u0648 \u06c1\u0631 \u0641\u0631\u06cc\u0645 \u0645\u06cc\u06ba SaveLayer \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0631\u06cc\u0627\u0633\u062a\u06cc \u0627\u0646\u062a\u0638\u0627\u0645\u06cc\u06c1 \u06a9\u0648 \u0631\u06cc \u0641\u06cc\u06a9\u0679\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u0627 \u0645\u0633\u0626\u0644\u06c1 \u0642\u06cc\u0627\u0633 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06cc \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0646\u06af \u062f\u0648 \u0628\u0627\u0644\u06a9\u0644 \u0645\u062e\u062a\u0644\u0641 \u0633\u0631\u06af\u0631\u0645\u06cc\u0627\u06ba \u06c1\u06cc\u06ba\u06d4 Flutter DevTools \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0646\u06af \u06a9\u0648 \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc\u060c \u062f\u0631\u0633\u062a \u0627\u0648\u0631 \u0642\u0627\u0628\u0644 \u0639\u0645\u0644 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u0636\u0645\u0648\u0646 \u0627\u0633\u06d2 \u0645\u0624\u062b\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0639\u0645\u0644\u06cc \u0631\u06c1\u0646\u0645\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-what-jank-actually-is\">\u062c\u06cc\u06a9 \u0648\u0627\u0642\u0639\u06cc \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p>\u067e\u06be\u0691\u067e\u06be\u0691\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0627\u06cc\u067e \u06a9\u06d2 UI \u0645\u06cc\u06ba \u06c1\u0686\u06a9\u0686\u0627\u06c1\u0679\u060c \u06c1\u0686\u06a9\u0686\u0627\u06c1\u0679\u060c \u0645\u0646\u062c\u0645\u062f \u06cc\u0627 \u06c1\u0686\u06a9\u0686\u0627\u06c1\u0679 \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06cc\u0633\u0627 \u0645\u062d\u0633\u0648\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0686\u06be \u062a\u06be\u0648\u0691\u0627 \u0633\u0627 \u063a\u0644\u0637 \u06c1\u06d2\u060c \u0627\u0646\u06cc\u0645\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0648 \u062f\u06be\u0691\u06a9\u0646 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633\u06a9\u0631\u0648\u0644\u0646\u06af \u062c\u0648 \u0627\u06cc\u06a9 \u0644\u0645\u062d\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u06be\u0644\u0627\u0646\u06af \u0644\u06af\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0679\u0631\u0627\u0646\u0632\u06cc\u0634\u0646\u0632 \u062c\u0648 \u0628\u06be\u0627\u0631\u06cc \u0645\u062d\u0633\u0648\u0633 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06c1\u06a9\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0648\u062c\u06c1 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0641\u0631\u06cc\u0645 \u0628\u0646\u0627\u0646\u06d2 \u0645\u06cc\u06ba \u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0641\u0644\u0679\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0688\u06cc\u0648\u0627\u0626\u0633\u0632 \u067e\u0631 60 \u0641\u0631\u06cc\u0645 \u0641\u06cc \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0648\u0631 \u062c\u062f\u06cc\u062f \u06c1\u0627\u0631\u0688 \u0648\u06cc\u0626\u0631 \u067e\u0631 120fps \u067e\u0631 \u0631\u06cc\u0646\u0688\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 60fps \u067e\u0631\u060c Flutter \u06a9\u06d2 \u067e\u0627\u0633 \u06c1\u0631 \u0641\u0631\u06cc\u0645 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0627\u0644\u06a9\u0644 16 \u0645\u0644\u06cc \u0633\u06cc\u06a9\u0646\u0688\u0632 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0648\u0688 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0648\u06cc\u062c\u06cc\u0679 \u0679\u0631\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06d2 \u0622\u0624\u0679 \u06a9\u06cc \u06af\u0646\u062a\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0631\u06cc\u0645\u0648\u06ba \u06a9\u0648 \u067e\u06cc\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba GPU \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0688\u06cc\u0688 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u06a9\u06be\u0648 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u067e\u0646\u06d2 \u0641\u0631\u06cc\u0645\u0648\u06ba \u06a9\u0648 \u06af\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Normal frames (smooth):\n\u2502\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2502  12ms \u2014 within 16ms budget \u2713\n\u2502\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2502  12ms \u2014 smooth\n\u2502\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2502  12ms \u2014 smooth\n\nDropped frame (jank):\n\u2502\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2502  12ms \u2014 smooth\n\u2502\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2502  28ms \u2014 OVER BUDGET \u2717\n\u2502\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2502  12ms \u2014 smooth again\n<\/code><\/pre>\n<p>\u062c\u0646\u06a9 \u06a9\u06d2 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u0630\u0631\u0627\u0626\u0639 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0631\u0633\u062a \u0641\u06a9\u0633 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u0628\u0627\u062a \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p><strong>UI \u062a\u06be\u0631\u06cc\u0688 \u0633\u0679\u0679\u0631\u0632<\/strong>: \u0622\u067e \u06a9\u0627 \u0688\u0627\u0631\u0679 \u06a9\u0648\u0688 \u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0645\u06c1\u0646\u06af\u06cc \u0648\u06cc\u062c\u06cc\u0679 \u0639\u0645\u0627\u0631\u062a\u060c \u0636\u0631\u0648\u0631\u062a \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062d\u0633\u0627\u0628 \u0627\u0648\u0631 \u0645\u0642\u0627\u0645\u06cc \u062a\u0646\u06c1\u0627\u0626\u06cc \u067e\u0631 \u06c1\u0645 \u0648\u0642\u062a \u0633\u0627\u0632 \u062a\u062c\u0632\u06cc\u06c1\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0631\u0627\u0633\u0679\u0631 \u062a\u06be\u0631\u06cc\u0688 \u06c1\u06a9\u0644\u0627\u0646\u0627<\/strong>: \u0622\u067e \u06a9\u0627 GPU \u062c\u062f\u0648\u062c\u06c1\u062f \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0645\u06c1\u0646\u06af\u06d2 \u0628\u0635\u0631\u06cc \u0627\u062b\u0631\u0627\u062a\u060c \u0627\u0648\u0648\u0631 \u0688\u0631\u0627\u060c \u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u067e\u0631\u062a\u06cc\u06ba \u0645\u0631\u06a9\u0628\u060c \u0627\u0648\u0631 SaveLayer \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>DevTools \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u06a9\u0648\u0688 \u06a9\u06cc \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06cc\u06c1 \u0641\u0631\u0642 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-setting-up-for-accurate-profiling\">\u062f\u0631\u0633\u062a \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a<\/h2>\n<p>\u0627\u06cc\u06a9 \u0631\u06a9\u0627\u0648\u0679 \u062f\u0648\u0633\u0631\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc \u06c1\u0645\u06cc\u0634\u06c1 \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0645\u0648\u0688 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0632 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0688\u06cc\u0628\u06af \u0645\u0648\u0688 \u0645\u06cc\u06ba \u06a9\u0628\u06be\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0688\u06cc\u0628\u06af \u0645\u0648\u0688 \u0627\u06c1\u0645 \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u0627\u0636\u0627\u0641\u06cc \u062f\u0639\u0648\u06d2\u060c \u06c1\u0627\u0679 \u0631\u06cc \u0644\u0648\u0688 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631\u060c \u0688\u06cc\u0628\u06af \u067e\u06cc\u0646\u0679\u0646\u06af\u060c \u0627\u0648\u0631 \u0648\u0631\u0628\u0648\u0632 \u0644\u0627\u06af\u0646\u06af\u06d4<\/p>\n<p>\u0688\u06cc\u0628\u06af \u0645\u0648\u0688 \u0645\u06cc\u06ba \u0627\u06cc\u067e\u0633 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u0648\u0688 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u06cc\u06ba \u06a9\u0627\u0641\u06cc \u0622\u06c1\u0633\u062a\u06c1 \u0686\u0644\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0688\u06cc\u0628\u06af \u0645\u0648\u0688 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0646\u06af \u067e\u0631\u06cc\u062a \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u062c\u0628\u06a9\u06c1 \u062d\u0642\u06cc\u0642\u06cc \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u067e\u0648\u0634\u06cc\u062f\u06c1 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># Debug mode \u2014 distorts measurements, do not use for profiling\nflutter run\n\n# Profile mode \u2014 matches production performance\n# with DevTools still connected\nflutter run --profile\n<\/code><\/pre>\n<p>\u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0645\u0648\u0688 \u0688\u06cc\u0628\u06af \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628\u06a9\u06c1 DevTools \u06a9\u0646\u06cc\u06a9\u0679\u0648\u0679\u06cc \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062d\u0642\u06cc\u0642\u06cc \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0642\u0631\u06cc\u0628 \u062a\u0631\u06cc\u0646 \u067e\u06cc\u0645\u0627\u0626\u0634 \u06c1\u06d2\u06d4<\/p>\n<p>VS \u06a9\u0648\u0688 \u0645\u06cc\u06ba DevTools \u06a9\u06be\u0648\u0644\u06cc\u06ba:<\/p>\n<pre><code class=\"language-plaintext\">Cmd+Shift+P \u2192 Flutter: Open DevTools \u2192 select Performance\n<\/code><\/pre>\n<p>\u067e\u0631\u0641\u0627\u0631\u0645\u0646\u0633 \u0627\u0648\u0648\u0631\u0644\u06cc\u0632 \u06a9\u0648 \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0628\u06be\u06cc \u0641\u0639\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 DevTools \u06a9\u0648 \u06a9\u06be\u0648\u0644\u06d2 \u0628\u063a\u06cc\u0631 \u0641\u0631\u06cc\u0645 \u0628\u062c\u0679 \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc\u0648\u06ba \u06a9\u06d2 \u0641\u0648\u0631\u06cc \u0628\u0635\u0631\u06cc \u0633\u06af\u0646\u0644 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u06cc\u06d2 \u062c\u0627 \u0633\u06a9\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">MaterialApp(\n  \/\/ Two bars appear at the top of the screen.\n  \/\/ Top bar: UI thread. Bottom bar: raster thread.\n  \/\/ Green means within budget. Red means over budget.\n  showPerformanceOverlay: true,\n  home: const MyScreen(),\n)\n<\/code><\/pre>\n<h2 id=\"heading-the-performance-view-reading-the-frame-timeline\">\u067e\u0631\u0641\u0627\u0631\u0645\u0646\u0633 \u0648\u06cc\u0648: \u0631\u06cc\u0688\u0646\u06af \u0641\u0631\u06cc\u0645 \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646<\/h2>\n<p>\u067e\u0631\u0641\u0627\u0631\u0645\u0646\u0633 \u0648\u06cc\u0648 \u062c\u0646\u06a9 \u06a9\u06cc \u062a\u062d\u0642\u06cc\u0642\u0627\u062a \u06a9\u0627 \u0646\u0642\u0637\u06c1 \u0622\u063a\u0627\u0632 \u06c1\u06d2\u06d4 \u0641\u0631\u06cc\u0645 \u0686\u0627\u0631\u0679 \u06a9\u0648 \u0628\u06be\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u067e \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0639\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0641\u06c1\u0631\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0633\u06a9\u0631\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0645\u062a\u062d\u0631\u06a9 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u06cc\u0646\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-the-frame-chart\">\u0641\u0631\u06cc\u0645 \u0686\u0627\u0631\u0679<\/h3>\n<p>\u06c1\u0631 \u0639\u0645\u0648\u062f\u06cc \u0628\u0627\u0631 \u0627\u06cc\u06a9 \u0641\u0631\u06cc\u0645 \u06a9\u06cc \u0646\u0645\u0627\u0626\u0646\u062f\u06af\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0648\u0646\u0686\u0627\u0626\u06cc \u0645\u062f\u062a \u06a9\u06cc \u0646\u0645\u0627\u0626\u0646\u062f\u06af\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0633\u0631\u062e \u0627\u0641\u0642\u06cc \u0644\u06a9\u06cc\u0631 16ms \u0628\u062c\u0679 \u06a9\u0648 \u0646\u0634\u0627\u0646 \u0632\u062f \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Frame chart:\n     \u25b2 ms\n  28 \u2502           \u2588\u2588\n  20 \u2502           \u2588\u2588\n  16 \u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 red line (16ms budget)\n  12 \u2502 \u2588\u2588  \u2588\u2588    \u2588\u2588  \u2588\u2588\n   8 \u2502 \u2588\u2588  \u2588\u2588    \u2588\u2588  \u2588\u2588\n   0 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192 frames\n       ok  ok  JANK  ok\n<\/code><\/pre>\n<p>\u0633\u0631\u062e \u0644\u06a9\u06cc\u0631 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u06a9\u06cc \u0633\u0644\u0627\u062e\u06cc\u06ba \u062c\u0646\u06a9\u06cc \u0641\u0631\u06cc\u0645 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u0633 \u0645\u062e\u0635\u0648\u0635 \u0641\u0631\u06cc\u0645 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u06a9\u06cc\u0627 \u06c1\u0648\u0627 \u0627\u0633 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u06cc \u0628\u0631\u06cc\u06a9 \u0688\u0627\u0624\u0646 \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06d2 \u06af\u06cc\u06d4<\/p>\n<h3 id=\"heading-the-two-threads\">\u062f\u0648 \u062f\u06be\u0627\u06af\u06d2<\/h3>\n<p>\u062c\u0627\u0646\u06a9\u06cc \u0641\u0631\u06cc\u0645 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0634\u0639\u0644\u06c1 \u0686\u0627\u0631\u0679 \u062f\u0648 \u062d\u0635\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0642\u0633\u06cc\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<pre><code class=\"language-plaintext\">UI Thread     \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591  \u2014 Dart code execution\nRaster Thread \u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591      \u2014 GPU work\n<\/code><\/pre>\n<p>\u06c1\u0627\u0626\u06cc UI \u062a\u06be\u0631\u06cc\u0688 \u0628\u0627\u0631\u0632 \u0622\u067e \u06a9\u06d2 \u0688\u0627\u0631\u0679 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0645\u0633\u0626\u0644\u06d2 \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0627\u0626\u06cc \u0631\u0627\u0633\u0679\u0631 \u062a\u06be\u0631\u06cc\u0688 \u0628\u0627\u0631\u0632 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0627 GPU \u067e\u06cc\u0646\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u062f\u0648\u062c\u06c1\u062f \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-reading-the-flame-chart\">\u0634\u0639\u0644\u06c1 \u0686\u0627\u0631\u0679 \u067e\u0691\u06be\u06cc\u06ba<\/h3>\n<p>\u0634\u0639\u0644\u06c1 \u0686\u0627\u0631\u0679 \u0627\u06cc\u06a9 \u0627\u0641\u0642\u06cc \u0628\u0627\u0631 \u0686\u0627\u0631\u0679 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0644\u0627\u0626\u0646 \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644 \u06c1\u06d2\u06d4 \u0686\u0648\u0691\u0627\u0626\u06cc \u0645\u062f\u062a \u06a9\u06cc \u0646\u0645\u0627\u0626\u0646\u062f\u06af\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0631\u0646\u0633\u06cc \u06a9\u06d2 \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u0648 \u062f\u06a9\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0642\u0637\u0627\u0631\u0648\u06ba \u06a9\u0648 \u0633\u062c\u0627 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Frame (28ms total)\n\u251c\u2500\u2500 dart:ui (16ms)\n\u2502   \u2514\u2500\u2500 build (14ms)\n\u2502       \u251c\u2500\u2500 ExpensiveList.build (8ms)\n\u2502       \u2502   \u2514\u2500\u2500 _buildItem (8ms)     \u2190 wide bar = expensive\n\u2502       \u2514\u2500\u2500 AppBar.build (2ms)\n\u2514\u2500\u2500 layout (4ms)\n<\/code><\/pre>\n<p>\u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06d2 \u0627\u0648\u067e\u0631\u06cc \u062d\u0635\u06d2 \u06a9\u06d2 \u0642\u0631\u06cc\u0628 \u0686\u0648\u0691\u06cc \u0628\u0627\u0631 \u0648\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2 \u062c\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a \u0635\u0631\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u06a9\u06cc \u06c1\u0631 \u0686\u06cc\u0632 \u0635\u0631\u0641 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u06cc\u0627 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-the-cpu-profiler-finding-the-root-cause\">CPU \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0631: \u0628\u0646\u06cc\u0627\u062f\u06cc \u0648\u062c\u06c1 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u0627 \u0645\u0646\u0638\u0631 \u0633\u0633\u062a \u0641\u0631\u06cc\u0645\u0648\u06ba \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u06cc \u067e\u06cc \u06cc\u0648 \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0631 \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u0645\u0633\u0626\u0644\u06c1 \u06a9\u0627 \u0628\u0627\u0639\u062b \u0628\u0646 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-recording-a-profile\">\u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e<\/h3>\n<ol>\n<li>\n<p>DevTools \u0645\u06cc\u06ba CPU \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0631 \u0679\u06cc\u0628 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u06cc\u06a9\u0627\u0631\u0688 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062c\u0646\u06a9\u06cc \u062a\u0639\u0627\u0645\u0644\u0627\u062a \u06a9\u06cc \u062a\u0648\u0644\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0633\u0679\u0627\u067e \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>DevTools \u062a\u0627\u0631\u06cc\u062e \u0633\u06d2 \u0627\u06cc\u06a9 Flame \u06af\u0631\u0627\u0641 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"heading-reading-the-flame-graph\">\u0634\u0639\u0644\u06c1 \u06af\u0631\u0627\u0641 \u067e\u0691\u06be\u06cc\u06ba<\/h3>\n<pre><code class=\"language-plaintext\">CPU Profiler flame graph:\n                                         \u2190 time \u2192\n_CounterScreenState.build [\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588] 45ms\n  Column.build            [\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588   ] 35ms\n    ExpensiveWidget.build [\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588   ] 35ms\n      _buildRows          [\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588       ] 25ms\n        jsonDecode        [\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588       ] 25ms  \u2190 root cause\n<\/code><\/pre>\n<p>\u0633\u0628 \u0633\u06d2 \u0686\u0648\u0691\u0627 \u0628\u0627\u0631 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0648\u0642\u062a \u06a9\u06c1\u0627\u06ba \u06af\u0632\u0627\u0631\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u062b\u0627\u0644 \u0645\u06cc\u06ba <code>jsonDecode<\/code> \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2. \u06c1\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0646\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0648\u06cc\u062c\u06cc\u0679 \u062f\u0631\u062e\u062a \u06a9\u06d2 \u0628\u0627\u06c1\u0631\u06d4<\/p>\n<h3 id=\"heading-the-bottom-up-table\">\u0646\u06cc\u0686\u06d2 \u06a9\u06cc \u0645\u06cc\u0632<\/h3>\n<p>\u0646\u06cc\u0686\u06d2 \u06a9\u06cc \u0645\u06cc\u0632 \u0633\u06d2 \u067e\u062a\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06d2 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0627\u0641\u0639\u0627\u0644 \u0633\u0628 \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u0633\u06cc\u0644\u0641 \u0679\u0627\u0626\u0645<\/strong>: \u06a9\u0627\u0644\u0646\u06af \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u06a9\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06cc \u06af\u0632\u0627\u0631\u0627 \u06c1\u0648\u0627 \u0648\u0642\u062a\u06d4 \u06c1\u0627\u0626\u06cc \u0633\u06cc\u0644\u0641 \u0679\u0627\u0626\u0645 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0641\u06cc\u0686\u0631 \u0641\u0637\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u06c1\u0646\u06af\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u06a9\u0644 \u0648\u0642\u062a<\/strong>: \u0648\u0642\u062a \u0628\u0634\u0645\u0648\u0644 \u062a\u0645\u0627\u0645 \u0688\u0627\u0624\u0646 \u0627\u0633\u0679\u0631\u06cc\u0645 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644\u0632\u06d4 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u0644 \u0648\u0642\u062a \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06c1\u06cc\u06ba \u0646\u06cc\u0686\u06d2 \u0645\u06c1\u0646\u06af\u06d2 \u06a9\u0627\u0645 \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u06d2 \u06af\u06cc\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u067e\u0646\u06d2 \u0648\u0642\u062a \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u0635\u0644 \u0648\u062c\u06c1 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0644 \u0648\u0642\u062a \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u0633\u06d2 \u0645\u062d\u0631\u06a9\u0627\u062a \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-fixing-a-cpu-bound-bottleneck\">CPU \u0628\u0627\u0626\u0646\u0688\u0646\u06af \u0631\u06a9\u0627\u0648\u0679\u0648\u06ba \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u0646\u0627<\/h3>\n<p>\u0688\u06cc\u0641\u0627\u0644\u0679 \u0622\u0626\u0633\u0648\u0644\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u0628\u0691\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u0648 \u06c1\u0645 \u0648\u0642\u062a \u0633\u0627\u0632\u06cc \u0633\u06d2 \u067e\u0627\u0631\u0633 \u06a9\u0631\u0646\u0627 UI \u062a\u06be\u0631\u06cc\u0688 \u062c\u0646\u06a9 \u06a9\u06cc \u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u0648\u062c\u0648\u06c1\u0627\u062a \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2\u06d4 \u062d\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633 \u06a9\u0627\u0645 \u06a9\u0648 \u0627\u0644\u06af \u0642\u0631\u0646\u0637\u06cc\u0646\u06c1 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Before \u2014 blocking the main isolate on every search result\nFuture<list>> processResults(dynamic data) async {\n  return (data as List)\n      .map((json) => User.fromJson(json))\n      .toList();\n}\n\n\/\/ After \u2014 parsing in a background isolate\n\/\/ The main isolate stays free to render frames\n\/\/ while parsing happens concurrently\nFuture<list>> processResults(dynamic data) async {\n  return Isolate.run(() {\n    return (data as List)\n        .map((json) => User.fromJson(json as Map<string dynamic=\"\">))\n        .toList();\n  });\n}\n<\/string><\/list><\/list><\/code><\/pre>\n<p>\u0633\u0645\u062c\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0646\u062a\u0628\u0627\u06c1: \u0628\u0691\u06d2 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06af\u0631\u0627\u0641 <code>Isolate.run<\/code> \u0627\u0633 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0642\u0631\u0646\u0637\u06cc\u0646\u06c1 \u06a9\u06cc \u062d\u062f \u06a9\u06d2 \u067e\u0627\u0631 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 \u0628\u0691\u06d2 \u067e\u06d2 \u0644\u0648\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06a9\u0627\u067e\u06cc \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u0622\u0641 \u0644\u0648\u0688 \u06a9\u06cc\u06d2 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06cc \u0644\u0627\u06af\u062a \u0633\u06d2 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u0691\u06d2 JSON \u0631\u062f\u0639\u0645\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 \u0646\u0645\u0648\u0646\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0688\u06cc \u06a9\u0648\u0688 \u0634\u062f\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062e\u0627\u0645 \u0631\u0633\u067e\u0627\u0646\u0633 \u0633\u0679\u0631\u0646\u06af \u06a9\u0648 \u062a\u0646\u06c1\u0627\u0626\u06cc \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0648\u06c1\u0627\u06ba \u067e\u0627\u0631\u0633 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Safer for large payloads \u2014 the raw string is copied\n\/\/ into the isolate, parsed there, and only the final\n\/\/ typed list is copied back. No intermediate object graph crossing.\nFuture<list>> processResults(String rawJson) async {\n  return Isolate.run(() {\n    final data = jsonDecode(rawJson) as List;\n    return data\n        .map((json) => User.fromJson(json as Map<string dynamic=\"\">))\n        .toList();\n  });\n}\n<\/string><\/list><\/code><\/pre>\n<h2 id=\"heading-the-flutter-inspector-hunting-unnecessary-rebuilds\">\u0641\u0644\u0679\u0631 \u0627\u0646\u0633\u067e\u06a9\u0679\u0631: \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u062a\u0645\u0627\u0645 \u062c\u0646\u06a9 \u0646\u062a\u0627\u0626\u062c \u0627\u0646\u0641\u0631\u0627\u062f\u06cc\u060c \u0645\u06c1\u0646\u06af\u06d2 \u06a9\u0627\u0645\u0648\u06ba \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0686\u06be \u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u0646\u0648 \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc\u060c \u0627\u06cc\u06a9 \u0648\u06cc\u062c\u06cc\u0679 \u062c\u0633 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633 \u06a9\u06d2 \u0648\u0627\u0644\u062f\u06cc\u0646 \u0646\u06d2 \u0627\u0633\u06d2 \u0628\u0644\u0627\u06cc\u0627 \u06c1\u06d2\u06d4 <code>setState<\/code>.<\/p>\n<h3 id=\"heading-enabling-rebuild-counting\">\u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062d\u0633\u0627\u0628\u0627\u062a \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>DevTools Inspector \u0679\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 &#8216;Track Widget Build Count&#8217; \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u06cc\u0633\u06d2 \u06c1\u06cc \u0622\u067e \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0639\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c DevTools \u06c1\u0631 \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u06d2 \u0622\u06af\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Widget Tree with rebuild counts:\nMyApp                         0 rebuilds\n\u2514\u2500\u2500 MaterialApp               0 rebuilds\n    \u2514\u2500\u2500 CounterScreen         0 rebuilds\n        \u2514\u2500\u2500 Scaffold          0 rebuilds\n            \u2514\u2500\u2500 Column       24 rebuilds\n                \u251c\u2500\u2500 Text     24 rebuilds  \u2014 necessary\n                \u251c\u2500\u2500 Text     24 rebuilds  \u2014 necessary\n                \u2514\u2500\u2500 ExpensiveList  24 rebuilds  \u2014 PROBLEM\n<\/code><\/pre>\n<p><code>ExpensiveList<\/code>    \u06a9\u0627\u0624\u0646\u0679\u0631 \u0633\u0679\u06cc\u0679 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u0646\u06c1 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0648\u062c\u0648\u062f \u0627\u0633\u06d2 24 \u0628\u0627\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u06d2 \u0627\u0633\u06cc \u0630\u06cc\u0644\u06cc \u062f\u0631\u062e\u062a \u0645\u06cc\u06ba \u06c1\u06d2 \u062c\u0633\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u062d\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0631\u06cc\u0627\u0633\u062a\u06cc \u062d\u0635\u06d2 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0648\u06cc\u062c\u06cc\u0679 \u0645\u06cc\u06ba \u0646\u06a9\u0627\u0644\u0627 \u062c\u0627\u0626\u06d2\u06d4 \u062c\u0628 \u0631\u06cc\u0627\u0633\u062a \u0628\u062f\u0644\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0635\u0631\u0641 \u0648\u06c1\u06cc \u0648\u06cc\u062c\u06cc\u0679 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u0642\u06cc \u0633\u0628 \u06a9\u0686\u06be \u0648\u06cc\u0633\u0627 \u06c1\u06cc \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Before \u2014 the entire Scaffold rebuilds on every setState\nclass _CounterScreenState extends State<counterscreen> {\n  int _count = 0;\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: Column(\n        children: [\n          Text('Count: $_count'),\n          ElevatedButton(\n            onPressed: () => setState(() => _count++),\n            child: const Text('Increment'),\n          ),\n          \/\/ This never changes but rebuilds on every tap\n          const ExpensiveList(),\n        ],\n      ),\n    );\n  }\n}\n<\/counterscreen><\/code><\/pre>\n<pre><code class=\"language-dart\">\/\/ After \u2014 CounterDisplay owns its own state\n\/\/ ExpensiveList never rebuilds\nclass CounterDisplay extends StatefulWidget {\n  const CounterDisplay({super.key});\n\n  @override\n  State<counterdisplay> createState() => _CounterDisplayState();\n}\n\nclass _CounterDisplayState extends State<counterdisplay> {\n  int _count = 0;\n\n  @override\n  Widget build(BuildContext context) {\n    return Column(\n      children: [\n        Text('Count: $_count'),\n        ElevatedButton(\n          onPressed: () => setState(() => _count++),\n          child: const Text('Increment'),\n        ),\n      ],\n    );\n  }\n}\n\n\/\/ The screen is now stateless \u2014 it never rebuilds\nclass CounterScreen extends StatelessWidget {\n  const CounterScreen({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return const Scaffold(\n      body: Column(\n        children: [\n          CounterDisplay(),   \/\/ rebuilds when count changes\n          ExpensiveList(),    \/\/ never rebuilds\n        ],\n      ),\n    );\n  }\n}\n<\/counterdisplay><\/counterdisplay><\/code><\/pre>\n<h3 id=\"heading-using-repaintboundary-to-isolate-expensive-painting\">RepaintBoundary \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u06c1\u0646\u06af\u06cc \u067e\u06cc\u0646\u0679\u0646\u06af \u06a9\u0648 \u0627\u0644\u06af \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u062c\u0628 UI \u06a9\u0627 \u0627\u06cc\u06a9 \u062d\u0635\u06c1 \u0628\u0627\u0631 \u0628\u0627\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u06cc\u0627\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0644\u062d\u0642\u06c1 \u062d\u0635\u06d2 \u062c\u0627\u0645\u062f \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c <code>RepaintBoundary<\/code> \u0627\u0646 \u062d\u0635\u0648\u06ba \u06a9\u0648 \u0627\u0644\u06af \u0627\u0644\u06af \u062a\u06c1\u0648\u06ba \u067e\u0631 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u06a9\u062b\u0631\u062a \u0633\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u0634\u062f\u06c1 \u062d\u0635\u0648\u06ba \u06a9\u0648 \u062c\u0627\u0645\u062f \u0645\u0648\u0627\u062f \u06a9\u0648 \u0686\u06be\u0648\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u06cc\u0627\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Without RepaintBoundary \u2014 the animation causes\n\/\/ the entire Column to repaint on every frame\nColumn(\n  children: [\n    AnimatedWidget(controller: _controller),\n    const ExpensiveStaticContent(),\n  ],\n)\n\n\/\/ With RepaintBoundary \u2014 ExpensiveStaticContent\n\/\/ lives on its own layer and is never repainted\n\/\/ during the animation\nColumn(\n  children: [\n    AnimatedWidget(controller: _controller),\n    const RepaintBoundary(\n      child: ExpensiveStaticContent(),\n    ),\n  ],\n)\n<\/code><\/pre>\n<p><code>RepaintBoundary<\/code>    \u0627\u0633\u06d2 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u0646\u06c1 \u06a9\u06c1 \u0648\u0633\u06cc\u0639 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631\u06d4 \u06c1\u0631 \u0628\u0627\u0624\u0646\u0688\u0631\u06cc \u0627\u06cc\u06a9 \u0627\u0636\u0627\u0641\u06cc \u06a9\u0645\u067e\u0648\u0632\u0679\u0646\u06af \u067e\u0631\u062a \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u067e\u0631 GPU \u06a9\u0648 \u0639\u0645\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0631\u0627\u0633\u0679\u0631 \u062a\u06be\u0631\u06cc\u0688 \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u06c1\u0648\u06af\u0627 \u062c\u0648 UI \u062a\u06be\u0631\u06cc\u0688 \u06a9\u06cc \u0628\u0686\u062a \u06a9\u0648 \u0622\u0641\u0633\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-the-memory-view-catching-leaks-before-users-do\">\u0645\u06cc\u0645\u0648\u0631\u06cc \u0648\u06cc\u0648: \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0644\u06cc\u06a9 \u06a9\u0648 \u067e\u06a9\u0691\u0646\u0627<\/h2>\n<p>\u0645\u06cc\u0645\u0648\u0631\u06cc \u0644\u06cc\u06a9 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06c1\u0646\u06af\u0627\u0645\u06d2 \u062f\u06cc\u06af\u0631 \u0627\u0642\u0633\u0627\u0645 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0628\u0631\u062a\u0627\u0624 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u067e \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0686\u0646\u062f \u0645\u0646\u0679\u0648\u06ba \u062a\u06a9 \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u067e\u06be\u0631 \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u0622\u06c1\u0633\u062a\u06c1 \u0622\u06c1\u0633\u062a\u06c1 \u062e\u0631\u0627\u0628 \u06c1\u0648\u062a\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0648\u0691\u0627 \u0627\u0679\u06be\u0627\u0646\u06d2 \u0648\u0627\u0644\u0627 \u062c\u06af\u06c1 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062f\u0639\u0648\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062d\u0646\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u062a\u06a9 \u0635\u0627\u0631\u0641\u06cc\u0646 \u063a\u06cc\u0631 \u0645\u0639\u0645\u0648\u0644\u06cc \u0631\u0648\u06cc\u06d2 \u06cc\u0627 \u0633\u0633\u062a \u0631\u0648\u06cc \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06a9\u0686\u06be \u0639\u0631\u0635\u06d2 \u0633\u06d2 \u0644\u06cc\u06a9 \u062c\u0645\u0639 \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-a-memory-leak-looks-like-in-devtools\">DevTools \u0645\u06cc\u06ba \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u0627 \u0627\u062e\u0631\u0627\u062c<\/h3>\n<p>\u0645\u06cc\u0645\u0648\u0631\u06cc \u0648\u06cc\u0648 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06c1\u06cc\u067e \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0648 \u0686\u0627\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0635\u062d\u062a \u0645\u0646\u062f \u0627\u06cc\u067e\u0633 \u0622\u0631\u06cc \u0679\u0648\u062a\u06be \u06a9\u0627 \u0646\u0645\u0648\u0646\u06c1 \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0628 \u0627\u0634\u06cc\u0627\u0621 \u06a9\u0648 \u0645\u062e\u062a\u0635 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0628\u0691\u06be\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u062c\u0628 \u06a9\u0648\u0691\u0627 \u0627\u0679\u06be\u0627\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u06a9\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Healthy memory:\n     \u25b2 MB\n  60 \u2502     \u25b2       \u2190 GC runs, heap returns to baseline\n  40 \u2502   \u2588\u2588\u2502\u2588\u2588\n  20 \u2502 \u2588\u2588  \u2502  \u2588\u2588\u25bc  \u2190 rises then drops back down\n   0 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192 time\n       stable baseline\n\nMemory leak:\n     \u25b2 MB\n  80 \u2502               \u2588\u2588\n  60 \u2502         \u2588\u2588\u2588\u2588\n  40 \u2502    \u2588\u2588\u2588\u2588         \u2190 never returns to baseline\n  20 \u2502\u2588\u2588\u2588\u2588\n   0 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192 time\n       baseline rising\n<\/code><\/pre>\n<h3 id=\"heading-finding-a-leak\">\u0644\u06cc\u06a9 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627<\/h3>\n<p>\u0631\u0633\u0627\u0648 \u06a9\u0648 \u0627\u0644\u06af \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0639\u0645\u0644:<\/p>\n<ol>\n<li>\n<p>\u0645\u06cc\u0645\u0648\u0631\u06cc \u0648\u06cc\u0648 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0648\u062c\u0648\u062f\u06c1 \u06c1\u06cc\u067e \u0633\u0627\u0626\u0632 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0634\u062a\u0628\u06c1 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633 \u0633\u06d2 \u062f\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p>\u0632\u0628\u0631\u062f\u0633\u062a\u06cc \u06a9\u0648\u0691\u0627 \u0627\u0679\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c DevTools \u0645\u06cc\u06ba GC \u0628\u0679\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u067e\u0646\u06d2 \u06a9\u0648\u0644\u06c1\u0648\u06ba \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u067e\u0686\u06be\u0644\u06cc \u0633\u0637\u062d \u06a9\u06d2 \u0642\u0631\u06cc\u0628 \u06a9\u06c1\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06af\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0633 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u0622\u0626\u0679\u0645\u0632 \u0627\u0628 \u0628\u06be\u06cc \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u06c1\u0648\u06ba \u06af\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0633\u0646\u06cc\u067e \u0634\u0627\u0679\u0633 \u0644\u06d2 \u06a9\u0631 \u0627\u0648\u0631 \u062f\u0648 \u0622\u0628\u062c\u06cc\u06a9\u0679\u0633 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06a9\u06d2\u060c \u0622\u067e \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u0627\u0634\u06cc\u0627\u0621 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u06ba \u0631\u06c1 \u06af\u0626\u06cc \u062a\u06be\u06cc\u06ba \u062c\u0628 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u06a9\u0679\u06be\u0627 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062a\u06be\u0627\u06d4<\/p>\n<h3 id=\"heading-the-most-common-sources-of-leaks\">\u0644\u06cc\u06a9 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u0648\u062c\u0648\u06c1\u0627\u062a<\/h3>\n<p><strong>\u063a\u06cc\u0631 \u0639\u0645\u0644 \u0634\u062f\u06c1 \u062d\u0631\u06a9\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0646\u0679\u0631\u0648\u0644\u0631:<\/strong><\/p>\n<pre><code class=\"language-dart\">class _AnimatedScreenState extends State<animatedscreen>\n    with SingleTickerProviderStateMixin {\n  late final AnimationController _controller;\n\n  @override\n  void initState() {\n    super.initState();\n    _controller = AnimationController(\n      vsync: this,\n      duration: const Duration(milliseconds: 300),\n    );\n  }\n\n  @override\n  void dispose() {\n    \/\/ Without this, the Ticker fires on every frame\n    \/\/ indefinitely, holding the State in memory\n    _controller.dispose();\n    super.dispose();\n  }\n}\n<\/animatedscreen><\/code><\/pre>\n<p><strong>\u063a\u06cc\u0631 \u0645\u0646\u0633\u0648\u062e \u0634\u062f\u06c1 \u0633\u0644\u0633\u0644\u06c1 \u06a9\u06cc \u0631\u06a9\u0646\u06cc\u062a\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-dart\">class _ChatScreenState extends State<chatscreen> {\n  StreamSubscription<message>? _subscription;\n\n  @override\n  void initState() {\n    super.initState();\n    _subscription = messageStream.listen((message) {\n      if (mounted) setState(() => messages.add(message));\n    });\n  }\n\n  @override\n  void dispose() {\n    \/\/ Without cancel(), the stream holds a reference\n    \/\/ to this callback, which holds a reference to\n    \/\/ the State, preventing garbage collection\n    _subscription?.cancel();\n    super.dispose();\n  }\n}\n<\/message><\/chatscreen><\/code><\/pre>\n<p>\u0633\u06d2 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u062a\u0645\u0627\u0645 \u0622\u0626\u0679\u0645\u0632 <code>initState<\/code> \u06cc\u06c1 \u06c1\u06d2 <code>dispose()<\/code>\u060c <code>cancel()<\/code>\u06cc\u0627 <code>close()<\/code> \u06a9\u0633\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u0633 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>dispose()<\/code>. \u0627\u0633 \u0627\u0635\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0627\u0633\u062a\u062b\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-fixing-the-most-common-jank-patterns\">\u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u06c1\u06a9\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>DevTools \u0645\u0633\u0644\u0633\u0644 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u062c\u0646\u06a9 \u06a9\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0632\u0645\u0631\u06d2 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0648\u062c\u06c1 \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648\u062c\u0627\u0626\u06d2 \u062a\u0648\u060c \u0627\u0635\u0644\u0627\u062d\u0627\u062a \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-expensive-synchronous-work-on-the-main-isolate\">\u0631\u06cc\u0627\u0633\u062a\u06cc \u0642\u0631\u0646\u0637\u06cc\u0646\u06c1 \u067e\u0631 \u0645\u06c1\u0646\u06af\u0627 \u06c1\u0645 \u0648\u0642\u062a \u0633\u0627\u0632 \u06a9\u0627\u0645\u06d4<\/h3>\n<p>DevTools \u0633\u06af\u0646\u0644\u0632: \u06c1\u0627\u0626\u06cc UI \u062a\u06be\u0631\u06cc\u0688 \u0628\u0627\u0631\u0632\u060c CPU \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0631 \u06c1\u0627\u0626\u06cc \u0633\u06cc\u0644\u0641 \u0679\u0627\u0626\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u067e\u0627\u0631\u0633 \u06a9\u0631\u0646\u06d2 \u06cc\u0627 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u06a9\u0648 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Before \u2014 sorting 10,000 items synchronously\n\/\/ blocks the main isolate for 80-200ms on slower devices\nfinal sorted = List.from(items)\n  ..sort((a, b) => a.name.compareTo(b.name));\n\n\/\/ After \u2014 sorting in a background isolate\nfinal sorted = await Isolate.run(() {\n  final copy = List.from(items);\n  copy.sort((a, b) => a.name.compareTo(b.name));\n  return copy;\n});\n<\/code><\/pre>\n<h3 id=\"heading-future-created-inside-build\">\u0645\u0633\u062a\u0642\u0628\u0644 \u0627\u0646\u062f\u0631 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p>DevTools \u0633\u06af\u0646\u0644\u0632: \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0648\u06cc\u0648 \u0688\u067e\u0644\u06cc\u06a9\u06cc\u0679 API \u06a9\u0627\u0644\u0632 \u06a9\u0648 \u0627\u0633\u06cc \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u067e\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 CPU \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0641\u06cc \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u062a\u0639\u0627\u0645\u0644 \u06a9\u0648 \u0645\u062a\u0639\u062f\u062f \u0628\u0627\u0631 \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Before \u2014 a new Future is created on every rebuild.\n\/\/ FutureBuilder treats each new Future as a fresh\n\/\/ operation and resets to loading state.\n@override\nWidget build(BuildContext context) {\n  return FutureBuilder(\n    future: repository.fetchUser(userId),\n    builder: (context, snapshot) { ... },\n  );\n}\n\n\/\/ After \u2014 the Future is created once in initState\n\/\/ and reused across all subsequent rebuilds\nlate final Future<user> _userFuture;\n\n@override\nvoid initState() {\n  super.initState();\n  _userFuture = repository.fetchUser(widget.userId);\n}\n\n@override\nWidget build(BuildContext context) {\n  return FutureBuilder(\n    future: _userFuture,\n    builder: (context, snapshot) { ... },\n  );\n}\n<\/user><\/code><\/pre>\n<h3 id=\"heading-large-list-rendered-as-a-column\">\u06a9\u0627\u0644\u0645 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u067e\u06cc\u0634 \u06a9\u0631\u062f\u06c1 \u0628\u0691\u06cc \u0641\u06c1\u0631\u0633\u062a<\/h3>\n<p>DevTools \u0633\u06af\u0646\u0644: \u0641\u06c1\u0631\u0633\u062a \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u067e\u06c1\u0644\u0627 \u0641\u0631\u06cc\u0645 \u0628\u0639\u062f \u06a9\u06d2 \u0641\u0631\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u06cc\u06ba \u0646\u0645\u0627\u06cc\u0627\u06ba \u0637\u0648\u0631 \u067e\u0631 \u0633\u0633\u062a \u06c1\u06d2\u06d4 \u0627\u0646\u0633\u067e\u06a9\u0679\u0631 \u0627\u06cc\u06a9 \u06a9\u0627\u0644\u0645 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0633\u06cc\u0646\u06a9\u0691\u0648\u06ba \u0628\u0686\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Before \u2014 builds all items at once regardless\n\/\/ of how many are currently visible\nColumn(\n  children: items\n      .map((item) => ItemCard(item: item))\n      .toList(),\n)\n\n\/\/ After \u2014 builds only the items currently\n\/\/ visible on screen plus a small buffer\nListView.builder(\n  itemCount: items.length,\n  itemBuilder: (context, index) {\n    return ItemCard(item: items[index]);\n  },\n)\n<\/code><\/pre>\n<h3 id=\"heading-animated-opacity-causing-raster-thread-jank\">\u0627\u06cc\u0646\u06cc\u0645\u06cc\u0634\u0646 \u06a9\u06cc \u062f\u06be\u0646\u062f\u0644\u0627\u067e\u0646 \u0631\u0627\u0633\u0679\u0631 \u062a\u06be\u0631\u06cc\u0688 \u0633\u0679\u0679\u0631 \u06a9\u0627 \u0628\u0627\u0639\u062b \u0628\u0646 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/h3>\n<p>DevTools \u0633\u06af\u0646\u0644: \u0644\u0645\u0628\u06cc \u0631\u0627\u0633\u0679\u0631 \u062a\u06be\u0631\u06cc\u0688 \u0628\u0627\u0631\u06d4 \u0641\u0644\u06cc\u0645 \u0686\u0627\u0631\u0679 \u0627\u06cc\u0646\u06cc\u0645\u06cc\u0634\u0646 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 SaveLayer \u06a9\u06cc \u0633\u0631\u06af\u0631\u0645\u06cc \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>Opacity<\/code>    \u062c\u0628 \u0642\u062f\u0631 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc \u0622\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 Flutter \u0686\u0627\u0626\u0644\u0688 \u0648\u06cc\u062c\u0679 \u06a9\u0648 \u06c1\u062f\u0641 \u06a9\u06cc \u062f\u06be\u0646\u062f\u0644\u0627\u067e\u0646 \u0645\u06cc\u06ba \u06a9\u0645\u067e\u0648\u0632\u0679 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0631 \u0641\u0631\u06cc\u0645 \u06a9\u0648 \u0622\u0641 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0628\u0641\u0631 \u0645\u06cc\u06ba \u067e\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 SaveLayer \u0622\u067e\u0631\u06cc\u0634\u0646 \u0633\u0628 \u0633\u06d2 \u0645\u06c1\u0646\u06af\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u0631\u0627\u0633\u0679\u0631 \u062a\u06be\u0631\u06cc\u0688 \u0627\u0646\u062c\u0627\u0645 \u062f\u06d2 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0645\u067e\u06cc\u0644\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0646\u0648\u0679: \u0641\u0644\u0679\u0631 \u06a9\u0627 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0631\u06cc\u0646\u0688\u0631\u0646\u06af \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688\u060c \u0627\u0645\u067e\u06cc\u0644\u0631 (\u0627\u0628 iOS \u067e\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u067e\u0631 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2)\u060c SaveLayer \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u062c\u0631\u0645\u0627\u0646\u06d2 \u06a9\u0648 \u0646\u0645\u0627\u06cc\u0627\u06ba \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0631\u0627\u0646\u06d2 Skia \u0627\u0646\u062c\u0646 \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 shader compilation stutter \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u0635\u0631\u0641 \u0627\u0645\u067e\u06cc\u0644\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0644\u0679\u0631 \u06a9\u06d2 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0648\u0631\u0698\u0646 \u06a9\u0648 \u0646\u0634\u0627\u0646\u06c1 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0645\u0628\u06c1\u0645 \u0627\u06cc\u0646\u06cc\u0645\u06cc\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0631\u0627\u0633\u0679\u0631 \u062a\u06be\u0631\u06cc\u0688 \u062c\u0646\u06a9 \u0627\u0633\u06a9\u06cc\u0627 \u06a9\u06cc \u0646\u0633\u0628\u062a \u06a9\u0645 \u0634\u062f\u06cc\u062f \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0631\u062c\u06cc\u062d\u06cc \u06c1\u062f\u0627\u06cc\u0627\u062a <code>FadeTransition<\/code> \u062d\u062f \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062a\u062d\u0631\u06a9 <code>Opacity<\/code> \u0627\u06af\u0631\u0686\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u062f\u0631\u0633\u062a \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0645\u067e\u06cc\u0644\u0631 \u0639\u062c\u0644\u062a \u062a\u0627\u0631\u06cc\u062e\u06cc \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u06d2 \u06a9\u0645 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Bad \u2014 Opacity with a changing value creates a SaveLayer\n\/\/ on every animation frame, causing raster thread jank\nOpacity(\n  opacity: _animationValue,\n  child: myWidget,\n)\n\n\/\/ Good \u2014 FadeTransition uses the compositor directly\n\/\/ without a SaveLayer offscreen buffer\nFadeTransition(\n  opacity: _animation,\n  child: myWidget,\n)\n<\/code><\/pre>\n<h2 id=\"heading-verifying-your-fix-actually-worked\">\u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u062f\u0631\u0633\u062a\u06af\u06cc \u0646\u06d2 \u0648\u0627\u0642\u0639\u06cc \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u06d4<\/h2>\n<p>\u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u06cc \u0627\u0635\u0644\u0627\u062d \u0631\u06a9\u0627\u0648\u0679\u0648\u06ba \u06a9\u0648 \u062f\u0648\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0631\u062c\u062d\u0627\u0646 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0633\u0633\u062a \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u062a\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06af\u0644\u0627 \u0633\u0633\u062a \u062a\u0631\u06cc\u0646 \u06a9\u0627\u0645 \u0627\u0628 \u0641\u0631\u06cc\u0645 \u0679\u0627\u0626\u0645 \u067e\u0631 \u062d\u0627\u0648\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06c1\u0631 \u062a\u0631\u0645\u06cc\u0645 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba \u067e\u06cc\u0645\u0627\u0626\u0634 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06cc\u06c1 \u0645\u0633\u0626\u0644\u06c1 \u06a9\u0633\u06cc \u06a9\u0627 \u062f\u06be\u06cc\u0627\u0646 \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u062a\u0635\u062f\u06cc\u0642\u06cc \u0639\u0645\u0644:<\/p>\n<ol>\n<li>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0645\u0648\u0688 \u0645\u06cc\u06ba \u0627\u067e\u0646\u0627 \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u067e\u064f\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0634\u06a9\u0644 \u062a\u0639\u0627\u0645\u0644\u0627\u062a \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0628\u062f\u062a\u0631\u06cc\u0646 \u0641\u0631\u06cc\u0645 \u0679\u0627\u0626\u0645 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u0627 \u062f\u06be\u0627\u06af\u06c1 \u0631\u06a9\u0627\u0648\u0679 \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0631\u0645\u06cc\u0645\u0627\u062a \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u06c1\u06cc \u062d\u0627\u0644\u0627\u062a \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0646\u06af<\/p>\n<\/li>\n<li>\n<p>\u0641\u0631\u06cc\u0645 \u0679\u0627\u0626\u0645 \u0627\u0648\u0631 \u062a\u06be\u0631\u06cc\u0688 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u0646\u0627<\/p>\n<\/li>\n<\/ol>\n<p>\u0641\u0631\u06cc\u0645 \u0679\u0627\u0626\u0645\u0646\u06af \u06a9\u0648 \u067e\u0631\u0648\u06af\u0631\u0627\u0645 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0628\u06be\u06cc \u067e\u06a9\u0691\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0628\u06c1\u062a\u0631\u06cc\u0648\u06ba \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06cc\u0627 CI \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0641\u06cc\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">WidgetsBinding.instance.addTimingsCallback((timings) {\n  for (final timing in timings) {\n    if (timing.totalSpan.inMilliseconds > 16) {\n      debugPrint(\n        'Slow frame: ${timing.totalSpan.inMilliseconds}ms '\n        'build: ${timing.buildDuration.inMilliseconds}ms '\n        'raster: ${timing.rasterDuration.inMilliseconds}ms',\n      );\n    }\n  }\n});\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u062a\u0635\u062d\u06cc\u062d \u06a9\u06d2 \u0628\u0639\u062f \u067e\u06cc\u0645\u0627\u0626\u0634 \u0645\u06cc\u06ba \u0628\u06c1\u062a\u0631\u06cc \u0622\u062a\u06cc \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0635\u0644 \u0648\u062c\u06c1 \u06a9\u06cc \u062f\u0631\u0633\u062a \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u067e\u06cc\u0645\u0627\u0626\u0634 \u0628\u06c1\u062a\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062a\u0648\u060c \u0627\u0635\u0644 \u0631\u06a9\u0627\u0648\u0679 \u06a9\u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0645\u0632\u06cc\u062f \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0646\u06af \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>\u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646\u0632 \u0645\u06cc\u06ba \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u0634\u0627\u0630 \u0648 \u0646\u0627\u062f\u0631 \u06c1\u06cc \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u0634\u0628\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0637\u0631\u06cc\u0642\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06c1\u0644\u06d2 \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06d2 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u062f\u0648\u0633\u0631\u06cc \u0637\u0631\u0641 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>DevTools \u0641\u0631\u06cc\u0645 \u0679\u0627\u0626\u0645\u0646\u06af\u060c CPU \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644\u060c \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc \u0641\u0631\u06cc\u06a9\u0648\u0626\u0646\u0633\u06cc\u060c \u0627\u0648\u0631 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06d2 \u0631\u0648\u06cc\u06d2 \u0645\u06cc\u06ba \u0645\u06a9\u0645\u0644 \u0645\u0631\u0626\u06cc\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u0627 \u0645\u0646\u0638\u0631 \u0633\u0633\u062a \u0641\u0631\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u062a\u06be\u0631\u06cc\u0688\u0632 \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 CPU \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0631 \u0627\u0646 \u0645\u062e\u0635\u0648\u0635 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0633 \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0646\u0633\u067e\u06a9\u0679\u0631 \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u067e\u0631\u0648\u067e\u06cc\u06af\u0646\u0688\u06c1 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0648\u06cc\u0648 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0644\u06cc\u06a9 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0645\u0648\u0688 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0646\u06af\u060c \u0627\u0635\u0644\u0627\u062d \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0646\u06af\u060c \u0627\u0648\u0631 \u0627\u0635\u0644\u0627\u062d \u06a9\u06d2 \u0628\u0639\u062f \u067e\u06cc\u0645\u0627\u0626\u0634 \u062a\u06cc\u0646 \u0639\u0627\u062f\u0627\u062a \u06c1\u06cc\u06ba \u062c\u0648 \u062c\u0646\u06a9 \u06a9\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u067e\u06c1\u06cc\u0644\u06cc \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u062d\u0644 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u06a9\u0627 \u0645\u0633\u0626\u0644\u06c1 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 Flutter \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u0627 \u062c\u0648\u0627\u0628 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc DevTools \u0645\u06cc\u06ba \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u06a9\u0648\u0688 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u067e\u06be\u0691\u067e\u06be\u0691\u0627\u06c1\u0679 \u0622\u067e \u06a9\u0648 \u062e\u0648\u0628\u0635\u0648\u0631\u062a UI \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u0628\u0646\u0627\u0646\u06d2 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631\u0686\u06c1 \u06cc\u06c1 \u0631\u0641\u062a\u0627\u0631 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u0633\u0628 \u0633\u06d2 \u0628\u0691\u06d2 \u0641\u0648\u0627\u0626\u062f \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0633\u06d2 \u0628\u0627\u0631\u06cc\u06a9 \u0645\u0633\u0627\u0626\u0644 \u0628\u06be\u06cc \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2 \u0627\u0648\u0631 \u0635\u062d\u06cc\u062d \u0679\u0648\u0644\u0632 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0645\u0634\u06a9\u0644 \u06c1\u06d2\u06d4 \u06c1\u06a9\u0644\u0627\u0646\u0627 (\u0645\u0631\u0626\u06cc \u06c1\u06a9\u0644\u0627\u0646\u0627\u060c \u06c1\u06a9\u0644\u0627\u0646\u0627\u060c \u0627\u0648\u0631 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-26439","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/26439","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=26439"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/26439\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=26439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=26439"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=26439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}