Saya sedang menulis permainan penyemak imbas menggunakan HTML, CSS dan JavaScript, yang ditulis dalam Perl. Kesihatan dan stamina disimpan pada pelayan dan saya menggunakan JavaScript untuk menunjukkan kepada pengguna kiraan terkini statistik ini secara langsung apabila halaman semasa dimuatkan. Ciri ini berfungsi dengan baik, tetapi jika pengguna menukar tab atau beralih ke apl lain dan membiarkan penyemak imbas berjalan di latar belakang, nilai kiraan yang anda lihat apabila anda kembali tidak mengikuti dengan betul. Oleh itu, apabila anda beralih kembali ke penyemak imbas, kaunter anda mungkin menunjukkan stamina 50/100, padahal stamina anda adalah 100/100. Jadi apabila anda melakukan sesuatu dalam permainan (memuatkan halaman baharu), pelayan mengemas kini kaunter kepada nilai sebenar, kerana JavaScript hanya menetapkan masa untuk menunjukkan kepada pengguna paparan tatal "langsung" dalam penyemak imbas.
Adakah terdapat cara untuk memastikan pembilang JavaScript masih berfungsi walaupun halaman/tab tidak aktif atau tidak di latar depan? Kurang menulis semula permainan saya sepenuhnya untuk memaparkan aliran berterusan kandungan tolak pelayan langsung kepada pengguna dalam penyemak imbas?
Andaikan anda sedang bermain permainan. Anda akan melihat kesihatan dan stamina anda kembali. Anda beralih ke program lain selama seminit, kemudian kembali ke permainan dalam penyemak imbas. Anda akan perasan bahawa kesihatan dan stamina anda tidak dikemas kini semasa anda tiada. Tetapi apabila anda melakukan tindakan dalam permainan, nilai akan dikemas kini kepada yang sepatutnya kerana ia dijejaki secara dalaman pada pelayan. Inilah masalah yang saya ingin selesaikan. Harapan itu menjelaskannya!
Saya tidak mencuba apa-apa untuk menyelesaikan masalah ini selain daripada mencari dalam talian dan akhirnya tidak menemui satu pun jawapan yang benar-benar "baik" di laman web ini, jadi saya memutuskan untuk bertanya.
Tekanan pelayan berterusan juga tidak berfungsi. Apa-apa sahaja dalam gelung acara utama, seperti pemasa atau peristiwa yang berlaku apabila fokus hilang, akan diperlahankan oleh penyemak imbas untuk menjimatkan sumber. Sesetengah penyemak imbas mudah alih menghentikannya sepenuhnya.
Jawapan kepada masalah ini ialah menukar cara apl menjejaki statistik ini.
Kini sesetengah orang akan berkata untuk menggunakan WebWorkers untuk menjalankan pemasa dalam urutan yang berasingan, tetapi ini tidak menyelesaikan semua masalah. Anda masih akan menghadapi masalah dengan versi yang berbeza, seperti jika seseorang menyambung semula halaman anda daripada tidur atau sesuatu seperti itu. Tiada tugas latar belakang bertahan.
Anda menyebut bahawa anda juga menjejaki statistik ini pada pelayan. Ini mudah, jadi perkara paling jelas yang perlu anda lakukan ialah menggunakan Acara Fokus Tetingkap untuk mengesan apabila label mendapat semula fokus. Anda kemudiannya akan memanggil pelayan untuk mendapatkan statistik terkini dan menetapkan semula pemasa berdasarkan data baharu tersebut. Untuk mengelakkan daripada menunjukkan data basi semasa permintaan sedang dijalankan, anda boleh memilih untuk menunjukkan pemutar pemuatan atau sesuatu yang lain pada masa ini.
Satu lagi cara biasa untuk membetulkan perkara ini ialah dengan mengekalkan pembolehubah setiap kali kenaikan pemasa, yang mewakili cap masa apabila data kali terakhir dikembalikan. Anda boleh menggunakan acara
blur
事件检测到,并将该最后时间戳存储在某个地方。然后当它们重新获得焦点时,您可以处理focus
apabila anda kehilangan fokus dan mengira perbezaan antara masa semasa dan masa terakhir yang direkodkan sebelum meninggalkan fokus (hilang fokus). Anda boleh mengira semula dari tempoh ini nilai yang sepatutnya.Tetapi jika pelayan anda mempunyai maklumat ini, ia akan menjadi kurang terdedah kepada ralat dan lebih mudah untuk hanya bertanya kepada pelayan apabila tumpuan telah diperoleh semula.