소수를 찾기 위해 해결책을 찾고 있는데 한 가지 문제 외에는 모든 것이 정상입니다. 웹 근로자 파일에서 i == 373 & & j == 15에서 중지됩니다. 내 HTML 페이지가 사라지고 페이지를 새로 고친 후 실행을 다시 시작할 수 있습니다. 그러나 입력 매개 변수는 동일하며 (localStorage에 저장됩니다) 나에게 미친 짓이됩니다. 약간의 시간이 지나면 다시 실행을 멈추고 html 요소가 사라집니다. 또한 콘솔의 js도 작동하지 않습니다. 오류가 없습니다. 잃어 버렸습니다. 고맙습니다.Html 요소가 스크립트 실행시 숨김
MAIN.JS
var db = openDatabase("primeNumbers", "0.1", "Prime numbers db", 200000);
db.transaction(function (tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS primeNumbers (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, value INTEGER NOT NULL UNIQUE)", [], null, null);
});
var settings = {};
prepareData();
$(document).ready(function() {
$('#start_button').click(function() {
toggleButton();
});
$('#show_table_button').click(function() {
showTableButton();
});
$('#show_canvas_image_button').click(function() {
showCanvas();
});
});
//check if db can be used
if(!db){alert("Failed to connect to database.");}
var currNumber = 2;
var work;
var worker = new Worker('js/worker.js');//(blobURL);
//worker event listener
worker.onmessage = function(event) {
(event.data != undefined) && (settings.bFlag = true);
finder(true);
};
function finder(again) {
if(settings.j == 14 && settings.i == 373) {
console.log('70');
};
if(again) {
if (settings.bFlag){
settings.j = 0;
if (settings.iShag == 3){
settings.i+=4;
settings.iShag = 0;
} else {
settings.i+=2;
settings.iShag++;
};
iSquare = Math.floor(Math.sqrt(settings.i));
settings.bFlag = false;
};
settings.j++;
};
storeTempData();
work && worker.postMessage('{\"i\":\"'+settings.i+'\",\"j\":\"'+settings.j+'\"}');
};
function toggleButton() {
btn = $('#start_button');
if(btn.text() != 'pause_calculations') {
btn.text('pause_calculations');
work = true;
finder(false);
} else {
btn.text('resume_calculations');
work = false;
};
};
// table with data
function showTableButton() {
//TODO: check if we can use this as parameter to function
btn = $('#show_table_button');
if(btn.text() == 'show_calculated_data') {
btn.text('reload_table');
renderTable();
} else {
//TODO: implement it renderTable();
};
};
var table_data;
function renderTable() {
getBlockOfDataFromDb(function() {
$('#table_with_results').jqGrid({
datatype: 'local',
data: table_data,
height: 230,
width: 350,
colNames: ['id', 'value'],
colModel: [
{ name: 'id', index: 'id', width: 20, sorttype: 'int', align: 'right' },
{ name: 'value', index: 'value', width: 20, sorttype: 'int', align: 'right'}
],
multiselect: false,
caption: 'Prime numbers from db',
rowNum: 10,
pager: 'table_pager',
pagination: true,
gridview: true,
edit:false,
add:false,
del:false
});
});
};
function getBlockOfDataFromDb(callback) {
var res = [];
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM primeNumbers', [], function(tx, result) {
result_length = result.rows.length;
for(var i = 0; i < result_length; i++) {
var json_obj = { id: result.rows.item(i).id, value: result.rows.item(i).value };
res.push(json_obj);
};
table_data = res;
callback();
});
});
};
Array.prototype.contains = function(k) {
for(var p in this)
if(this[p] === k)
return true;
return false;
};
function showCanvas() {
var primeArray = [];
var edge;
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM primeNumbers', [], function(tx, result) {
result_length = result.rows.length;
for(var i = 0; i < result_length; i++) {
primeArray.push(parseInt(result.rows.item(i).value));
};
edge = parseInt(Math.sqrt(Math.max.apply(Math, primeArray))) + 1;
canv_div = $('#canvas_div');
$('<canvas width="'+edge+'" height="'+edge+'" id="canvas_elem"></canvas>').appendTo(canv_div);
canv = $('#canvas_elem')[0];
var context = canv.getContext('2d');
var imgd = context.createImageData(edge,edge);
var pix = imgd.data;
var iter = 0;
for (var i = 0; n = pix.length, i < n; i += 4) {
pix[i] = 0;
if(primeArray.contains(iter)) {
pix[i+3] = 255;
} else {
pix[i+3] = 50;
};
iter++;
}
context.putImageData(imgd, 0,0);
});
});
};
function prepareData() {
var ls = localStorage;
if(ls.getItem('bFlag') && ls.getItem('i') && ls.getItem('j') && ls.getItem('iShag')) {
settings.bFlag = (ls.getItem('bFlag') === 'true');
settings.i = parseInt(ls.getItem('i'));
settings.j = parseInt(ls.getItem('j'));
settings.iShag = parseInt(ls.getItem('iShag'));
} else {
settings.i = 7;
settings.j = 1;
settings.iShag = 0;
settings.bFlag = false;
db.transaction(function(tx) {
tx.executeSql('INSERT INTO primeNumbers (value) SELECT 2 AS value UNION SELECT 3 UNION SELECT 5');
});
};
};
function storeTempData() {
localStorage.setItem('i' , settings.i);
localStorage.setItem('j' , settings.j);
localStorage.setItem('bFlag' , settings.bFlag);
localStorage.setItem('iShag' , settings.iShag);
};
또한 내 는
onmessage = function(event) {
data = JSON.parse(event.data);
i = parseInt(data['i']);
j = parseInt(data['j']);
iSquare = Math.floor(Math.sqrt(i));
run();
};
function run() {
var db = openDatabase("primeNumbers", "0.1", "Prime numbers db", 200000);
db.transaction(function(tx) {
if(i == 373 && j == 15) {
1+1;
};
tx.executeSql('SELECT value FROM primeNumbers WHERE id='+(j+1), [], function(tx, result) {
val = parseInt(result.rows.item(0)['value']);
if (i % val == 0){
self.postMessage('bFlag');
} else if (j >= iSquare) {
db.transaction(function(tx) {
tx.executeSql('INSERT INTO primeNumbers (value) VALUES ('+i+')', [], function() {
self.postMessage('bFlag');
});
});
} else {
self.postMessage();
};
},
function(tx, error) {
self.postMessage('Error processing SQL: ' + error);
});
}, function(error) {
self.postMessage('Error processing Transaction: ' + error)
});
};
내가 어떤 아이디어에 행복 할 것이다 WORKER.JS. 아마도 smb는 오류를 잡는 방법이나 내가 크롬 프로파일 러에서 찾을 필요가있는 것을 알고 있습니다. 나는 프로시스로 비디오를 썼다. youtube