[ damsodo @ 04.01.2021. 22:24 ] @
Pozdrav svima,

pravim neku sitnu html stranicu i treba mi da koristim background worker u javascriptu. objasnjenje: https://www.w3schools.com/html/html5_webworkers.asp
(to je pozadinski thread koji ne blokira interaktivnost stranice vec se izvrsava u backgroundu)


Upoznat sam sa konceptom i radio sam ranije te stvari u C#, ali ovde jednostavno nece da pokrene worker??


Koji god primer sa interneta da pokusam, glavna skripta radi, ali ne pokrece worker?
Pitao sam se da nije mozda do putanje worker scripte ali ona se nalazi u istom direktorijumu pa ne bi trebalo biti problema.
jednostavno padne kada hoce da instancira worker. w = new Worker("demo_workers.js");.Tj ne javi nikakvu gresku vec samo ne nastavi sa izvrsavanjem skripta

da li neko vidi gresku?
nopr glavna html stranica izgleda ovako (primer sa sajta https://www.w3schools.com/html/html5_webworkers.asp)
Code:
<!DOCTYPE html>
<html>
<body>

<p>Count numbers: <output id="result"></output></p>
<button onclick="startWorker()">Start Worker</button>
<button onclick="stopWorker()">Stop Worker</button>

<script>
var w;

function startWorker() {
  if (typeof(Worker) !== "undefined") {
    if (typeof(w) == "undefined") {
     w = new Worker("demo_workers.js");
    }
    w.onmessage = function(event) {
      document.getElementById("result").innerHTML = event.data;
    };
  } else {
    document.getElementById("result").innerHTML = "Sorry! No Web Worker support.";
  }
}

function stopWorker() {
  w.terminate();
  w = undefined;
}
</script>

</body>
</html>





a skripta od workera demo_workers.js :

Code:
var i = 0;

function timedCount() {
  i = i + 1;
  postMessage(i);
  setTimeout("timedCount()",500);
}

timedCount();




p.s. bio sam nekada clan pod drugim imenom dam
so ali sam pogubio sifre od starog provajdera koji je u medjuvremenu preuzet pa mi je procedura da vratim nalog

[Ovu poruku je menjao damsodo dana 04.01.2021. u 23:38 GMT+1]

[Ovu poruku je menjao damsodo dana 04.01.2021. u 23:39 GMT+1]
[ Deunan @ 05.01.2021. 12:10 ] @
Citat:

Pitao sam se da nije mozda do putanje worker scripte ali ona se nalazi u istom direktorijumu pa ne bi trebalo biti problema.

U kojem ti je direktorijumu? Prema ovoj putanji, worker treba da bude u root folderu, gde se nalazi index.html fajl.
Jos bolje, stavi da ti putanja bude:
Code:

w = new Worker("/demo_workers.js");   // Uvek trazi u root folderu

Ne vidim da ima neku drugu gresku.
[ damsodo @ 05.01.2021. 17:09 ] @
Pokusao sam , ali ne radi.
Stavio sam konstruktor u try..catch i uhvatio exception
Failed to construct 'Worker': Script at 'file:///D:/demo_workers.js' cannot be accessed from origin 'null'.
Objasnjenje ovog errora je da ne mzoe da se pokrene worker ciji path le na lokalu, vec treba da ima http:// url. Odnosi se na Chrome, mada meni i u Edge daje istu gresku.Jer ne koristim xampp niti server, vec sve na lokalu pravim,kao prezentaciju.
https://stackoverflow.com/ques...10/chrome-cant-load-web-worker

tu se nude neka resenja kao da simuliram moj lokalni path da ga posmatra kao http,ali mi je sve to preobimno sada za sitni posao za koji mi worker treba: da na triger pali i gasi tj ds simulira start i stop nekih stanja u state transition diagramu.
[ mjanjic @ 05.01.2021. 17:56 ] @
Pa moraš preko nekog servera, možeš onu ekstenziju za Visual Studio Code, XAMPP/WAMPP ili šta ti već odgovara. JS nema direktan pristup lokalnom disku iz bezbednosnih razloga i to odavno tako funkcioniše.
[ dusans @ 05.01.2021. 19:07 ] @
Prilično je jednostavno da uključiš IIS
https://teckangaroo.com/enable-iis-windows-10/

Onda ubaciš fajlove u neki pod folder c:\inetpub\wwwroot\nesto
I dalje tome pristupaš kao http://localhost/nesto
[ damsodo @ 06.01.2021. 00:14 ] @
evo jednog resenja https://www.javascripture.com/URL#createObjectURL
ovako radi,sad samo da uguram sopstveni kod pa javim

Code:
<!-- Creates a Worker using a local script instead of a remote url -->
<script id='code1' type='text/plain'>
  postMessage('foo');
  var i = 0;

function timedCount() {
  i = i + 1;
  postMessage(i);
  setTimeout("timedCount()",1000);
}

timedCount();
</script>
<script>
  
</script>

<!DOCTYPE html>
<html>
<body>

<p>Count numbers: <output id="result"></output></p>
<button onclick="startWorker()">Start Worker</button>
<button onclick="stopWorker()">Stop Worker</button>

<script>  
var w;

  
function startWorker() {
  if (typeof(Worker) !== "undefined") {
    if (typeof(w) == "undefined") {
    var code = document.getElementById('code').textContent;
  var blob = new Blob([code1], { type: 'application/javascript' });
  var url = URL.createObjectURL(blob);
     w = new Worker(url);
     URL.revokeObjectURL(url);
    }
    w.onmessage = function(event) {
      document.getElementById("result").innerHTML = event.data;
    };
  } else {
    document.getElementById("result").innerHTML = "Sorry! No Web Worker support.";
  }
}

function stopWorker() {
  w.terminate();
  w = undefined;
}
</script>

</body>
</html>








[ bokinet @ 06.01.2021. 00:16 ] @
Dobra i pouzdana dev alternativa oko stack-ova

bitnami wamp stack (win)

ili

bitnami mamp stack (macos)

bitnami.com