javascript - Adakah terdapat cara untuk mengesan masa pelaksanaan kaedah segerak dalam js?
迷茫2017-06-15 09:23:26
0
5
903
Perkara khusus adalah ini. Adakah sesiapa yang boleh mengesan masa pelaksanaan kaedah penyegerakan jika masa pelaksanaan terlalu lama, saya akan mengambil inisiatif untuk mematikan kaedah ini?
Jika ia adalah kaedah yang disediakan oleh perpustakaan pihak ketiga, ia bergantung kepada sama ada ia sendiri menyediakan kaedah berhenti Jika tidak, tiada apa yang boleh anda lakukan;
Jika ia melibatkan fail i/o/padam/buat, anda mungkin tidak dapat menghentikannya, tetapi anda boleh menulis fungsi songsang untuk memulihkan keadaan asal selepas ia melaporkan ralat
Jika kaedah ini ditulis sendiri dan mempunyai berbilang subfungsi, maka anda boleh menentukan pemasa di dalam fungsi dan menyemak sama ada masa melebihi nilai yang dibenarkan sebelum melaksanakan setiap subfungsi Ini adalah penyelesaian
Jika kaedah ini ditulis oleh anda dan hanya mempunyai satu langkah, memandangkan ia adalah kaedah yang memakan masa, mungkin terdapat gelung, jadi tidak mengapa untuk menyemak masa setiap kali ia gelung. . .
Dari perspektif JS, apabila melaksanakan kaedah segerak, keseluruhan aplikasi akan disekat di dalamnya Pada masa ini, malah panggilan balik yang dicetuskan secara tak segerak oleh setTimeout hanya boleh dilaksanakan dalam Gelung Peristiwa selepas pelaksanaan kaedah segerak selesai. jadi ia tidak boleh dilaksanakan dalam kaedah segerak Semak masa pelaksanaannya sendiri dan Bunuh sendiri.
Dari perspektif sains komputer, soalan yang ditanya sebenarnya adalah masalah terhenti klasik:
Masalah terhenti (bahasa Inggeris: halting problem) ialah masalah dalam teori kebolehkiraan dalam logik dan matematik. Dari segi orang awam, masalah terhenti ialah masalah menentukan sama ada mana-mana program boleh menamatkan operasinya dalam masa yang terhad. Masalah ini bersamaan dengan masalah keputusan berikut: sama ada terdapat program P. Untuk sebarang program input w, ia boleh dinilai bahawa w akan berakhir dalam masa yang terhad atau gelung tanpa henti.
Masalah ini sukar NP, yang bermaksud tiada algoritma dengan kerumitan masa yang boleh diterima untuk menyelesaikannya secara langsung.
Tetapi melihat di luar algoritma akademik, terdapat banyak penyelesaian dalam kejuruteraan, seperti menggunakan Web Worker atau mekanisme pengurusan proses PM2, dsb., yang tidak akan dibincangkan di sini.
Kemudian anda hanya boleh melakukan multi-threading... http://www.w3school.com.cn/ht... Namun, cara membunuh js juga menjadi misteri... Akhirnya... anda boleh terus Bukankah lebih baik menggunakan asynchronous||||
Pekerja web boleh melaksanakan logik pengiraan anda dalam urutan lain, kaedah onmessage boleh menerima keputusan pelaksanaan, dan kaedah penamatan boleh menamatkan pelaksanaan pekerja web
var job001DoneIndictor=false;
var myWorker = new Worker('job001.js');
//接收worker传递过来的数据
myWorker.onmessage = function(event){
job001DoneIndictor=true;
};
setTimeout(function(){
if(!job001DoneIndictor){
myWorker.terminate();
myWorker =null;
}
},5000);//设置超时检测时间
Ini bergantung pada kaedah penyegerakan anda?
Jika ia adalah kaedah yang disediakan oleh perpustakaan pihak ketiga, ia bergantung kepada sama ada ia sendiri menyediakan kaedah berhenti Jika tidak, tiada apa yang boleh anda lakukan;
Jika ia melibatkan fail i/o/padam/buat, anda mungkin tidak dapat menghentikannya, tetapi anda boleh menulis fungsi songsang untuk memulihkan keadaan asal selepas ia melaporkan ralat
Jika kaedah ini ditulis sendiri dan mempunyai berbilang subfungsi, maka anda boleh menentukan pemasa di dalam fungsi dan menyemak sama ada masa melebihi nilai yang dibenarkan sebelum melaksanakan setiap subfungsi Ini adalah penyelesaian
Dari perspektif JS, apabila melaksanakan kaedah segerak, keseluruhan aplikasi akan disekat di dalamnya Pada masa ini, malah panggilan balik yang dicetuskan secara tak segerak oleh setTimeout hanya boleh dilaksanakan dalam Gelung Peristiwa selepas pelaksanaan kaedah segerak selesai. jadi ia tidak boleh dilaksanakan dalam kaedah segerak Semak masa pelaksanaannya sendiri dan Bunuh sendiri.
Dari perspektif sains komputer, soalan yang ditanya sebenarnya adalah masalah terhenti klasik:
Masalah ini sukar NP, yang bermaksud tiada algoritma dengan kerumitan masa yang boleh diterima untuk menyelesaikannya secara langsung.
Tetapi melihat di luar algoritma akademik, terdapat banyak penyelesaian dalam kejuruteraan, seperti menggunakan Web Worker atau mekanisme pengurusan proses PM2, dsb., yang tidak akan dibincangkan di sini.
Kemudian anda hanya boleh melakukan multi-threading...
http://www.w3school.com.cn/ht...
Namun, cara membunuh js juga menjadi misteri...
Akhirnya... anda boleh terus Bukankah lebih baik menggunakan asynchronous||||
Saya telah diingatkan bahawa ini bukanlah penyelesaian yang lain mungkin hanya ini:
Tidak semestinya sesuai untuk semua perniagaan, dan titik itu sendiri akan menjadikan proses lebih perlahan.
Pekerja web boleh melaksanakan logik pengiraan anda dalam urutan lain, kaedah onmessage boleh menerima keputusan pelaksanaan, dan kaedah penamatan boleh menamatkan pelaksanaan pekerja web