ພື້ນຖານການປະມວນຜົນຮູບພາບຂອງ Web Worker
Web Worker ແມ່ນບໍລິບົດການປະຕິບັດ JavaScript ແຍກຕ່າງຫາກທີ່ສາມາດປະຕິບັດການຄິດໄລ່ລາຄາແພງໂດຍບໍ່ຕ້ອງເຮັດໃຫ້ຫົວຂໍ້ຕົ້ນຕໍຂອງບັນນາທິການເຮັດວຽກທັງຫມົດ. ສໍາລັບການປະມວນຜົນຮູບພາບຂອງຕົວທ່ອງເວັບ, ນັ້ນຫມາຍຄວາມວ່າການຕິດຕັ້ງແບບຈໍາລອງແລະການ inference ສາມາດແລ່ນຫນີຈາກກະທູ້ທີ່ຮັບຜິດຊອບສໍາລັບປຸ່ມ, ຂໍ້ຄວາມຄວາມຄືບຫນ້າ, ການປ້ອນຂໍ້ມູນແປງ, ແລະການປັບປຸງຫນ້າຈໍ.
ຜົນໄດ້ຮັບບໍ່ແມ່ນ “ການປຸງແຕ່ງພື້ນຖານຟຣີ.” ອຸປະກອນດຽວກັນຍັງປະຕິບັດການຄິດໄລ່ແລະໃຊ້ຫນ່ວຍຄວາມຈໍາ. ຜົນປະໂຫຍດທາງສະຖາປັດຕະຍະກໍາແມ່ນການແຍກອອກ: ການປະຕິບັດແບບຈໍາລອງທີ່ຫນັກແຫນ້ນແມ່ນຫນ້ອຍທີ່ຈະຂັດຂວາງທຸກໆການໂຕ້ຕອບຂອງການໂຕ້ຕອບໃນຂະນະທີ່ມັນແລ່ນ.
ກະທູ້ຫຼັກມີວຽກໃນການໂຕ້ຕອບຜູ້ໃຊ້
ໜ້າບຣາວເຊີປົກກະຕິຈະແລ່ນ JavaScript ໃນຫົວຂໍ້ຫຼັກ. ກະທູ້ນັ້ນຍັງປະສານງານການຈັດວາງ, ການທາສີ, ແລະການປ້ອນຂໍ້ມູນ. ຖ້າການຄິດໄລ່ຍາວຫນຶ່ງຄອບຄອງມັນ, ການຄລິກອາດຈະຮູ້ສຶກຊັກຊ້າ, ການເຄື່ອນໄຫວສາມາດຢຸດໄດ້, ແລະຕົວທ່ອງເວັບອາດຈະເຕືອນວ່າຫນ້າເວັບບໍ່ຕອບສະຫນອງ.
ບັນນາທິການຮູບພາບມີໜ້າທີ່ຮັບຜິດຊອບຫຼັກຂອງກະທູ້ຫຼາຍຢ່າງ ກ່ອນທີ່ຈະເລີ່ມການສົມມຸດຖານ:
- ໄດ້ຮັບການຄັດເລືອກໄຟລ໌, ວາງ, ຫຼືຫຼຸດລົງ;
- ຖອດລະຫັດແລະສະແດງຮູບພາບ;
- ປັບປຸງຄວາມຄືບຫນ້າແລະສະຖານະຄວາມຜິດພາດ;
- ແຕ້ມ canvas ສະແດງຕົວຢ່າງ;
- ຈັດການເພີ່ມແລະລົບການເຄື່ອນໄຫວແປງ;
- ກະກຽມການດາວໂຫຼດຫຼື clipboard ປະຕິບັດ.
ການວາງການເຮັດວຽກຕົວເລກຂອງຕົວແບບການແບ່ງສ່ວນຢູ່ໃນຫົວຂໍ້ດຽວກັນຈະເຮັດໃຫ້ວຽກງານເຫຼົ່ານັ້ນແຂ່ງຂັນໂດຍກົງ. ພະນັກງານສ້າງຂອບເຂດທີ່ຊັດເຈນກວ່າ.
ຂອບເຂດທີ່ອີງໃສ່ຂໍ້ຄວາມ
ບັນນາທິການແລະພະນັກງານບໍ່ໄດ້ແບ່ງປັນຕົວແປທໍາມະດາ. ພວກເຂົາເຈົ້າຕິດຕໍ່ສື່ສານໂດຍການສົ່ງຂໍ້ຄວາມ. ການໄຫຼເຂົ້າທີ່ງ່າຍດາຍເບິ່ງຄືວ່ານີ້:
- ບັນນາທິການສ້າງຫຼືໃຊ້ຄືນພະນັກງານ.
- ມັນຂໍໃຫ້ຜູ້ອອກແຮງງານຕັ້ງຕົ້ນເວລາແລ່ນ inference ແລະຕົວແບບ.
- ມັນກະກຽມຂໍ້ມູນຮູບພາບແລະສົ່ງຄໍາຮ້ອງຂໍ inference.
- ພະນັກງານແປງຂໍ້ມູນເຂົ້າໄປໃນວັດສະດຸປ້ອນທີ່ຄາດໄວ້ຂອງຕົວແບບ.
- ພະນັກງານດໍາເນີນການແບບຈໍາລອງແລະຜະລິດມູນຄ່າຫນ້າກາກ.
- ມັນສົ່ງຫນ້າກາກຫຼືຂໍ້ມູນຜົນໄດ້ຮັບກັບຄືນໄປບ່ອນ.
- ບັນນາທິການປະກອບການສະແດງຕົວຢ່າງ ແລະເປີດໃຊ້ການປັບປ່ຽນ ຫຼືສົ່ງອອກ.
ຂໍ້ຄວາມຄວນມີບໍລິບົດພຽງພໍເພື່ອໃຫ້ກົງກັບຄໍາຕອບກັບຄໍາຮ້ອງຂໍທີ່ຖືກຕ້ອງ. ນີ້ເປັນເລື່ອງສໍາຄັນຖ້າຜູ້ໃຊ້ເລືອກຮູບພາບອື່ນກ່ອນທີ່ວຽກກ່ອນຫນ້າຈະສໍາເລັດ. ການໂຕ້ຕອບຕ້ອງຫຼີກເວັ້ນການສະແດງຜົນໄດ້ຮັບເກົ່າຜ່ານແຫຼ່ງໃຫມ່.
ການຄັດລອກແລະໂອນຂໍ້ມູນຮູບພາບ
ການສົ່ງຂໍ້ຄວາມຂະຫນາດນ້ອຍແມ່ນລາຄາຖືກ. ການສົ່ງຄ່າຫຼາຍລ້ານ pixels ສາມາດມີລາຄາແພງຖ້າຕົວທ່ອງເວັບຕ້ອງຄັດລອກ buffer ທັງຫມົດ. Web APIs ສາມາດໂອນກຳມະສິດຂອງ binary buffers ບາງອັນແທນ. ບັຟເຟີທີ່ໂອນແລ້ວຈະສາມາດໃຊ້ໄດ້ກັບຜູ້ຮັບໂດຍບໍ່ໄດ້ເກັບຮັກສາຂໍ້ມູນຊໍ້າກັນທີ່ໃຊ້ໄດ້ຢູ່ຂ້າງຜູ້ສົ່ງ.
ການເພີ່ມປະສິດທິພາບນັ້ນມາພ້ອມກັບຂໍ້ຈໍາກັດໃນການອອກແບບ: ຫຼັງຈາກການໂອນຍ້າຍ, ຜູ້ສົ່ງບໍ່ສາມາດສືບຕໍ່ໃຊ້ buffer ດຽວກັນກັບວ່າມັນຍັງຄົງເປັນເຈົ້າຂອງຂໍ້ມູນ. ບັນນາທິການອາດຈະເກັບຮັກສາການສະແດງຜົນແຍກຕ່າງຫາກ, ສ້າງ buffer inference ສະເພາະ, ຫຼືສ້າງໃຫມ່ສິ່ງທີ່ມັນຕ້ອງການໃນພາຍຫຼັງ.
ບໍ່ແມ່ນທຸກໆການປະຕິບັດໃຊ້ການໂອນຍ້າຍໃນສະຖານທີ່ດຽວກັນ. ບົດຮຽນທົ່ວໄປແມ່ນວ່າການແຍກກະທູ້ບໍ່ໄດ້ເຮັດໃຫ້ການເຄື່ອນໄຫວຂໍ້ມູນຫາຍໄປ. ຂະໜາດຂອງຮູບ, ຂະໜາດບັຟເຟີ, ແລະຈຳນວນການແປງຍັງຄົງມີຜົນຕໍ່ກັບການຕອບສະໜອງ ແລະໜ່ວຍຄວາມຈຳ.
ສິ່ງທີ່ Easy Background Remover ເອົາໃສ່ໃນພະນັກງານ
Easy Background Remover ໃຊ້ Web Worker ທີ່ມີເວລາແລ່ນ inference ຂອງຕົວທ່ອງເວັບສໍາລັບການແບ່ງສ່ວນໃນອຸປະກອນ. ຂັ້ນຕອນການຕັດອັດຕະໂນມັດຢ່າງຮຸນແຮງຜະລິດຫນ້າກາກ. ຫຼັງຈາກນັ້ນ, ບັນນາທິການຈະສະແດງຜົນໄດ້ຮັບທີ່ປະກອບແລະສະຫນັບສະຫນູນການປັບປ່ຽນແປງຂອງ CPU-canvas.
ການແບ່ງແຍກນີ້ເຮັດໃຫ້ຄວາມລົ້ມເຫລວເປັນຂອບເຂດທີ່ເປັນປະໂຫຍດກວ່າ. ຖ້າຜູ້ອອກແຮງງານບໍ່ສາມາດເລີ່ມຕົ້ນຫຼືຂັດໃນລະຫວ່າງການ inference, ການໂຕ້ຕອບສາມາດລາຍງານຄວາມຜິດພາດທີ່ກ່ຽວຂ້ອງກັບພະນັກງານແທນທີ່ຈະອີງໃສ່ແຖບທີ່ແຊ່ແຂງຖາວອນເປັນສັນຍານດຽວເທົ່ານັ້ນ.
ມັນຍັງເຮັດໃຫ້ການຮ້ອງຂໍການປະມວນຜົນໃນທ້ອງຖິ່ນເຂົ້າໃຈໄດ້. ການສົ່ງ pixels ຈາກຫນ້າສ່ວນຂະຫຍາຍໄປຫາພະນັກງານຂອງຕົນເອງແມ່ນການສື່ສານພາຍໃນສະພາບແວດລ້ອມຂອງຕົວທ່ອງເວັບ, ບໍ່ແມ່ນການອັບໂຫລດໄປຍັງ API cutout ໄລຍະໄກ. ເຊດຊັນທຳອິດອາດຈະດາວໂຫຼດຊັບສິນແບບຈໍາລອງທີ່ໃຊ້ຄືນໄດ້ແຍກຕ່າງຫາກ; ເບິ່ງ ເປັນຫຍັງທຳອິດຈຶ່ງດາວໂຫລດຕົວແບບ.
ຄົນງານບໍ່ເຮັດການຄຳນວນທັນທີ
ພະນັກງານປັບປຸງການຕອບສະຫນອງ, ບໍ່ແມ່ນຄວາມສາມາດຂອງອຸປະກອນດິບ. ຮູບແບບດັ່ງກ່າວຍັງບໍລິໂພກ CPU, GPU ຫຼືຊັບພະຍາກອນ runtime ອື່ນໆຕາມສິ່ງທີ່ຕົວທ່ອງເວັບສາມາດສະຫນອງໄດ້. ການປ້ອນຂໍ້ມູນຂະໜາດໃຫຍ່ຍັງສາມາດໃຊ້ເວລາດົນກວ່າ ແລະຕ້ອງການຄວາມຈຳຫຼາຍກວ່າອັນນ້ອຍໆ.
ຂໍ້ຈຳກັດຫຼາຍອັນຍັງຄົງຢູ່:
- ການເລີ່ມຕົ້ນແບບຈໍາລອງມີຄ່າໃຊ້ຈ່າຍທີ່ແທ້ຈິງ;
- pixel buffers ຄອບຄອງຄວາມຊົງຈໍາທັງສອງດ້ານຖ້າຄັດລອກ;
- ປັບຂະໜາດແລະປ່ຽນຮູບແບບໃຊ້ເວລາ;
- ອຸປະກອນຄວາມຈໍາຕ່ໍາອາດຈະຕໍ່ສູ້ກັບຮູບພາບຂະຫນາດໃຫຍ່;
- ຄົນງານຫຼາຍຂຶ້ນສາມາດເພີ່ມທະວີການຂັດແຍ້ງແທນທີ່ຈະຫຼຸດຜ່ອນມັນ;
- ການສົ່ງອອກ ແລະການປັບປຸງຜ້າໃບຍັງສາມາດກ່ຽວຂ້ອງກັບກະທູ້ຫຼັກໄດ້.
ການເລີ່ມຕົ້ນຫ້າພະນັກງານ inference ສໍາລັບຫ້າຮູບພາບແມ່ນບໍ່ອັດຕະໂນມັດຫ້າເທົ່າໄວ. ຄົນງານໄດ້ໃຊ້ເຄື່ອງດຽວກັນ. ວຽກຂະຫນານສາມາດແຂ່ງຂັນສໍາລັບແບນວິດຂອງຫນ່ວຍຄວາມຈໍາແລະຊັບພະຍາກອນການປະຕິບັດ, ໃນຂະນະທີ່ແຕ່ລະຕົວແບບອາດມີຄ່າໃຊ້ຈ່າຍໃນຫນ່ວຍຄວາມຈໍາຂອງຕົນເອງ.
ການລາຍງານຄວາມຄືບໜ້າແມ່ນຮ່ວມມື
ພະນັກງານສາມາດສົ່ງຂໍ້ຄວາມສະຖານະໄດ້, ແຕ່ມັນບໍ່ຮູ້ອັດຕະໂນມັດວ່າອັດຕາສ່ວນຄວາມຄືບຫນ້າຈະມີຄວາມຮູ້ສຶກຖືກຕ້ອງ. ການດາວໂຫຼດແບບຈໍາລອງ, ການເລີ່ມຕົ້ນເວລາແລ່ນ, ການກະກຽມການປ້ອນຂໍ້ມູນ, ການອ້າງອີງ, ການແປງໜ້າກາກ, ແລະການສະແດງຕົວຢ່າງແມ່ນໄລຍະແຍກຕ່າງຫາກທີ່ມີເວລາທີ່ແຕກຕ່າງກັນ.
ບາງໄລຍະມີການນັບໄບຕ໌ທີ່ສາມາດວັດແທກໄດ້. ການປະຕິບັດແບບຈໍາລອງດຽວອາດຈະເປີດເຜີຍພຽງແຕ່ “ເລີ່ມຕົ້ນ” ແລະ “ສໍາເລັດ.” ອັດຕາສ່ວນທີ່ລຽບງ່າຍທີ່ກ້າວຫນ້າເທົ່າທຽມກັນສາມາດເປັນເຄື່ອງສໍາອາງແທນທີ່ຈະເປັນການວັດແທກທີ່ຊັດເຈນ.
ຄວາມຄືບຫນ້າທີ່ເປັນປະໂຫຍດ UI ຕັ້ງຊື່ໄລຍະທີ່ເປັນໄປໄດ້: ການກະກຽມຮູບແບບ, ຮູບພາບການປຸງແຕ່ງ, ຫຼືຜົນໄດ້ຮັບການກໍ່ສ້າງ. ມັນຍັງຈັດການກັບຄວາມລົ້ມເຫລວແລະການຍົກເລີກແທນທີ່ຈະປ່ອຍໃຫ້ spinner ທີ່ບໍ່ມີຄໍາອະທິບາຍ.
ການຍົກເລີກແມ່ນຫຼາຍກວ່າການເຊື່ອງ spinner
ຖ້າຜູ້ໃຊ້ປິດຮູບພາບຫຼືເລີ່ມຕົ້ນໃຫມ່, ການໂຕ້ຕອບສາມາດລະເວັ້ນການຕອບສະຫນອງໃນທີ່ສຸດຈາກການຮ້ອງຂໍທີ່ລ້າສະໄຫມ. ການຢຸດເຊົາການຄິດໄລ່ພື້ນຖານໃນທັນທີອາດຈະຕ້ອງການການສະຫນັບສະຫນູນເພີ່ມເຕີມຈາກ runtime ຫຼືການຢຸດເຊົາແລະການສ້າງພະນັກງານໃຫມ່.
ການຢຸດເຊົາພະນັກງານແມ່ນການຕັດສິນໃຈ, ແຕ່ມັນຍົກເລີກສະຖານະເບື້ອງຕົ້ນຂອງມັນ. ວຽກຕໍ່ໄປອາດຈະຈໍາເປັນຕ້ອງໄດ້ໂຫລດແລະເລີ່ມຕົ້ນຮູບແບບອີກເທື່ອຫນຶ່ງ. ສໍາລັບການດໍາເນີນງານສັ້ນ, ການເຮັດເຄື່ອງຫມາຍ stale ຜົນໄດ້ຮັບສາມາດລາຄາຖືກກວ່າການທໍາລາຍທຸກສິ່ງທຸກຢ່າງ.
ທາງເລືອກທີ່ຖືກຕ້ອງແມ່ນຂຶ້ນກັບຄວາມກົດດັນຂອງຫນ່ວຍຄວາມຈໍາ, ໄລຍະເວລາການດໍາເນີນງານ, ແລະຄວາມສາມາດໃນການແລ່ນ. ຈາກທັດສະນະຂອງຜູ້ໃຊ້, ກົດລະບຽບທີ່ສໍາຄັນແມ່ນວ່າການເຮັດວຽກ stale ຈະຕ້ອງບໍ່ຂຽນທັບການແກ້ໄຂໃນປະຈຸບັນ.
ຄວາມຜິດພາດຕ້ອງຂ້າມແດນຄືກັນ
ຂໍ້ຍົກເວັ້ນພາຍໃນຄົນງານບໍ່ກາຍມາເປັນຂໍ້ຍົກເວັ້ນຂອງກະທູ້ຫຼັກປົກກະຕິ. ພະນັກງານຕ້ອງລາຍງານຄວາມຜິດພາດທີ່ສາມາດໃຊ້ໄດ້, ແລະບັນນາທິການຄວນຟັງຄວາມລົ້ມເຫລວໃນລະດັບພະນັກງານ.
ການຈັດການຄວາມຜິດພາດທີ່ດີຈໍາແນກຢ່າງຫນ້ອຍ:
- ຊັບສິນຕົວແບບບໍ່ສາມາດໃຊ້ໄດ້;
- ການເລີ່ມຕົ້ນແບບຈໍາລອງລົ້ມເຫລວ;
- ການຖອດລະຫັດຮູບພາບ ຫຼືການກະກຽມການປ້ອນຂໍ້ມູນລົ້ມເຫລວ;
- inference ລົ້ມເຫລວ;
- ຄົນງານຢຸດເຮັດວຽກໂດຍບໍ່ຄາດຄິດ;
- ຜົນໄດ້ຮັບບໍ່ແມ່ນຂອງຄໍາຮ້ອງຂໍໃນປະຈຸບັນ.
ນີ້ແມ່ນການປະຕິບັດຫຼາຍກ່ວາ “ມີບາງຢ່າງຜິດພາດ”, ໂດຍສະເພາະໃນເວລາທີ່ການຕິດຕັ້ງຄັ້ງທໍາອິດແລະການປຸງແຕ່ງຮູບພາບປົກກະຕິມີວິທີແກ້ໄຂທີ່ແຕກຕ່າງກັນ.
ຜົນຜະລິດຂອງຜູ້ອອກແຮງງານຍັງເປັນພຽງແຕ່ຫນ້າກາກທໍາອິດ
ສະຖາປັດຕະຍະກໍາກະທູ້ບໍ່ໄດ້ປັບປຸງຂອບທີ່ບໍ່ຊັດເຈນດ້ວຍຕົວມັນເອງ. ພະນັກງານສາມາດກັບຄືນຫນ້າກາກທີ່ຖືກຕ້ອງທາງວິຊາການທີ່ຍັງຂາດຂົນ, ວັດສະດຸໂປ່ງໃສ, ສາຍແຄບ, ຫຼືເງົາທີ່ຕ້ອງການ. ເຫຼົ່ານີ້ແມ່ນການແບ່ງສ່ວນແລະຄໍາຖາມທີ່ຕັ້ງໃຈ.
ການເຮັດວຽກຂອງບັນນາທິການຈະກັບຄືນມາຫຼັງຈາກ inference: ຂະຫນາດຫນ້າກາກເຂົ້າໄປໃນລະບົບປະສານງານການເຮັດວຽກ, ປະກອບການເບິ່ງຕົວຢ່າງ, ໃຫ້ຜູ້ໃຊ້ປັບປຸງມັນ, ແລະສົ່ງອອກສະຖານະປະຈຸບັນ. ຄວາມລະອຽດໜ້າກາກທຽບກັບຂະໜາດຕົວຢ່າງ ອະທິບາຍວ່າເປັນຫຍັງລະບົບປະສານງານເຫຼົ່ານັ້ນບໍ່ຄວນສັບສົນ.
ຮູບແບບຈິດໃຈທີ່ຫຍໍ້
ຄິດວ່າຜູ້ອອກແຮງງານເປັນຜູ້ຊ່ຽວຊານໃນທ້ອງຖິ່ນທີ່ຢູ່ເບື້ອງຫຼັງປ່ອງຢ້ຽມຂໍ້ຄວາມ:
- ບັນນາທິການເປັນເຈົ້າຂອງການໂຕ້ຕອບ;
- ພະນັກງານເປັນເຈົ້າຂອງວຽກທີ່ໜັກໜ່ວງ;
- ຂໍ້ມູນຮູບພາບຖານສອງຂ້າມຂອບເຂດກໍານົດ;
- ພະນັກງານສົ່ງຄືນຫນ້າກາກ, ບໍ່ແມ່ນການຕັດສິນສໍາເລັດຮູບກ່ຽວກັບທຸກຂອບ;
- ບັນນາທິການຍັງມີຄວາມຮັບຜິດຊອບສໍາລັບລັດປະຈຸບັນ, ການທົບທວນຄືນ, ການປັບປຸງ, ແລະການສົ່ງອອກ.
ສໍາລັບທັດສະນະຂອງຕົວແບບຂອງ pixels ຕົວມັນເອງ, ສືບຕໍ່ກັບ ສິ່ງທີ່ຕົວແບບ cutout ໃນອຸປະກອນເຫັນ. ສຳລັບພາບລວມພາກປະຕິບັດແບບຕົ້ນຫາປາຍ, ເບິ່ງ ການລຶບພື້ນຫຼັງຂອງທ້ອງຖິ່ນເຮັດວຽກແນວໃດ.