[{"data":1,"prerenderedAt":136},["ShallowReactive",2],{"site":3,"blog-post-th-fivem-ui-lag":15,"blog-slug-site":48,"blog-scripts-th-fivem-ui-lag":54},{"site":4,"contact":10,"seo":13,"payment":14},{"name":5,"host":6,"default_locale":7,"locales":8},"X3D Developer","fivem.x3d-developer.com","th",[7,9],"en",{"discord_invite":11,"email":12,"line":12},"https:\u002F\u002Fdiscord.gg\u002FNA5kPVynFv","",{"google_site_verification":12,"bing_site_verification":12},{"bank_name":12,"account_name":12,"account_no":12,"promptpay_id":12},{"post":16,"html":21,"others":22,"productSlugs":44},{"slug":17,"title":18,"description":19,"date":20},"fivem-ui-lag","FiveM UI หน่วง NUI กิน FPS แจ้งเตือนกระตุก — สาเหตุจริงและวิธีแก้สำหรับเจ้าของเซิฟ","UI ใน FiveM หน่วง เปิดกระเป๋าแล้วเฟรมตก แจ้งเตือนขึ้นช้า HUD กระตุก สาเหตุจริงคือ NUI หลายตัวเปิดค้าง ส่ง message ทุกเฟรม ฟอนต์\u002FCSS โหลดจากเน็ต และ progress bar ที่ล็อกปุ่มไม่ครบ พร้อมวิธีวัดและสคริป UI ฟรีที่แก้แล้ว","2026-09-24","\u003Cp>ผู้เล่นบอกว่า &quot;เซิฟหน่วง&quot; แต่เซิฟ ping 20 ms และ CPU ว่าง 70% — เกือบทุกครั้งปัญหาคือ \u003Cstrong>UI ฝั่ง client\u003C\u002Fstrong> ไม่ใช่เซิฟ NUI ทุกตัวคือหน้าเว็บ Chromium ที่วิ่งซ้อนเกม ยิ่งมีหลายตัว ยิ่งมีตัวที่ทำงานตลอดเวลา เฟรมยิ่งหาย บทความนี้บอกวิธีหาตัวผิด และสิ่งที่ UI ที่ดีต้องทำ\u003C\u002Fp>\n\u003Ch2 id=\"วิธีวัดว่าตัวไหนกิน\">วิธีวัดว่าตัวไหนกิน\u003C\u002Fh2>\n\u003Col>\n\u003Cli>กด \u003Cstrong>F8\u003C\u002Fstrong> พิมพ์ \u003Ccode>resmon 1\u003C\u002Fcode> — ตาราง CPU\u002Fms ต่อ resource ฝั่ง client เรียงตาม ms ตัวที่เกิน 0.1 ms ตอนยืนนิ่งคือตัวน่าสงสัย\u003C\u002Fli>\n\u003Cli>\u003Ccode>resmon\u003C\u002Fcode> ดู \u003Cstrong>ตอนเปิด UI\u003C\u002Fstrong> เช่น กระเป๋า เมนู ถ้า resource กระโดดจาก 0.05 ไป 2–5 ms = UI ตัวนั้นส่ง message ถี่หรือวาดซับซ้อนเกิน\u003C\u002Fli>\n\u003Cli>\u003Ccode>stop &lt;resource&gt;\u003C\u002Fcode> ทีละตัวแล้วดูเฟรม เจอตัวผิดภายใน 5 นาที\u003C\u002Fli>\n\u003Cli>ดูจำนวน NUI ที่เปิดค้าง — HUD, แจ้งเตือน, progress bar, เมนู, กระเป๋า, โทรศัพท์ ถ้าทุกตัวเป็น Vue\u002FReact แอปเต็มตัวและ \u003Cstrong>แสดงตลอดเวลา\u003C\u002Fstrong> (\u003Ccode>SetNuiFocus\u003C\u002Fcode> ไม่เกี่ยว แค่ render ก็กิน) แค่ 6 ตัวก็หายไป 15–20 FPS บนเครื่องกลาง\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"6-สาเหตุที่พบบ่อย\">6 สาเหตุที่พบบ่อย\u003C\u002Fh2>\n\u003Ch3 id=\"1-ส่ง-sendnuimessage-ทุกเฟรม\">1. ส่ง SendNUIMessage ทุกเฟรม\u003C\u002Fh3>\n\u003Cp>HUD หลายตัวยิงเลือด\u002Fอาหาร\u002Fเงินไป NUI ใน \u003Ccode>while true do Wait(0)\u003C\u002Fcode> เท่ากับ serialize JSON + ข้าม process 60 ครั้ง\u002Fวินาที ต่อ HUD ตัวเดียว แก้: ส่งเฉพาะเมื่อค่าเปลี่ยน และ \u003Ccode>Wait(200–500)\u003C\u002Fcode> สำหรับค่าที่ไม่ต้องเรียลไทม์\u003C\u002Fp>\n\u003Ch3 id=\"2-ฟอนต์-css-js-โหลดจากอินเทอร์เน็ต\">2. ฟอนต์ \u002F CSS \u002F JS โหลดจากอินเทอร์เน็ต\u003C\u002Fh3>\n\u003Cp>UI ที่ \u003Ccode>@import\u003C\u002Fcode> Google Fonts หรือดึง CDN จะ \u003Cstrong>ค้างรอเน็ต\u003C\u002Fstrong> ตอนเปิดครั้งแรก และบนเครื่องที่บล็อกหรือเน็ตช้าจะขึ้นกล่องสี่เหลี่ยมแทนตัวอักษรไทย ทุก asset ต้องอยู่ในตัว resource \u003Ca href=\"\u002Fth\u002Fproducts\u002Fx3d-notify\u002F\">X3D Notify\u003C\u002Fa> และ \u003Ca href=\"\u002Fth\u002Fproducts\u002Fx3d-progressbar\u002F\">X3D Progress Bar\u003C\u002Fa> ฝัง Noto Sans Thai มาในตัว ไม่มี request ออก\u003C\u002Fp>\n\u003Ch3 id=\"3-nui-หลายตัวทับกัน\">3. NUI หลายตัวทับกัน\u003C\u002Fh3>\n\u003Cp>\u003Ccode>esx_notify\u003C\u002Fcode> เดิมกับตัวใหม่เปิดพร้อมกัน แจ้งเตือนขึ้นซ้อน 2 ที่ และกินสองเท่า เอาตัวเดิมออกให้หมด ถ้ามีสคริปต์เก่าเรียก \u003Ccode>exports['esx_notify']\u003C\u002Fcode> ใช้ตัวส่งต่อ 12 บรรทัดใน \u003Ccode>optional\u002F\u003C\u002Fcode> ของ X3D Notify แทนการรันสองตัว\u003C\u002Fp>\n\u003Ch3 id=\"4-progress-bar-ที่ไม่ล็อกปุ่ม\">4. Progress bar ที่ไม่ล็อกปุ่ม\u003C\u002Fh3>\n\u003Cp>ระหว่างซ่อมรถ ผู้เล่นเปิดกระเป๋า กดเมนู กดโทรศัพท์ได้ UI 3–4 ตัวเรนเดอร์พร้อมกัน ทั้งกินเฟรมทั้งเป็นช่องดูป ตัวแก้คือ progress bar ต้องประกาศสถานะให้ทุก UI รู้ \u003Ca href=\"\u002Fth\u002Fproducts\u002Fx3d-progressbar\u002F\">X3D Progress Bar\u003C\u002Fa> ตั้ง state bag \u003Ccode>LocalPlayer.state.minigame\u003C\u002Fcode> และยิง event \u003Ccode>x3d_progressbar:active\u003C\u002Fcode> UI อื่นเช็กบรรทัดเดียว:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-lua\">if LocalPlayer.state.minigame then return end\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"5-animation-blur-backdrop-filter-หนัก\">5. animation \u002F blur \u002F backdrop-filter หนัก\u003C\u002Fh3>\n\u003Cp>\u003Ccode>backdrop-filter: blur()\u003C\u002Fcode> เต็มจอ กับ box-shadow ซ้อนหลายชั้นบน element ที่ขยับทุกเฟรม ทำให้ Chromium ที่ซ้อนเกมอยู่ต้อง composite ใหม่ทั้งจอ ใช้ blur เฉพาะกล่องเล็ก ใช้ \u003Ccode>transform\u003C\u002Fcode>\u002F\u003Ccode>opacity\u003C\u002Fcode> แทน \u003Ccode>top\u002Fleft\u003C\u002Fcode> และเปิด \u003Ccode>will-change\u003C\u002Fcode> เฉพาะตอน animate\u003C\u002Fp>\n\u003Ch3 id=\"6-ui-ที่ยังไม่ปิดจริง\">6. UI ที่ยังไม่ปิดจริง\u003C\u002Fh3>\n\u003Cp>ซ่อนด้วย \u003Ccode>display:none\u003C\u002Fcode> ฝั่ง JS แต่ Lua ยังส่ง message และ Vue ยัง reactive อยู่ ต้องหยุด loop ฝั่ง Lua ด้วยเมื่อปิด UI\u003C\u002Fp>\n\u003Ch2 id=\"ui-ที่ดีสำหรับเซิฟไทยต้องมี\">UI ที่ดีสำหรับเซิฟไทยต้องมี\u003C\u002Fh2>\n\u003Cdiv class=\"table-scroll\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>ต้องมี\u003C\u002Fth>\n\u003Cth>ทำไม\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>ฟอนต์ไทยฝังในตัว\u003C\u002Ftd>\n\u003Ctd>ไม่ขึ้นกล่องสี่เหลี่ยม ไม่รอเน็ต\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ไม่มี request ออกนอกเครื่อง\u003C\u002Ftd>\n\u003Ctd>เปิดครั้งแรกไม่ค้าง\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ส่ง message เฉพาะเมื่อค่าเปลี่ยน\u003C\u002Ftd>\n\u003Ctd>ไม่กินเฟรมตอนยืนนิ่ง\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ประกาศสถานะ (state bag)\u003C\u002Ftd>\n\u003Ctd>UI อื่นหยุดทับกันเองได้\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ยกเลิกได้ (ESC)\u003C\u002Ftd>\n\u003Ctd>ผู้เล่นไม่ค้างในแถบ\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>ใช้ของเดิมทดแทนได้โดยไม่แก้สคริปต์\u003C\u002Ftd>\n\u003Ctd>เปลี่ยนแล้วไม่พังทั้งเซิฟ\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>สามตัวฟรีของ X3D ทำครบตามตาราง: \u003Ca href=\"\u002Fth\u002Fproducts\u002Fx3d-notify\u002F\">X3D Notify\u003C\u002Fa> แทน \u003Ccode>esx_notify\u003C\u002Fcode> · \u003Ca href=\"\u002Fth\u002Fproducts\u002Fx3d-progressbar\u002F\">X3D Progress Bar\u003C\u002Fa> แทน \u003Ccode>esx_progressbar\u003C\u002Fcode> · \u003Ca href=\"\u002Fth\u002Fproducts\u002Fx3d-loadingscreen\u002F\">X3D Loading Screen\u003C\u002Fa> แทน \u003Ccode>esx_loadingscreen\u003C\u002Fcode> วิธีสลับโดยไม่แก้สคริปต์เก่าอยู่ใน\u003Ca href=\"\u002Fth\u002Fblog\u002Fesx-ui-replacements\u002F\">บทความเทียบ UI มาตรฐาน ESX\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>ฝั่งผู้เล่นที่ FPS ตกทุกเซิฟ (ไม่ใช่เฉพาะเซิฟคุณ) ส่ง\u003Ca href=\"\u002Fth\u002Fblog\u002Ffivem-fps-boost\u002F\">FiveM FPS ตก ล็อค 60 แก้ยังไง\u003C\u002Fa>ให้ไล่ตั้งค่าเครื่อง\u003C\u002Fp>\n\u003Ch2 id=\"ถ้าอยากได้-ui-แบรนด์ตัวเอง\">ถ้าอยากได้ UI แบรนด์ตัวเอง\u003C\u002Fh2>\n\u003Cp>อยากเปลี่ยนแค่ UI กระเป๋า FiveM ใช้ของฟรีที่ทำตามหลักในบทความนี้ได้เลย: \u003Ca href=\"\u002Fth\u002Fblog\u002Ffivem-esx-inventory-vault-trunk\u002F\">UI กระเป๋า FiveM ฟรี พร้อมตู้เซฟและท้ายรถ\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>HUD\u002Fเมนู\u002Fกระเป๋าที่ออกแบบเฉพาะเซิฟ ทีม X3D รับ\u003Ca href=\"\u002Fth\u002Fservices\u002Fui-design\u002F\">ออกแบบและเขียน UI\u002FNUI\u003C\u002Fa> ด้วย Vue ตามหลักในบทความนี้: ฝังฟอนต์ ไม่มี request ออก ส่งเฉพาะที่เปลี่ยน วัด \u003Ccode>resmon\u003C\u002Fcode> ก่อนส่งมอบ\u003C\u002Fp>\n\u003Ch2 id=\"คำถามที่พบบ่อย\">คำถามที่พบบ่อย\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>เปลี่ยน HUD แล้วยังหน่วง\u003C\u002Fstrong> — วัด \u003Ccode>resmon\u003C\u002Fcode> ใหม่ ส่วนใหญ่ตัวกินไม่ใช่ HUD แต่เป็นสคริปต์ที่วน \u003Ccode>Wait(0)\u003C\u002Fcode> เช่น ระบบวาดป้าย 3D ทุกจุดในเมืองพร้อมกัน\u003C\u002Fp>\n\u003Cp>\u003Cstrong>ปรับกราฟิกช่วยไหม\u003C\u002Fstrong> — ช่วยเรื่องเกม ไม่ช่วยเรื่อง NUI ตัว NUI วิ่งบน CPU\u002FChromium แยกจากตัวเกม\u003C\u002Fp>\n\u003Cp>\u003Cstrong>ปิด NUI ทั้งหมดได้ไหม\u003C\u002Fstrong> — ได้เฉพาะตอน debug: \u003Ccode>stop\u003C\u002Fcode> ทีละตัว หรือใช้ \u003Ccode>nui_devtools\u003C\u002Fcode> ดู performance ของแต่ละหน้า\u003C\u002Fp>\n",[23,27,33,39],{"slug":24,"title":25,"description":26,"date":20},"esx-ui-replacements","แทน esx_notify, esx_progressbar, esx_loadingscreen ด้วยชุด UI ฟรีของ X3D — ไม่ต้องแก้สคริปต์เก่า","esx_notify มี 4 ตำแหน่ง ฟอนต์ไทยเป็นกล่อง esx_progressbar ยกเลิกไม่ได้ esx_loadingscreen ขึ้นจอขาว บทความนี้เทียบข้อจำกัดของ UI มาตรฐาน ESX กับ X3D Notify, X3D Progress Bar และ X3D Loading Screen (ฟรี GPL v3) พร้อมวิธีสลับโดยที่สคริปต์เดิมที่เรียก exports เก่าไม่ต้องแก้สักบรรทัด",{"slug":28,"title":29,"description":30,"date":31,"updated":32},"open-fivem-server-budget","เปิดเซิฟ FiveM กี่บาท ใช้อะไรบ้าง — งบและสคริปที่ต้องมี ตั้งแต่ 32 คนถึงเมือง 2,000 คน (2026)","รวมสคริปที่จำเป็นสำหรับเปิดเซิร์ฟเวอร์ FiveM 2026 พร้อมงบ 3 สเกล: เริ่มต้น 32–64 คน, เปิดสาธารณะ 128–500 คน, เมืองใหญ่ 1,000–2,048 คน (Element Club Platinum, เครื่อง dedicated, เสียงแยก, DB แยก, ทีมงาน) ตัวไหนใช้ของฟรีได้ ตัวไหนควรจ่าย ตัวไหนต้องเขียนใหม่เมื่อคนถึงสองพัน","2026-09-15","2026-10-14",{"slug":34,"title":35,"description":36,"date":37,"updated":38},"free-fivem-scripts","แจกสคริป FiveM ฟรี 27 ตัว ของแท้จากผู้พัฒนา: สกินอาวุธ ดาเมจปืน กระเป๋า ESX ตู้เซฟ ท้ายรถ แผงแอดมิน และอื่น ๆ","สคริป FiveM ฟรี 27 ตัวจาก X3D — สกินอาวุธแบบสะสม, ระบบดาเมจปืน, กระเป๋า ESX ช่องลัด 1–9, ตู้เซฟ, ท้ายรถ, แผงแอดมินแบนด้วย token, ธนาคาร+ATM, ลำโพงเปิดเพลง YouTube, หมอดูเซียมซี\u002Fไพ่ยิปซี, โทรศัพท์ ESX, หน้าจอตาย, ขายยา, งัดบ้าน, มินิเกม, ESX Legacy Core X3D Build, หน้าโหลด, Notify, Progress Bar, ไอเทมใช้ได้, สไลด์, ตกแต่งตัวละคร, เมนูหลัก, Daily Login, Mailbox, Carry, Environment","2026-09-18","2026-10-11",{"slug":40,"title":41,"description":42,"date":20,"updated":43},"fivem-stuck-loading-screen","FiveM ค้างหน้าโหลด เข้าเซิฟไม่ได้ แก้ยังไง — ฝั่งผู้เล่นและฝั่งเจ้าของเซิฟ (2026)","FiveM ค้างหน้าโหลด ค้างหน้า Rockstar ค้างหน้า Connecting ค้างหน้าโหลดที่มีเพลง จอดำ จอขาว เข้าเซิฟไม่ได้ รวมวิธีแก้ทีละขั้นสำหรับผู้เล่น (ล้างแคช ย้ายลง SSD ปิด ReShade ตรวจไฟล์เกม) และสาเหตุฝั่งเซิฟที่เจ้าของต้องแก้เอง (หน้าโหลดจอขาว resource ค้าง core ปล่อยลงเมืองก่อนโหลดเสร็จ)","2026-09-27",[45,46,47],"x3d-progressbar","x3d-notify","x3d-loadingscreen",{"site":49,"contact":51,"seo":52,"payment":53},{"name":5,"host":6,"default_locale":7,"locales":50},[7,9],{"discord_invite":11,"email":12,"line":12},{"google_site_verification":12,"bing_site_verification":12},{"bank_name":12,"account_name":12,"account_no":12,"promptpay_id":12},[55,88,114],{"id":56,"slug":45,"name":57,"summary":58,"price_thb":59,"license_mode":60,"cover_key":61,"cover_url":62,"category_slugs":63,"tags":65,"latest_version":83,"latest_released_at":84,"published_at":85,"has_docs":86,"config":60,"rent_price_satang":87},"8c823bc1-1de6-41b6-bf82-146d5a55eeb5","X3D Progress Bar (หลอดโหลด)","แถบความคืบหน้าธีมพีช ยกเลิกด้วย ESC นับเวลาถอยหลัง ล็อกปุ่มลัดให้อัตโนมัติ รองรับภาษาไทย",0,"none","public\u002Fproducts\u002Fx3d-progressbar\u002Fcover\u002Ff6830df60f656452.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-progressbar\u002Fcover\u002Ff6830df60f656452.jpg",[64],"hud",[66,67,68,69,70,71,72,64,73,74,75,76,77,78,79,80,81,82],"progressbar","progress bar","แถบโหลด","แถบความคืบหน้า","esx_progressbar","esx progressbar","ui","ยกเลิก esc","esx","ฟรี","free","หลอดโหลด","ฟอนต์ไทย","นับเวลาถอยหลัง","ล็อกปุ่มลัด","โปรเกรสบาร์","แทน esx_progressbar","1.1.3","2026-10-12T17:19:45.934106Z","2026-09-24T01:22:17.768991Z",false,null,{"id":89,"slug":46,"name":90,"summary":91,"price_thb":59,"license_mode":60,"cover_key":92,"cover_url":93,"category_slugs":94,"tags":95,"latest_version":109,"latest_released_at":110,"published_at":111,"has_docs":112,"config":113,"rent_price_satang":87},"9b62b8ed-5911-47a8-b695-3320a6183758","X3D Notify (แจ้งเตือน)","การ์ดแจ้งเตือน 9 ตำแหน่ง ใส่ไอคอนไอเทมกับกรอบระดับความหายากได้ รองรับภาษาไทยเต็มรูปแบบ","public\u002Fproducts\u002Fx3d-notify\u002Fcover\u002F4a9cbdcedd86a149.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-notify\u002Fcover\u002F4a9cbdcedd86a149.jpg",[64],[96,97,98,99,100,101,72,64,78,102,74,75,76,103,104,105,106,107,108],"notify","notification","แจ้งเตือน","แจ้งเตือน fivem","esx_notify","esx notify","ไอคอนไอเทม","การ์ดแจ้งเตือน","กรอบความหายาก","แจ้งเตือน 9 ตำแหน่ง","สีในข้อความ","แทน esx_notify","แจ้งเตือนไอเทม","1.1.4","2026-10-12T17:20:21.047259Z","2026-09-24T01:21:40.547491Z",true,"public",{"id":115,"slug":47,"name":116,"summary":117,"price_thb":59,"license_mode":60,"cover_key":118,"cover_url":119,"category_slugs":120,"tags":121,"latest_version":133,"latest_released_at":134,"published_at":135,"has_docs":112,"config":60,"rent_price_satang":87},"e6dc80f3-4f29-4d01-bffa-eba6829c6497","X3D Loading Screen (หน้าโหลด)","หน้าโหลดสไตล์เทอร์มินัล มีปุ่ม ENTER WORLD ให้ผู้เล่นกดเองก่อนลงเมือง ไฟล์ HTML เดียว ไม่ต้อง build","public\u002Fproducts\u002Fx3d-loadingscreen\u002Fcover\u002F32f1538b8e18f4db.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-loadingscreen\u002Fcover\u002F32f1538b8e18f4db.jpg",[64],[122,123,124,125,126,127,72,128,74,75,76,129,130,77,131,132],"loading screen","หน้าโหลด","หน้าโหลด fivem","loadingscreen","esx_loadingscreen","enter world","standalone","ปุ่มเข้าเมือง","หน้าโหลดเทอร์มินัล","พื้นหลังวิดีโอ","เพลงหน้าโหลด","1.0.5","2026-10-12T17:20:39.269405Z","2026-09-24T00:50:19.336351Z",1792316310937]