
外部JavaScript文件canvas_profile.js通过onmessage()函数启动。特意标注出的这段函数有两个目的:其一是作为线程情况下message的事件句柄,其二是作为无额外线程情况下可调用的全局函数。该函数会为每个独立分区创建用于计算的随机点:
宁波网站建设认为onmessage=function(evt){
varpi=:[Math.round(Math.randomQ*(evt.data.width-l)),Math.round(Math.random()*(evt.data.height-1))];for(vari=l;i
vargetHeight=function(p){
varpos=((parselnt(p[l])*evt.data.width)+parseInt(p[〇1));returnevt.data.alpha[pos]*equidistance;};为了找出指定位置在一维数组中的alpha通道值,我们将y值乘以画布宽度并加上x值。细心的读者可能已注意到另一个细节:在指定值被回递之前,它会先被乘以变fiequidistance。这是因为在一个8位的图像文件中我们只能保存种不同值。但奥地利因斯布魯克区域周边的海拔值差距大于m,因此此PNG图像中的海拔数据将以每20m为单位间隔。
若在档案中发现新的最小值,主调脚本将得到通知:
if(h
if(evt.data.useWorker){
^postMessage({task:'newMin',min:min,id:evt.data.id});发现新的最大值时当然也会出现同样情况。分区的每个循环结尾处都会更新进度条,在所有部分计算完毕同时,结果将被包裹成变量d并发送给主脚本。若脚本以多线程方式运行,数据将通过postMessageO发送,若以无额外线程方式运行,结果将通过return被回传给主调函数:
if(evt.data.useWorker){
^postMessage({task:'update',statusii,id:evt.data.id});if(evt.data.useWorker){postMessage(d);else{1return{data:d};
在客户端进行图像数据分析节省了服务器开销及网络带宽。在客户端硬件配置合适的情况下,用户还可以选择通过alpha通道将图像中的海拔档案数字化,并将结果以图形实时显示。
被激发起对WebWorker兴趣的同时,需要留意的是:比起使用不带多线程的脚本来说,使用多线程需要的系统资源更多。在线程及主调脚本之间通过message传输数据也远比用脚本直接访问资源要慢。
本文由乐华网络编辑,转载请注明出处
宁波网站建设www.leseo.net