2010-09-01 2 views
0

У меня здесь странная необходимость, и я не уверен в ее возможности. Я могу только подумать, как я буду делать это с помощью потоков (Чтобы создать другой поток, который выполняет функцию Quine вдоль потока потока, выполняющего сценарий, который я хочу выполнить Quine и выполняю одновременно (без ручного добавления предупреждений везде !!!), но javascript не обладает этой функциональностью, не так ли?Javascript: Execute и Quine в то же время

У меня есть JavaScript, который интерпретируется приложением с минимальной возможностью отладки JavaScript из его собственного. Мой скрипт падает, и поскольку он также использует некоторые утверждения, понятные только этому приложению Я не могу отлаживать это в Firefox или Internet Explorer, потому что они не могут обрабатывать эти пользовательские инструкции. Я надеюсь, что я смогу достичь - это программа, которая может имитировать другую программу, но также выполняет ее собственные функции.

Для аргумента Я сказал, что у меня есть скрипт hello.js, который выводит «Hello World!» 100 раз, и когда он предоставляется приложению, он интерпретирует это, но в какой-то момент падает, но я не могу сказать, почему, где и когда из-за ограниченная возможность отладки.

function main(){ 
    for(var i=0; i<100; i++){ 
      alert('Hello World!\n'); 
    } 
} 

Затем я хочу иметь сценарий, который я могу передать приложению вместо этого будет делать вид, что сценарий выше, но также предупреждение перед выполнением каждого оператора. Я мог бы просто сделать это:

function main(){ 
    alert('main()') 
    for(var i=0; i<100; i++){ 
      alert("alert('Hello World!\n');"); 
      alert('Hello World!\n'); 
    } 
} 

Однако я уверен, что вы можете увидеть, как долго программы это будет трудной задачей. Вместо этого я хочу сделать программу, которая может быть выполнена так:

function main(){ 
    var text = loadJSScript("C:\\Script\\Hello.js"); //Loads a text/javascript file line by line into an array 
    for(var i=0; i<text.length; i++){ 
      var statement = text[i]; 
      alert("Line Number: " + i + " Statement: " + statement); //Output the line number and statement before executing 
      execute(statement); //A function that executes the statement from the other file (as if a separate thread) 
    } 
} 

ответ

1

Это действительно зависит от вашей целевой аудитории (использование браузера).

Вы можете получить очень эффективную форму псевдо-резьбы, используя веб-работников.

http://ejohn.org/blog/web-workers/

Однако это не так широко поддерживается. Вы можете использовать это там, где это возможно.

Вы также можете получить некоторое поведение, подобное потоковому использованию, с помощью setTimeout для выполнения кода.

Вы можете увидеть, как в очереди здесь таймеры: http://ejohn.org/blog/how-javascript-timers-work/

Вы могли бы также сделать на стороне сервера расчет Куайн, и вызов с помощью AJAX. Это дает асинхронный запрос.

Эти последние 2 варианта не являются потоковыми, но код не будет ждать ответа перед продолжением.

+0

http: //articles.sitepoint.com/article/multi-threading-javascript Пример статьи по многопоточному Javascript, исследующий использование setInterval (аналогично setTimeout, но повторяющийся) Но, если возможно, AJAX кажется более удобным решением. –

+0

Приветствия. Я посмотрю на это и попробую веб-работников. –

0

Насколько я знаю, JavaScript является чисто моно-резьбовым.
Кроме того, заявление loadJSScript("C:\\Script\\Hello.js"); является рыбным, так как вы упоминаете браузеры. JS в браузерах (по крайней мере, на веб-страницах) не может получить доступ к файловой системе (кроме того, это не переносимо!).
Возможно, вы можете сделать что-то подобное в JScript Microsoft (в WSH).

+0

Это браузер, находящийся в клиентском приложении с возможностью файловой системы с использованием некоторых собственных функций javascript. Спасибо за ответ, хотя :) –