{"id":942,"date":"2021-08-26T03:00:59","date_gmt":"2021-08-26T03:00:59","guid":{"rendered":"https:\/\/egany.com\/blogs\/?p=942"},"modified":"2021-09-08T08:19:05","modified_gmt":"2021-09-08T08:19:05","slug":"frontend-du-ky-s1e4-egany-apps-phan-4-dung-thay-hoa-no-ma-ngo-xuan-ve","status":"publish","type":"post","link":"https:\/\/egany.com\/blogs\/frontend-du-ky-s1e4-egany-apps-phan-4-dung-thay-hoa-no-ma-ngo-xuan-ve\/","title":{"rendered":"Frontend Du K\u00fd S1E4 | EGANY Apps (ph\u1ea7n 4): \u0110\u1eebng th\u1ea5y hoa n\u1edf m\u00e0 ng\u1ee1 xu\u00e2n v\u1ec1"},"content":{"rendered":"<p>C\u0169ng l\u00e2u r\u1ed3i ch\u01b0a vi\u1ebft b\u00e0i, mong r\u1eb1ng c\u00e1c b\u1ea1n v\u1eabn \u0111ang \u0111\u00f3n ch\u1edd <strong>Frontend Du K\u00fd S1E4 | EGANY Apps<\/strong>. B\u00e0i vi\u1ebft l\u1ea7n n\u00e0y s\u1ebd k\u1ec3 v\u1ec1 qu\u00e1 tr\u00ecnh kh\u1eafc ph\u1ee5c h\u1ec7 th\u1ed1ng khi ph\u00eda \u0111\u1ed1i t\u00e1c c\u00f3 thay \u0111\u1ed5i l\u1edbn c\u0169ng nh\u01b0 c\u00e1c \u0111i\u1ec1u ch\u1ec9nh v\u1ec1 quy tr\u00ecnh git \u0111\u1ec3 m\u1ecdi th\u1ee9 \u0111\u01b0\u1ee3c su\u00f4n s\u1ebb trong qu\u00e1 tr\u00ecnh ph\u00e1t tri\u1ec3n.<\/p>\n<p>M\u1ed9t s\u1ed1 b\u1ea1n c\u00f3 ph\u1ea3n \u00e1nh v\u1ec1 vi\u1ec7c s\u1eed d\u1ee5ng v\u00ed d\u1ee5 trong n\u1ed9i b\u1ed9 khi\u1ebfn b\u00e0i vi\u1ebft h\u01a1i kh\u00f3 hi\u1ec3u cho ng\u01b0\u1eddi ngo\u00e0i. M\u00ecnh xin ghi nh\u1eadn \u00fd ki\u1ebfn n\u00e0y v\u00e0 s\u1ebd c\u1ed1 g\u1eafng l\u1ea5y v\u00ed d\u1ee5 tr\u1ef1c quan h\u01a1n \u0111\u1ec3 m\u1ecdi ng\u01b0\u1eddi d\u1ec5 h\u00ecnh dung. \u0110\u00e2y c\u0169ng l\u00e0 l\u1ea7n \u0111\u1ea7u m\u00ecnh vi\u1ebft b\u00e0i chia s\u1ebb \u1edf h\u00ecnh th\u1ee9c n\u00e0y, mong c\u00e1c b\u1ea1n th\u00f4ng c\u1ea3m v\u00e0 ti\u1ebfp t\u1ee5c \u1ee7ng h\u1ed9 m\u00ecnh. C\u00e1m \u01a1n m\u1ecdi ng\u01b0\u1eddi r\u1ea5t nhi\u1ec1u.<\/p>\n<p>N\u1ebfu b\u1ea1n ch\u01b0a \u0111\u1ecdc ph\u1ea7n tr\u01b0\u1edbc, b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1ecdc t\u1ea1i:<\/p>\n<ul>\n<li><a href=\"https:\/\/egany.com\/blogs\/frontend-du-ky-s1e1-egany-apps-phan-1-van-su-khoi-dau-nan\/\">Ph\u1ea7n 1: V\u1ea1n s\u1ef1 kh\u1edfi \u0111\u1ea7u nan<\/a><\/li>\n<li><a href=\"https:\/\/egany.com\/blogs\/frontend-du-ky-s1e2-egany-apps-phan-2-noi-de-hon-lam\/\">Ph\u1ea7n 2: N\u00f3i d\u1ec5 h\u01a1n l\u00e0m<\/a><\/li>\n<li><a href=\"https:\/\/egany.com\/blogs\/frontend-du-ky-s1e3-egany-apps-phan-3-thua-thang-xong-len\/\">Ph\u1ea7n 3: Th\u1eeba th\u1eafng x\u00f4ng l\u00ean<\/a><\/li>\n<\/ul>\n<h2>Gi\u1edbi thi\u1ec7u<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/egany.cdn.vccloud.vn\/blogs\/wp-content\/uploads\/2021\/07\/egany-apps-sign-in-screen-700x338.png\" alt=\"egany-apps-sign-in-screen\" \/><\/p>\n<p>Trong l\u00fac m\u1ecdi ng\u01b0\u1eddi \u0111ang h\u0103ng say ph\u00e1t tri\u1ec3n c\u00e1c \u1ee9ng d\u1ee5ng m\u1edbi th\u00ec \u0111\u1ed9t nhi\u00ean ph\u00eda \u0111\u1ed1i t\u00e1c th\u00f4ng b\u00e1o s\u1ebd n\u00e2ng c\u1ea5p major version (t\u1ea1m d\u1ecbch l\u00e0 phi\u00ean b\u1ea3n l\u1edbn, v\u00ed d\u1ee5: version 1.x.x n\u00e2ng l\u00ean version 2.x.x). Th\u00f4ng th\u01b0\u1eddng c\u00e1c b\u1ea3n n\u00e2ng c\u1ea5p n\u00e0y s\u1ebd c\u00f3 breaking change &#8211; c\u00e1c thay \u0111\u1ed5i l\u1edbn \u1ea3nh h\u01b0\u1edfng t\u1edbi h\u1ec7 th\u1ed1ng \u0111ang ch\u1ea1y (k\u1ec3 c\u1ea3 h\u1ec7 th\u1ed1ng c\u1ee7a \u0111\u1ed1i t\u00e1c). D\u1ec5 h\u00ecnh dung nh\u1ea5t c\u00f3 l\u1ebd l\u00e0 thay \u0111\u1ed5i v\u1ec1 API, v\u00ed d\u1ee5:<\/p>\n<ul>\n<li>API truy xu\u1ea5t th\u00f4ng tin chi ti\u1ebft s\u1ea3n ph\u1ea9m s\u1ebd \u0111\u1ed5i t\u1eeb <code>&lt;platform&gt;\/api\/v1\/products?productId=1<\/code> th\u00e0nh <code>&lt;platform&gt;\/api\/v2\/products\/1<\/code><\/li>\n<li>D\u1eef li\u1ec7u &quot;Gi\u00e1 s\u1ea3n ph\u1ea9m&quot; \u0111\u1ed5i t\u1eeb ki\u1ec3u s\u1ed1 <code>1000<\/code> th\u00e0nh ki\u1ec3u chu\u1ed7i <code>&quot;1000&quot;<\/code> ho\u1eb7c ph\u1ee9c t\u1ea1p h\u01a1n l\u00e0 t\u1eeb s\u1ed1 \u0111\u1ed5i th\u00e0nh chu\u1ed7i \u1edf \u0111\u1ecbnh d\u1ea1ng ti\u1ec1n <code>&quot;1.000\u0111&quot;<\/code> (c\u0103n c\u1ee9 theo \u0111\u1ecbnh d\u1ea1ng ti\u1ec1n t\u1ec7 c\u1ee7a kh\u00e1ch h\u00e0ng)<\/li>\n<\/ul>\n<p>Ngo\u00e0i API ra th\u00ec platform c\u0169ng s\u1ebd thay \u0111\u1ed5i th\u00eam v\u1ec1 ph\u00eda giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng. T\u01b0\u1edfng kh\u00f4ng \u1ea3nh h\u01b0\u1edfng nhi\u1ec1u nh\u01b0ng l\u1ea1i \u1ea3nh h\u01b0\u1edfng nhi\u1ec1u kh\u00f4ng t\u01b0\u1edfng.<\/p>\n<p>M\u1ed9t s\u1ed1 thay \u0111\u1ed5i c\u1ee5 th\u1ec3 \u0111\u1ec3 c\u00e1c b\u1ea1n d\u1ec5 h\u00ecnh dung:<\/p>\n<p><strong>Sapo:<\/strong><\/p>\n<ul>\n<li>\u0110\u1ed5i t\u00ean mi\u1ec1n t\u1eeb <code>bizwebvietnam.net<\/code> th\u00e0nh <code>mysapo.net<\/code><\/li>\n<li>\u0110\u1ed5i c\u00e1c bi\u1ebfn s\u1ed1 v\u00e0 d\u1eef li\u1ec7u li\u00ean quan c\u00f3 ch\u1ee9a <code>Bizweb<\/code> th\u00e0nh <code>Sapo<\/code> (trong API l\u1eabn website ng\u01b0\u1eddi d\u00f9ng)<\/li>\n<\/ul>\n<p><strong>Haravan:<\/strong><\/p>\n<ul>\n<li>\u0110\u1ed5i giao di\u1ec7n admin<\/li>\n<li>\u0110\u1ed5i \u0111\u01b0\u1eddng d\u1eabn admin t\u1eeb <code>&lt;website&gt;\/admin\/*<\/code> th\u00e0nh <code>&lt;website&gt;\/adminv2\/*<\/code><\/li>\n<li>\u0110\u1ed5i c\u1ea5u tr\u00fac c\u0169ng nh\u01b0 \u0111\u01b0\u1eddng d\u1eabn c\u1ee7a h\u1ea7u h\u1ebft API<\/li>\n<\/ul>\n<p>Tuy r\u1eb1ng ph\u00eda \u0111\u1ed1i t\u00e1c c\u00f3 th\u00f4ng b\u00e1o tr\u01b0\u1edbc v\u1edbi EGANY v\u1ec1 nh\u1eefng thay \u0111\u1ed5i tr\u00ean nh\u01b0ng th\u00f4ng b\u00e1o n\u00e0y r\u01a1i \u0111\u00fang v\u00e0o th\u1eddi \u0111i\u1ec3m team chu\u1ea9n b\u1ecb ra m\u1eaft \u1ee9ng d\u1ee5ng m\u1edbi.<br \/>\n\u0110\u00fang ng\u01b0\u1eddi nh\u01b0ng sai th\u1eddi \u0111i\u1ec3m \ud83e\udd72.<\/p>\n<p>\u0110\u1ed1i v\u1edbi nh\u1eefng thay \u0111\u1ed5i l\u1edbn nh\u01b0 tr\u00ean, ph\u00eda \u0111\u1ed1i t\u00e1c s\u1ebd lu\u00f4n ch\u1ecdn chi\u1ebfn l\u01b0\u1ee3c n\u00e2ng c\u1ea5p theo giai \u0111o\u1ea1n. \u0110i\u1ec1u n\u00e0y \u0111\u1ed3ng ngh\u0129a v\u1edbi vi\u1ec7c h\u1ec7 th\u1ed1ng c\u1ee7a EGANY ph\u1ea3i h\u1ed7 tr\u1ee3 song song c\u1ea3 2 phi\u00ean b\u1ea3n m\u1edbi v\u00e0 c\u0169 cho t\u1edbi khi platform n\u00e2ng c\u1ea5p xong. Qu\u00e1 tr\u00ecnh chuy\u1ec3n \u0111\u1ed5i b\u1eaft \u0111\u1ea7u.<\/p>\n<h2>G\u1ee1 \u1ee9ng d\u1ee5ng tr\u00ean s\u00e0n<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/egany.cdn.vccloud.vn\/blogs\/wp-content\/uploads\/2021\/08\/thao-go-ung-dung-tren-san-700x394.jpg\" alt=\"thao-go-ung-dung-tren-san\" \/><\/p>\n<p>Ngay t\u1ea1i th\u1eddi \u0111i\u1ec3m chuy\u1ec3n \u0111\u1ed5i, m\u1ed9t s\u1ed1 \u1ee9ng d\u1ee5ng c\u1ee7a EGANY ng\u01b0ng ho\u1ea1t \u0111\u1ed9ng \u0111\u1ed1i v\u1edbi c\u00e1c kh\u00e1ch h\u00e0ng c\u0169. C\u00e1c kh\u00e1ch h\u00e0ng m\u1edbi khi c\u00e0i \u0111\u1eb7t \u1ee9ng d\u1ee5ng c\u0169ng g\u1eb7p r\u1ea5t nhi\u1ec1u v\u1ea5n \u0111\u1ec1. Team g\u1eb7p kh\u00e1 nhi\u1ec1u kh\u00f3 kh\u0103n trong qu\u00e1 tr\u00ecnh chuy\u1ec3n \u0111\u1ed5i:<\/p>\n<ul>\n<li>Kh\u00f4ng c\u00f3 t\u00e0i li\u1ec7u c\u1ee7a phi\u00ean b\u1ea3n m\u1edbi ho\u1eb7c c\u00f3 r\u1ea5t \u00edt v\u00e0 ch\u01b0a ch\u00ednh x\u00e1c<\/li>\n<li>Team b\u1ecb \u0111\u1ed9ng trong vi\u1ec7c s\u1eeda l\u1ed7i li\u00ean quan t\u1edbi \u0111\u1ed1i t\u00e1c nh\u01b0 l\u1ed7i API, l\u1ed7i h\u1ea1 t\u1ea7ng, th\u1eddi gian ch\u1edd duy\u1ec7t l\u00e2u, &#8230;<\/li>\n<li>Platform th\u00f4ng tin sai v\u1ec1 vi\u1ec7c chuy\u1ec3n \u0111\u1ed5i, c\u1ee5 th\u1ec3 l\u00e0 th\u00f4ng b\u00e1o nh\u1ea7m domain s\u1ebd chu\u1ea9n b\u1ecb \u0111\u1ed5i<\/li>\n<\/ul>\n<p>Sau kho\u1ea3ng 3 ng\u00e0y th\u1eed chuy\u1ec3n \u0111\u1ed5i th\u00ec team quy\u1ebft \u0111\u1ecbnh t\u1ea1m th\u1eddi g\u1ee1 \u1ee9ng d\u1ee5ng kh\u1ecfi s\u00e0n. Quy\u1ebft \u0111\u1ecbnh n\u00e0y \u0111\u01b0a ra nh\u1eb1m lo\u1ea1i b\u1ecf l\u01b0\u1ee3t kh\u00e1ch h\u00e0ng c\u00e0i \u0111\u1eb7t m\u1edbi, gi\u00fap team t\u1eadp trung v\u00e0o c\u00e1c kh\u00e1ch h\u00e0ng \u0111ang s\u1eed d\u1ee5ng.<\/p>\n<p>Team s\u1ebd \u01b0u ti\u00ean x\u1eed l\u00fd ph\u00eda Sapo tr\u01b0\u1edbc, do thay \u0111\u1ed5i ph\u00eda Sapo kh\u00f4ng nhi\u1ec1u v\u00e0 \u1ed5n \u0111\u1ecbnh h\u01a1n so v\u1edbi ph\u00eda Haravan (so s\u00e1nh trong th\u1eddi \u0111i\u1ec3m n\u00e0y). C\u00e1c \u1ee9ng d\u1ee5ng Haravan s\u1ebd \u0111\u01b0\u1ee3c \u0111i\u1ec1u ch\u1ec9nh v\u00e0 \u0111\u01b0a l\u00ean s\u00e0n sau khi ph\u00eda Sapo \u0111\u00e3 \u1ed5n \u0111\u1ecbnh.<\/p>\n<p>B\u00ean c\u1ea1nh vi\u1ec7c chuy\u1ec3n \u0111\u1ed5i th\u00ec EGANY c\u0169ng r\u1ea5t ch\u1ee7 \u0111\u1ed9ng trong vi\u1ec7c th\u00f4ng b\u00e1o v\u1edbi kh\u00e1ch h\u00e0ng b\u1ecb \u1ea3nh h\u01b0\u1edfng \u0111\u1ed3ng th\u1eddi c\u00f3 c\u00e1c \u0111\u1ed9ng th\u00e1i &quot;\u0111\u1ec1n b\u00f9&quot; th\u1ecfa \u0111\u00e1ng cho kh\u00e1ch. M\u00ecnh ngh\u0129 \u0111\u00e2y c\u0169ng l\u00e0 m\u1ed9t \u0111i\u1ec1u c\u1ea7n thi\u1ebft trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y. V\u1eeba \u0111\u01b0\u1ee3c l\u00f2ng kh\u00e1ch v\u1eeba \u0111\u1ea3m b\u1ea3o team kh\u00f4ng b\u1ecb &quot;kh\u1ee7ng b\u1ed1&quot; b\u1edfi c\u00e1c tin nh\u1eafn, email ho\u1eb7c cu\u1ed9c g\u1ecdi b\u00e1o l\u1ed7i c\u1ee7a kh\u00e1ch.<\/p>\n<h2>Chuy\u1ec3n \u0111\u1ed5i \u1ee9ng d\u1ee5ng<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/egany.cdn.vccloud.vn\/blogs\/wp-content\/uploads\/2021\/07\/change-app-structure-600x450.jpg\" alt=\"change-app-structure\" \/><\/p>\n<blockquote>\n<p>Ngu\u1ed3n \u1ea3nh: <a href=\"https:\/\/dribbble.com\/shots\/6101200-Time-to-Refactoring-your-Code\" rel=\"nofollow noopener\" target=\"_blank\">https:\/\/dribbble.com\/shots\/6101200-Time-to-Refactoring-your-Code<\/a><\/p>\n<\/blockquote>\n<p>\u1ede EGANY c\u00f3 m\u1ed9t &quot;\u1ee9ng d\u1ee5ng&quot; \u0111\u1eb7c bi\u1ec7t h\u1ed7 tr\u1ee3 kh\u00e1ch h\u00e0ng \u0111\u00f3 l\u00e0 <a href=\"https:\/\/chrome.google.com\/webstore\/detail\/egany-tools\/ccnllgcbfegnbaokgodmlfdmocbechdg?hl=vi\" rel=\"nofollow noopener\" target=\"_blank\">EGANY Tools<\/a>. Tuy g\u1ecdi l\u00e0 \u1ee9ng d\u1ee5ng nh\u01b0ng <a href=\"https:\/\/egany.com\/apps\/egany-tools\/\" title=\"EGANY Tools\">EGANY Tools<\/a> b\u1ea3n ch\u1ea5t l\u00e0 m\u1ed9t Chrome Extension. C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a n\u00f3 ph\u1ee5 thu\u1ed9c kh\u00e1 nhi\u1ec1u v\u00e0o giao di\u1ec7n website c\u0169ng nh\u01b0 giao di\u1ec7n admin c\u1ee7a n\u00ean vi\u1ec7c EGANY Tools b\u1ecb \u1ea3nh h\u01b0\u1edfng l\u00e0 \u0111i\u1ec1u kh\u00f4ng tr\u00e1nh kh\u1ecfi. V\u00ed d\u1ee5:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/egany.cdn.vccloud.vn\/blogs\/wp-content\/uploads\/2021\/08\/egany-tool-tinh-nang-chinh-sua-metafield.jpg\" alt=\"egany-tool-tinh-nang-chinh-sua-metafield\" \/><\/p>\n<blockquote>\n<p>T\u00ednh n\u0103ng \u0111i\u1ec1u ch\u1ec9nh metafield cho s\u1ea3n ph\u1ea9m c\u1ee7a EGANY Tools<\/p>\n<\/blockquote>\n<p>Trong \u1ea3nh l\u00e0 giao di\u1ec7n admin c\u0169 c\u1ee7a Haravan. Do ph\u00eda Haravan kh\u00f4ng h\u1ed7 tr\u1ee3 \u0111i\u1ec1u ch\u1ec9nh metafield (d\u00f9 API c\u00f3 h\u1ed7 tr\u1ee3) n\u00ean EGANY Tools s\u1ebd gi\u00fap ng\u01b0\u1eddi d\u00f9ng th\u00eam form ch\u1ec9nh s\u1eeda v\u00e0o trong giao di\u1ec7n admin. Tuy nhi\u00ean, khi Haravan c\u1eadp nh\u1eadt giao di\u1ec7n admin, c\u1ea5u tr\u00fac HTML c\u1ee7a trang b\u1ecb thay \u0111\u1ed5i, d\u1eabn t\u1edbi vi\u1ec7c render form b\u1ecb \u1ea3nh h\u01b0\u1edfng. Ngo\u00e0i ra, do API li\u00ean quan t\u1edbi metafield c\u0169ng thay \u0111\u1ed5i n\u00ean t\u00ednh n\u0103ng n\u00e0y t\u1ea1m th\u1eddi kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng \u0111\u01b0\u1ee3c. V\u1eady l\u00e0 ph\u1ea3i t\u1ea1m t\u1eaft t\u00ednh n\u0103ng n\u00e0y.<\/p>\n<p>Nhi\u1ec1u t\u00ednh n\u0103ng kh\u00e1c t\u01b0\u01a1ng t\u1ef1 c\u0169ng b\u1ecb \u1ea9n \u0111i, duy nh\u1ea5t ch\u1ec9 c\u00f3 t\u00ednh n\u0103ng &quot;Thi\u1ebft l\u1eadp v\u1ecb tr\u00ed addon&quot; l\u00e0 kh\u00f4ng b\u1ecb \u1ea3nh h\u01b0\u1edfng, v\u00e0 may m\u1eafn thay \u0111\u00e2y l\u00e0 t\u00ednh n\u0103ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng nhi\u1ec1u nh\u1ea5t. C\u00f4ng vi\u1ec7c l\u00fac b\u1ea5y gi\u1edd ch\u1ec9 l\u00e0 \u0111i\u1ec1u ch\u1ec9nh l\u1ea1i th\u00f4ng tin domain c\u1ee7a ph\u00eda Sapo (h\u1ed7 tr\u1ee3 <code>bizwebvietnam.net<\/code> l\u1eabn <code>mysapo.net<\/code>) v\u00e0 ch\u1edd x\u00e9t duy\u1ec7t.<br \/>\nKh\u00f4ng may thay, ph\u00eda Sapo th\u00f4ng b\u00e1o nh\u1ea7m domain <code>mysaposhop.net<\/code> thay v\u00ec <code>mysapo.net<\/code> n\u00ean m\u1ed9t l\u1ea7n n\u1eefa ph\u1ea3i c\u1eadp nh\u1eadt phi\u00ean b\u1ea3n EGANY Tools. Qu\u00e1 tr\u00ecnh n\u00e0y kh\u00e1 m\u1ea5t th\u1eddi gian, th\u01b0\u1eddng ph\u1ea3i ch\u1edd m\u1ed9t tu\u1ea7n m\u1edbi c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c ch\u1ea5p thu\u1eadn.<\/p>\n<p>\u0110\u1ea5y l\u00e0 EGANY Tools, v\u1ec1 c\u00e1c \u1ee9ng d\u1ee5ng kh\u00e1c th\u00ec nh\u01b0 k\u1ebf ho\u1ea1ch \u1edf tr\u00ean, hi\u1ec7n t\u1ea1i team ch\u1ec9 t\u1eadp trung v\u00e0o ph\u00eda Sapo do ph\u00eda Sapo \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 sau n\u00ean c\u0169ng ch\u01b0a c\u00f3 qu\u00e1 nhi\u1ec1u \u1ee9ng d\u1ee5ng tr\u00ean s\u00e0n. Ph\u00eda Haravan th\u00ec ch\u1eadt v\u1eadt h\u01a1n kh\u00e1 nhi\u1ec1u. Tuy \u0111\u00e3 g\u1ee1 \u1ee9ng d\u1ee5ng kh\u1ecfi s\u00e0n nh\u01b0ng kh\u00e1ch c\u0169 v\u1eabn truy c\u1eadp \u0111\u01b0\u1ee3c v\u00e0o dashboard v\u00e0 thi\u1ebft l\u1eadp \u1ee9ng d\u1ee5ng.<br \/>\nT\u1ea5t nhi\u00ean l\u00e0 h\u1ec7 th\u1ed1ng l\u00fac n\u00e0y s\u1ebd kh\u00f4ng th\u1ec3 n\u00e0o ho\u1ea1t \u0111\u1ed9ng \u1ed5n \u0111\u1ecbnh r\u1ed3i. Backend ph\u1ea3i g\u1ea5p r\u00fat s\u1eeda l\u1ed7i v\u00e0 h\u1ed7 tr\u1ee3 k\u1ecbp th\u1eddi \u0111\u1ec3 kh\u00e1ch c\u0169 c\u00f3 th\u1ec3 ti\u1ebfp t\u1ee5c ch\u1ea1y \u1ee9ng d\u1ee5ng. \u0110\u00e2y ch\u1ec9 l\u00e0 gi\u1ea3i ph\u00e1p t\u1ea1m th\u1eddi.<\/p>\n<h2>Gi\u1ea3m l\u1ec7 thu\u1ed9c v\u00e0o platform<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/egany.cdn.vccloud.vn\/blogs\/wp-content\/uploads\/2021\/08\/giam-phu-thuoc-nen-tang-600x450.jpg\" alt=\"giam-phu-thuoc-nen-tang\" \/><\/p>\n<blockquote>\n<p>Ngu\u1ed3n \u1ea3nh: <a href=\"https:\/\/dribbble.com\/shots\/16252155-Move-in-and-rent-your-home\" rel=\"nofollow noopener\" target=\"_blank\">https:\/\/dribbble.com\/shots\/16252155-Move-in-and-rent-your-home<\/a><\/p>\n<\/blockquote>\n<p>Trong th\u1eddi gian chuy\u1ec3n \u0111\u1ed5i, nh\u1eadn th\u1ea5y vi\u1ec7c h\u1ec7 th\u1ed1ng n\u00f3i chung v\u00e0 \u1ee9ng d\u1ee5ng n\u00f3i ri\u00eang \u0111ang ph\u1ee5 thu\u1ed9c qu\u00e1 nhi\u1ec1u v\u00e0o platform, team \u0111\u1ec1 xu\u1ea5t m\u1ed9t s\u1ed1 thay \u0111\u1ed5i \u0111\u1ec3 gi\u1ea3m m\u1ee9c \u0111\u1ed9 \u1ea3nh h\u01b0\u1edfng c\u1ee7a platform t\u1edbi h\u1ec7 th\u1ed1ng. Thay \u0111\u1ed5i l\u1edbn nh\u1ea5t v\u00e0 c\u00f3 \u1ea3nh h\u01b0\u1edfng nh\u1ea5t l\u00e0 c\u00e1ch qu\u1ea3n l\u00fd settings (thi\u1ebft l\u1eadp) c\u1ee7a \u1ee9ng d\u1ee5ng.<\/p>\n<p><strong>M\u00f4 h\u00ecnh qu\u1ea3n l\u00fd settings hi\u1ec7n t\u1ea1i:<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/egany.cdn.vccloud.vn\/blogs\/wp-content\/uploads\/2021\/08\/flow-luu-thiet-lap-cu.jpg\" alt=\"flow-luu-thiet-lap-cu\" \/><\/p>\n<ul>\n<li>Platform n\u1eafm gi\u1eef settings<\/li>\n<li>Backend ch\u1ec9 \u0111\u00f3ng vai tr\u00f2 trung gian \u0111\u1ec3 get\/set settings<\/li>\n<li>Kh\u00f4ng c\u00f3 c\u01a1 ch\u1ebf caching<\/li>\n<\/ul>\n<p>\u01afu \u0111i\u1ec3m:<\/p>\n<ul>\n<li><strong>Kh\u00f4ng c\u1ea7n qu\u1ea3n l\u00fd settings<\/strong>. Settings s\u1ebd do ph\u00eda platform qu\u1ea3n l\u00fd n\u00ean ph\u00eda EGANY s\u1ebd kh\u00f4ng c\u1ea7n can thi\u1ec7p. Khi m\u1edbi b\u1eaft \u0111\u1ea7u, team s\u1ebd ti\u1ebft ki\u1ec7m \u0111\u01b0\u1ee3c nhi\u1ec1u th\u1eddi gian v\u00e0 kinh ph\u00ed<\/li>\n<\/ul>\n<p>Khuy\u1ebft \u0111i\u1ec3m:<\/p>\n<ul>\n<li><strong>Ph\u1ee5 thu\u1ed9c platform API<\/strong>. N\u1ebfu platform API g\u1eb7p tr\u1ee5c tr\u1eb7c th\u00ec dashboard g\u1ea7n nh\u01b0 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a v\u00ec kh\u00f4ng th\u1ec3 get\/set settings<\/li>\n<li><strong>T\u1ed1c \u0111\u1ed9 ch\u1eadm<\/strong>. Get settings th\u00ec t\u01b0\u01a1ng \u0111\u1ed1i nhanh nh\u01b0ng vi\u1ec7c set settings (v\u1ec1 c\u01a1 b\u1ea3n l\u00e0 ghi file v\u00e0 website kh\u00e1ch) l\u00e2u h\u01a1n. \u0110i\u1ec1u n\u00e0y d\u1eabn t\u1edbi vi\u1ec7c khi l\u1ea7n \u0111\u1ea7u c\u00e0i \u0111\u1eb7t, \u0111\u00f4i khi settings ch\u01b0a \u0111\u01b0\u1ee3c ghi xong s\u1ebd khi\u1ebfn dashboard kh\u00f4ng \u0111\u1ecdc \u0111\u01b0\u1ee3c.<\/li>\n<\/ul>\n<p><strong>M\u00f4 h\u00ecnh qu\u1ea3n l\u00fd settings m\u1edbi:<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/egany.cdn.vccloud.vn\/blogs\/wp-content\/uploads\/2021\/08\/flow-luu-thiet-lap-moi.jpg\" alt=\"flow-luu-thiet-lap-moi\" \/><\/p>\n<ul>\n<li>Backend n\u1eafm gi\u1eef settings<\/li>\n<li>Platform ch\u1ec9 c\u00f3 nhi\u1ec7m v\u1ee5 l\u01b0u file \u0111\u1ec3 t\u1eadn d\u1ee5ng CDN ph\u00eda platform<\/li>\n<li>C\u00f3 c\u01a1 ch\u1ebf caching \u0111\u1ec3 t\u0103ng t\u1ed1c \u0111\u1ed9 truy xu\u1ea5t settings gi\u1eefa backend v\u00e0 dashboard<\/li>\n<\/ul>\n<p>\u01afu \u0111i\u1ec3m:<\/p>\n<ul>\n<li><strong>\u00cdt ph\u1ee5 thu\u1ed9c v\u00e0o platform<\/strong>. V\u00ec \u0111\u00e3 t\u1ef1 qu\u1ea3n l\u00fd settings n\u00ean vi\u1ec7c ph\u1ee5 thu\u1ed9c v\u00e0o platform API s\u1ebd l\u00e0 r\u1ea5t \u00edt<\/li>\n<li><strong>D\u1ec5 d\u00e0ng x\u1eed l\u00fd s\u1ef1 c\u1ed1<\/strong>. Nh\u1edd l\u01b0u tr\u1eef l\u1ea1i settings n\u00ean khi g\u1eb7p s\u1ef1 c\u1ed1 kh\u00f4ng th\u1ec3 x\u1eed l\u00fd b\u1eb1ng API th\u00ec team v\u1eabn c\u00f3 \u0111\u01b0\u1ee3c settings m\u1edbi nh\u1ea5t \u0111\u1ec3 c\u1eadp nh\u1eadt tay cho kh\u00e1ch<\/li>\n<li><strong>T\u0103ng tr\u1ea3i nghi\u1ec7m l\u1ea7n \u0111\u1ea7u c\u00e0i \u0111\u1eb7t \u1ee9ng d\u1ee5ng<\/strong>. Kh\u00f4ng c\u00f2n c\u1ea3nh kh\u00e1ch h\u00e0ng ch\u1edd settings \u0111\u01b0\u1ee3c t\u1ea3i v\u1ec1 sau khi c\u00e0i \u0111\u1eb7t. M\u1ecdi th\u1ee9 tr\u1edf n\u00ean m\u01b0\u1ee3t m\u00e0 h\u01a1n khi\u1ebfn tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng t\u0103ng l\u00ean \u0111\u00e1ng k\u1ec3<\/li>\n<\/ul>\n<p>Khuy\u1ebft \u0111i\u1ec3m:<\/p>\n<ul>\n<li><strong>T\u1ed1n t\u00e0i nguy\u00ean<\/strong>. Team ph\u1ea3i b\u1ecf th\u00eam chi ph\u00ed v\u00e0 ngu\u1ed3n l\u1ef1c \u0111\u1ec3 ph\u00e1t tri\u1ec3n c\u0169ng nh\u01b0 duy tr\u00ec h\u1ec7 th\u1ed1ng m\u1edbi<\/li>\n<\/ul>\n<p>D\u00f9 g\u1eb7p kh\u00e1 nhi\u1ec1u kh\u00f3 kh\u0103n trong qu\u00e1 tr\u00ecnh ph\u00e1t tri\u1ec3n, \u0111\u1eb7c bi\u1ec7t l\u00e0 c\u00e1c v\u1ea5n \u0111\u1ec1 li\u00ean quan t\u1edbi caching nh\u01b0ng cu\u1ed1i c\u00f9ng th\u00ec team c\u0169ng th\u00e0nh c\u00f4ng. T\u00ednh t\u1edbi th\u1eddi \u0111i\u1ec3m hi\u1ec7n t\u1ea1i (th\u1eddi \u0111i\u1ec3m vi\u1ebft b\u00e0i blog n\u00e0y) th\u00ec m\u00f4 h\u00ecnh tr\u00ean v\u1eabn \u0111ang ho\u1ea1t \u0111\u1ed9ng r\u1ea5t r\u1ed1t v\u00e0 ch\u01b0a g\u1eb7p ph\u1ea3i v\u1ea5n \u0111\u1ec1 g\u00ec.<\/p>\n<h2>Thay \u0111\u1ed5i quy tr\u00ecnh git<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/egany.cdn.vccloud.vn\/blogs\/wp-content\/uploads\/2021\/07\/git-logo-700x293.png\" alt=\"git-logo\" \/><\/p>\n<p>T\u1eeb l\u00fac th\u1ed1ng nh\u1ea5t quy tr\u00ecnh git, team lu\u00f4n b\u00e1m s\u00e1t k\u1ebf ho\u1ea1ch ra m\u1eaft \u1ee9ng d\u1ee5ng n\u00ean quy tr\u00ecnh \u0111\u00e3 ch\u1ed1t ch\u1ea1y v\u1eabn r\u1ea5t \u1ed5n. Ri\u00eang l\u1ea7n n\u00e0y ph\u00e1t sinh v\u1ea5n \u0111\u1ec1 qu\u00e1 l\u1edbn, team nh\u1eadn ra quy tr\u00ecnh c\u00f3 ch\u1ed7 ch\u01b0a h\u1ee3p l\u00fd.<\/p>\n<p><strong>Quy tr\u00ecnh hi\u1ec7n t\u1ea1i<\/strong><\/p>\n<ol>\n<li>Merge nh\u00e1nh t\u00ednh n\u0103ng v\u00e0o <code>develop<\/code> khi \u0111\u00e3 ho\u00e0n thi\u1ec7n t\u00ednh n\u0103ng v\u00e0 x\u00f3a nh\u00e1nh<\/li>\n<li>Sau khi \u0111\u1ee7 s\u1ed1 l\u01b0\u1ee3ng t\u00ednh n\u0103ng c\u1ea7n thi\u1ebft, t\u1ea1o nh\u00e1nh <code>release<\/code> t\u1eeb <code>develop<\/code><\/li>\n<li>S\u1eeda l\u1ed7i v\u00e0 \u0111i\u1ec1u ch\u1ec9nh tr\u00ean nh\u00e1nh <code>release<\/code><\/li>\n<li>Merge <code>release<\/code> v\u00e0o <code>main<\/code> v\u00e0 <code>develop<\/code> khi ra m\u1eaft phi\u00ean b\u1ea3n m\u1edbi<\/li>\n<\/ol>\n<p>Team \u00e1p d\u1ee5ng \u0111\u00fang quy tr\u00ecnh tr\u00ean cho l\u1ea7n ra m\u1eaft l\u1ea7n n\u00e0y. Tuy nhi\u00ean sau khi nh\u1eadn \u0111\u01b0\u1ee3c th\u00f4ng b\u00e1o c\u1ee7a ph\u00eda platform, k\u1ebf ho\u1ea1ch b\u1ecb ho\u00e3n l\u1ea1i \u0111\u1ec3 \u01b0u ti\u00ean chuy\u1ec3n \u0111\u1ed5i cho ph\u00eda Sapo. O\u00e1i o\u0103m thay th\u00ec code c\u1ee7a c\u1ea3 \u1ee9ng d\u1ee5ng Sapo l\u1eabn Haravan \u0111\u1ec1u \u0111\u00e3 n\u1eb1m tr\u00ean <code>develop<\/code>. \u0110\u1ec3 c\u00f3 th\u1ec3 \u0111\u01b0a b\u1ea3n m\u1edbi l\u00ean production, team c\u00e2n nh\u1eafc m\u1ed9t s\u1ed1 gi\u1ea3i ph\u00e1p sau:<\/p>\n<ul>\n<li><strong>Checkout nh\u00e1nh m\u1edbi t\u1eeb commit tr\u01b0\u1edbc khi merge nh\u00e1nh t\u00ednh n\u0103ng<\/strong>. Kh\u00f4ng kh\u1ea3 thi do c\u00f3 m\u1ed9t s\u1ed1 hotfix (s\u1eeda l\u1ed7i kh\u1ea9n c\u1ea5p) chen gi\u1eefa c\u00e1c l\u1ea7n merge nh\u00e1nh t\u00ednh n\u0103ng<\/li>\n<li><strong>Cherry pick commit<\/strong>. T\u01b0\u01a1ng \u0111\u1ed1i ph\u1ee9c t\u1ea1p v\u00e0 n\u00e2ng cao so v\u1edbi tr\u00ecnh \u0111\u1ed9 c\u1ee7a team l\u00fac b\u1ea5y gi\u1edd, h\u01a1n n\u1eefa th\u00ec commit c\u1ee7a team c\u0169ng kh\u00f4ng qu\u00e1 t\u1ed1t \u0111\u1ec3 c\u00f3 th\u1ec3 cherry pick<\/li>\n<li><strong>Checkout t\u1eeb <code>main<\/code> thay v\u00ec <code>develop<\/code><\/strong>. Ch\u1ec9 ph\u00f9 h\u1ee3p n\u1ebfu l\u1ea7n release kh\u00f4ng \u0111i k\u00e8m c\u00e1c \u1ee9ng d\u1ee5ng m\u1edbi c\u1ee7a Sapo. Team \u0111ang mu\u1ed1n \u0111\u1ea9y b\u1ea3n v\u00e1 l\u1ed7i c\u00f9ng c\u00e1c \u1ee9ng d\u1ee5ng \u0111\u00e3 k\u1ecbp chuy\u1ec3n \u0111\u1ed5i c\u1ee7a ph\u00eda Sapo l\u00ean tr\u01b0\u1edbc<\/li>\n<li><strong>Revert merge commit<\/strong>. Kh\u00f4ng d\u1ec5 nh\u01b0ng kh\u1ea3 thi, tuy nhi\u00ean th\u00ec git history s\u1ebd h\u01a1i x\u1ea5u m\u1ed9t ch\u00fat v\u00e0 s\u1ebd m\u1ea5t c\u00f4ng l\u1ee5c l\u1ea1i code c\u0169 khi mu\u1ed1n s\u1eed d\u1ee5ng l\u1ea1i<\/li>\n<li><strong>Merge nh\u01b0 quy tr\u00ecnh b\u00ecnh th\u01b0\u1eddng<\/strong>. C\u00e1ch d\u1ec5 nh\u1ea5t, kh\u00f4ng thay \u0111\u1ed5i quy tr\u00ecnh nh\u01b0ng s\u1ebd b\u1ecb d\u01b0 code khi build do <code>develop<\/code> hi\u1ec7n t\u1ea1i \u0111\u00e3 c\u00f3 code c\u1ee7a c\u1ea3 Sapo v\u00e0 Haravan<\/li>\n<\/ul>\n<p>Sau m\u1ed9t h\u1ed3i th\u1ea3o lu\u1eadn th\u00ec team quy\u1ebft \u0111\u1ecbnh merge ch\u1ed3ng l\u00ean. L\u00fd do:<\/p>\n<ul>\n<li>Next.js compile theo trang n\u00ean l\u01b0\u1ee3ng code d\u01b0 c\u1ee7a trang m\u1edbi s\u1ebd kh\u00f4ng l\u00e0m \u1ea3nh h\u01b0\u1edfng t\u1edbi c\u00e1c trang c\u0169<\/li>\n<li>EGANY Apps \u0111\u01b0\u1ee3c ki\u1ec3m so\u00e1t b\u1edfi \u1ee9ng d\u1ee5ng tr\u00ean s\u00e0n platform c\u0169ng nh\u01b0 d\u1eef li\u1ec7u \u1edf database n\u00ean vi\u1ec7c kh\u00e1ch h\u00e0ng truy c\u1eadp v\u00e0o c\u00e1c \u1ee9ng d\u1ee5ng m\u1edbi l\u00e0 kh\u00f4ng th\u1ec3<\/li>\n<li>Team mu\u1ed1n gi\u1eef l\u1ea1i ph\u1ea7n code \u0111\u00e3 ph\u00e1t tri\u1ec3n do ph\u00eda dashboard s\u1ebd kh\u00f4ng c\u1ea7n thay \u0111\u1ed5i qu\u00e1 nhi\u1ec1u, gi\u1eef l\u1ea1i code c\u0169 s\u1ebd ti\u1ebft ki\u1ec7m nhi\u1ec1u th\u1eddi gian ph\u00e1t tri\u1ec3n sau n\u00e0y<\/li>\n<li>Th\u1eadt s\u1ef1 m\u00e0 n\u00f3i th\u00ec th\u1eddi gian kh\u00f4ng cho ph\u00e9p \u0111\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 li\u00ean quan t\u1edbi git n\u00ean team ch\u1ecdn gi\u1ea3i ph\u00e1p n\u00e0o \u0111\u01a1n gi\u1ea3n nh\u1ea5t v\u00e0 nhanh nh\u1ea5t \u0111\u1ec3 th\u1ef1c hi\u1ec7n. Nh\u00e0 bao vi\u1ec7c!<\/li>\n<\/ul>\n<p>R\u00fat kinh nghi\u1ec7m l\u1ea7n n\u00e0y, team c\u00f3 ch\u1ec9nh s\u1eeda l\u1ea1i m\u1ed9t ch\u00fat v\u1ec1 quy tr\u00ecnh:<\/p>\n<p><strong>Quy tr\u00ecnh m\u1edbi<\/strong><\/p>\n<ol>\n<li>Checkout nh\u00e1nh <code>release<\/code> t\u1eeb <code>develop<\/code><\/li>\n<li>Merge nh\u00e1nh t\u00ednh n\u0103ng v\u00e0o <code>release<\/code> nh\u01b0ng kh\u00f4ng x\u00f3a nh\u00e1nh<\/li>\n<li>S\u1eeda l\u1ed7i tr\u1ef1c ti\u1ebfp tr\u00ean nh\u00e1nh <code>release<\/code> ho\u1eb7c nh\u00e1nh <code>features<\/code> (t\u00ednh n\u0103ng) v\u00e0 merge ng\u01b0\u1ee3c l\u1ea1i v\u00e0o <code>release<\/code><\/li>\n<li>Merge nh\u00e1nh <code>release<\/code> v\u00e0o l\u1ea1i <code>main<\/code> v\u00e0 <code>develop<\/code>, x\u00f3a nh\u00e1nh <code>features<\/code><\/li>\n<\/ol>\n<p>V\u1edbi quy tr\u00ecnh m\u1edbi th\u00ec team h\u1ea1n ch\u1ebf \u0111\u01b0\u1ee3c vi\u1ec7c \u0111\u1ea9y code d\u01b0 th\u1eeba l\u00ean production. L\u1ee1 may sau n\u00e0y g\u1eb7p l\u1ea1i tr\u01b0\u1eddng h\u1ee3p tr\u00ean th\u00ec team ch\u1ec9 c\u1ea7n x\u00f3a nh\u00e1nh <code>release<\/code> hi\u1ec7n t\u1ea1i, t\u1ea1o nh\u00e1nh <code>release<\/code> m\u1edbi v\u00e0 merge l\u1ea1i c\u00e1c t\u00ednh n\u0103ng ho\u1eb7c s\u1eeda l\u1ed7i c\u1ea7n thi\u1ebft.<\/p>\n<p>Ngo\u00e0i thay \u0111\u1ed5i tr\u00ean th\u00ec team c\u0169ng c\u00e2n nh\u1eafc x\u00f3a lu\u00f4n nh\u00e1nh <code>develop<\/code> v\u00e0 ch\u1ec9 s\u1eed d\u1ee5ng nh\u00e1nh <code>main<\/code>. N\u1ebfu m\u1ecdi ng\u01b0\u1eddi \u0111\u1ec3 \u00fd th\u00ec EGANY Apps kh\u00f4ng c\u00f3 phi\u00ean b\u1ea3n dev d\u00e0nh cho ng\u01b0\u1eddi d\u00f9ng. N\u1ebfu build cho tester th\u00ec c\u0169ng s\u1eed d\u1ee5ng nh\u00e1nh <code>release<\/code> \u0111\u1ec3 s\u00e1t v\u1edbi th\u1ef1c t\u1ebf nh\u1ea5t. V\u00ec v\u1eady nh\u00e1nh <code>develop<\/code> \u0111ang l\u00e0 d\u01b0, team ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 thao t\u00e1c tr\u00ean nh\u00e1nh <code>main<\/code> v\u1edbi quy tr\u00ecnh m\u1edbi. Ngh\u0129 th\u00ec ngh\u0129 v\u1eady th\u00f4i nh\u01b0ng do l\u00fac \u0111\u00f3 kh\u00f4ng c\u00f3 nhi\u1ec1u th\u1eddi gian, team kh\u00f4ng d\u00e1m m\u1ea1o hi\u1ec3m nh\u01b0 v\u1eady. Th\u00f4i th\u00ec th\u1eeba h\u01a1n thi\u1ebfu.<\/p>\n<h2>T\u1ea1m k\u1ebft<\/h2>\n<p>Sau nhi\u1ec1u th\u00e1ng v\u1eadt l\u1ed9n th\u00ec team \u0111\u00e3 \u0111\u1ea1t \u0111\u01b0\u1ee3c k\u1ebf ho\u1ea1ch \u0111\u1ec1 ra l\u00e0 chuy\u1ec3n \u0111\u1ed5i \u1ee9ng d\u1ee5ng c\u0169 v\u00e0 m\u1edbi cho c\u1ea3 hai n\u1ec1n t\u1ea3ng Sapo v\u00e0 Haravan. Team nh\u1eadn ra \u0111\u01b0\u1ee3c nhi\u1ec1u khuy\u1ebft \u0111i\u1ec3m trong quy tr\u00ecnh c\u0169ng nh\u01b0 c\u00e1ch qu\u1ea3n l\u00fd d\u1ef1 \u00e1n hi\u1ec7n t\u1ea1i. T\u1ea5t nhi\u00ean, team kh\u00f4ng d\u1eebng l\u1ea1i \u1edf \u0111\u00f3.<\/p>\n<p>Trong qu\u00e1 tr\u00ecnh chuy\u1ec3n \u0111\u1ed5i, do th\u1eddi gian kh\u00f4ng cho ph\u00e9p n\u00ean ch\u1ea5t l\u01b0\u1ee3ng codebase gi\u1ea3m xu\u1ed1ng \u0111\u00e1ng k\u1ec3. Nhi\u1ec1u \u1ee9ng d\u1ee5ng h\u01a1n, \u0111\u1ed9 ph\u1ee9c t\u1ea1p c\u1ee7a ch\u00fang c\u0169ng cao h\u01a1n khi\u1ebfn dashboard tr\u1edf n\u00ean \u1ef3 \u1ea1ch h\u01a1n. Nguy\u00ean nh\u00e2n ch\u00ednh d\u1eabn t\u1edbi v\u1ea5n \u0111\u1ec1 n\u00e0y l\u00e0:<\/p>\n<ul>\n<li>C\u00e1ch t\u1ed5 ch\u1ee9c component ch\u01b0a hi\u1ec7u qu\u1ea3, code l\u1eb7p l\u1ea1i kh\u00e1 nhi\u1ec1u<\/li>\n<li>Team ch\u01b0a c\u00f3 kinh nghi\u1ec7m optimize (t\u1ed1i \u01b0u) \u0111\u1ec3 \u0111\u1ea1t hi\u1ec7u n\u0103ng cao h\u01a1n<\/li>\n<li>H\u1ea1 t\u1ea7ng ch\u01b0a t\u00edch h\u1ee3p c\u00e1c c\u00f4ng ngh\u1ec7 h\u1ed7 tr\u1ee3 nh\u01b0 CDN, cache, &#8230;<\/li>\n<li>V\u1eabn c\u00f2n ph\u1ee5 thu\u1ed9c v\u00e0o API c\u1ee7a platform<\/li>\n<\/ul>\n<p>Thay v\u00ec gi\u1ea3i quy\u1ebft tr\u1ef1c ti\u1ebfp ngay trong d\u1ef1 \u00e1n EGANY Apps, team quy\u1ebft \u0111\u1ecbnh kh\u1edfi t\u1ea1o m\u1ed9t d\u1ef1 \u00e1n m\u1edbi v\u1edbi t\u00ean g\u1ecdi l\u00e0 Cross-platform Apps (CPA).<\/p>\n<p>CPA kh\u1edfi \u0111\u1ea7u l\u00e0 m\u1ed9t d\u1ef1 \u00e1n th\u1eed nghi\u1ec7m nh\u1eb1m gi\u1ea3i quy\u1ebft c\u00e1c v\u1ea5n \u0111\u1ec1 c\u00f2n t\u1ed3n \u0111\u1ecdng c\u1ee7a EGANY Apps. Sau th\u1eddi gian d\u00e0i ph\u00e1t tri\u1ec3n th\u00ec n\u00f3 \u0111\u00e3 tr\u1edf th\u00e0nh m\u1ed9t s\u1ea3n ph\u1ea9m ch\u00ednh th\u1ee9c v\u00e0 \u0111ang trong giai \u0111o\u1ea1n ch\u1ea1y beta (ch\u1ea1y th\u1eed nghi\u1ec7m) cho c\u00e1c kh\u00e1ch h\u00e0ng s\u1eed d\u1ee5ng <a href=\"https:\/\/docs.egany.com\/cross-platform\/ega-shop\">egaShop<\/a> v\u00e0 <a href=\"https:\/\/docs.egany.com\/cross-platform\/ega-botconn\">egaBotConn<\/a>.<\/p>\n<p>H\u00e0nh tr\u00ecnh c\u1ee7a EGANY Apps t\u1ea1m d\u1eebng t\u1ea1i \u0111\u00e2y. \u1ede m\u00f9a ti\u1ebfp theo m\u00ecnh s\u1ebd k\u1ec3 cho c\u00e1c b\u1ea1n nghe v\u1ec1 qu\u00e1 tr\u00ecnh ph\u00e1t tri\u1ec3n Cross-platform Apps &#8211; \u0111\u1ee9a con sinh ra \u0111\u00e3 \u1edf v\u1ea1ch \u0111\u00edch c\u1ee7a EGANY. H\u1eb9n g\u1eb7p c\u00e1c b\u1ea1n \u1edf t\u1eadp <strong>Frontend Du K\u00fd<\/strong> sau.<\/p>\n<p>C\u00e1m \u01a1n c\u00e1c b\u1ea1n \u0111\u00e3 \u0111\u1ecdc b\u00e0i. Happy hacking!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>C\u0169ng l\u00e2u r\u1ed3i ch\u01b0a vi\u1ebft b\u00e0i, mong r\u1eb1ng c\u00e1c b\u1ea1n v\u1eabn \u0111ang \u0111\u00f3n ch\u1edd Frontend Du K\u00fd S1E4 | EGANY Apps. B\u00e0i vi\u1ebft l\u1ea7n n\u00e0y s\u1ebd k\u1ec3 v\u1ec1 qu\u00e1 tr\u00ecnh kh\u1eafc ph\u1ee5c h\u1ec7 th\u1ed1ng khi ph\u00eda \u0111\u1ed1i t\u00e1c c\u00f3 thay \u0111\u1ed5i l\u1edbn c\u0169ng nh\u01b0 c\u00e1c \u0111i\u1ec1u ch\u1ec9nh v\u1ec1 quy tr\u00ecnh git \u0111\u1ec3 m\u1ecdi th\u1ee9 \u0111\u01b0\u1ee3c su\u00f4n s\u1ebb trong qu\u00e1 tr\u00ecnh ph\u00e1t tri\u1ec3n. M\u1ed9t s\u1ed1 b\u1ea1n c\u00f3 ph\u1ea3n \u00e1nh v\u1ec1 vi\u1ec7c s\u1eed d\u1ee5ng v\u00ed d\u1ee5 trong n\u1ed9i b\u1ed9 khi\u1ebfn b\u00e0i vi\u1ebft h\u01a1i kh\u00f3 hi\u1ec3u cho ng\u01b0\u1eddi ngo\u00e0i. M\u00ecnh xin ghi nh\u1eadn \u00fd ki\u1ebfn n\u00e0y v\u00e0 s\u1ebd c\u1ed1 g\u1eafng l\u1ea5y v\u00ed d\u1ee5<\/p>\n","protected":false},"author":2,"featured_media":947,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27,1],"tags":[68,91,60,113,29,87,90,94,106,32,105,107],"_links":{"self":[{"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/posts\/942"}],"collection":[{"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/comments?post=942"}],"version-history":[{"count":0,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/posts\/942\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/media\/947"}],"wp:attachment":[{"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/media?parent=942"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/categories?post=942"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/egany.com\/blogs\/wp-json\/wp\/v2\/tags?post=942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}