• javascript 多线程Web Worker不引用外部js文件的方法


    最近在Android开发中

    Webview通过调用JavascriptInterface的方式与App交互

    在交互的过程中,有些App上的操作时间会比较长,Web中调用的话会造成程序假死的情况

    于是想到了如下几种方式来实现

    1、js多线程(js正常情况下只支持单一线程,因此此方案被否决)

    2、采用异步方式(此方案程序仍旧会假死)

    3、采用Web Worker方式(此方案是HTML5中为支持多线程新出的一种方法)

         此方案最终也被否决,是因为线程中无法使用alert和window等对象,同样就不能调用app中的JavascriptInterface

         但由于方案不错,所以把实现方式贴出来,以备后飨。

      其中getScriptPath可以实现web worker不引用外部js的方法

    JS代码:

    function getScriptPath(foo) { return window.URL.createObjectURL(new Blob([foo.toString().match(/^s*functions*(s*)s*{(([sS](?!}$))*[sS])/)[1]], { type: 'text/javascript' })); }
    
        var worker = new Worker(getScriptPath(function () {
            self.addEventListener('message', function(e) {
            var value = 0;
            while(value <= e.data){
                self.postMessage(value);
                value++;
            }
        }, false);
    
        }));
        
        worker.addEventListener('message', function (e) {
            document.getElementById("result1").innerHTML = e.data;
        }, false);
        
        worker.postMessage(10000); 

    HTML:

    <div id="result1"></div>

    最终采用Android的AsyncTask的方式来实现,详细代码就不描述

    了解AsyncTask的方法就可以使用

  • 相关阅读:
    list切片
    class面向对象编程学习笔记
    斐波那契数
    module学习笔记
    Python基础
    产品经理培训行业---以起点学院为主体的相关竞品分析报告
    基础数据结构-二叉树-赫夫曼树的构建与编码
    大众点评APP分析随笔
    滴滴拼车功能分析
    梅沙教育APP简单分析-版本:iOS v1.2.21-Nathaneko-佳钦
  • 原文地址:https://www.cnblogs.com/Cavalry/p/4748072.html
Copyright © 2020-2023  润新知