ວິທີແກ້ໄຂ: setInterval ບໍ່ສາມາດເຮັດວຽກໄດ້ຕາມປົກກະຕິໃນພື້ນຫລັງຂອງ browser.

ເອກະສານອ້າງອີງ

Worker

ແມ່ນຫຍັງຄື“ ຜູ້ເຮັດວຽກເວັບ”

"Web Worker" ສະ ໜອງ ວິທີງ່າຍໆ ສຳ ລັບເນື້ອຫາຂອງເວັບທີ່ຈະສາມາດໃຊ້ງານສະຄິບໃນກະທູ້ພື້ນຫລັງ. ກະທູ້ສາມາດປະຕິບັດວຽກງານໂດຍບໍ່ມີການລົບກວນການໂຕ້ຕອບຂອງຜູ້ໃຊ້. ນອກຈາກນັ້ນ, ພວກເຂົາສາມາດປະຕິບັດ I / O ໂດຍໃຊ້ XMLHttpRequest. ເມື່ອສ້າງແລ້ວ, ພະນັກງານສາມາດສົ່ງຂໍ້ຄວາມໄປຫາລະຫັດ JavaScript ທີ່ສ້າງຂື້ນ, ໂດຍການສົ່ງຂໍ້ຄວາມໄປຍັງຜູ້ຈັດການເຫດການທີ່ລະບຸໄວ້ໂດຍລະຫັດ (ແລະໃນທາງກັບກັນ).

ຄຳ ແນະ ນຳ

ໃນລະຫັດຕົວຢ່າງຂ້າງລຸ່ມນີ້, ພວກເຮົາປະຕິບັດການຈັບເວລາທີ່ງ່າຍທີ່ສຸດແລະປ່ອຍໃຫ້ມັນກະຕຸ້ນທຸກໆ 100 ມິນລິລິດ.

            var timmer = new Worker(
    URL.createObjectURL(
        new Blob(
            [
                "onmessage=function(event){setInterval(function(){postMessage(1);},100)}",
            ],
            { type: "application/javascript" }
        )
    )
);
timmer.onmessage = function (event) {
    console.log("get message");
};
timmer.postMessage("start");
        

ການ ນຳ ໃຊ້ມາດຕະຖານ

ໃນຕົວຢ່າງຂ້າງເທິງນີ້, ພວກເຮົາໄດ້ສ້າງທີ່ຢູ່ໂດຍໃຊ້ createObjectURL ເນື່ອງຈາກວ່າລະຫັດທີ່ພວກເຮົາ ຈຳ ເປັນຕ້ອງປະຕິບັດແມ່ນຂ້ອນຂ້າງງ່າຍດາຍ, ວິທີນີ້ຈະມີຄວາມຄ່ອງແຄ້ວຫຼາຍ. ເມື່ອລະຫັດໃນ ໜ້າ ວຽກທີ່ພວກເຮົາ ຈຳ ເປັນຕ້ອງປະຕິບັດແມ່ນສັບສົນຫຼາຍ, ພວກເຮົາສາມາດຂຽນ ໜ້າ ວຽກແຍກຕ່າງຫາກເປັນເອກະລາດ js. ສຳ ລັບລາຍລະອຽດ, ກະລຸນາເບິ່ງລະຫັດຕໍ່ໄປນີ້. ມີ ຄຳ ແນະ ນຳ ທີ່ລະອຽດກວ່າ, ທ່ານສາມາດເບິ່ງເອກະສານອ້າງອີງທີ່ຢູ່ເທິງສຸດຂອງບົດຄວາມ.

            var timmer = new Worker('worker.js');