В настоящее время я играю с идеей использования IFRAME для реализации очень простого многопоточного движка. Однако мои первоначальные результаты показывают, что работа в потоках медленнее, чем просто работа в одном потоке.javascript многопоточность возможна с IFRAMEs
Мой тест:
Single Thread
var start = new Date().getTime();
for (var i = 0; i < 300; i++) { /* Do costly processor operations */ }
debug('Took: ' + new Date().getTime() - start);
Множественные нити
var start = new Date().getTime();
// In thread 1
for (var i = 0; i < 100; i++) { /* Do costly processor operations */ }
// In thread 2
for (var i = 100; i < 200; i++) { /* Do costly processor operations */ }
// In thread 3
for (var i = 200; i < 300; i++) { /* Do costly processor operations */ }
// In a callback in the original FRAME (thread)
debug('Took: ' + new Date().getTime() - start);
Итак, как можно видеть, я просто разделив нагрузку среди ссылок IFRAME (Указанный выше код предназначен только для того, чтобы лучше понять, что я делаю, это не работает код).
Итак, я думаю, что даже с использованием FRAME FireFox все еще есть только один JS-движок? Правильно ли это предположение? (что делает мои исследования глупыми), отличаются ли другие браузеры?
делая быстрый Googles я получил эту статью: http://codediaries.blogspot.com/2009/12/real-javascript-multithreading-using.html
Однако повышение производительности, достигнутые здесь, скорее всего, просто делают параллельные запросы HTTP, а не вычислительной мощности.
Спасибо за понимание.
Guido
Как насчет добавления нулей в счетчик циклов?Сделайте 10000, 20000 и 30000 соответственно и посмотрите, что произойдет. – chakrit
chakrit: Мои настоящие тесты используют 1000 итераций, приведенный выше пример небольшой для простоты. – gatapia
Одна вещь, чтобы убедиться, что вы также учитываете разрешение JavaScript таймера, которое часто составляет 15 мс: http://ejohn.org/blog/accuracy-of-javascript-time/ – Annie