Работает ли iframe в той же теме, что и владелец?

У меня напряженная работа с процессором, и я не хочу ухудшать работу пользователя. поскольку веб-работники (http://ejohn.org/blog/web-workers/) являются новой функцией и не поддерживаются всеми браузерами, я думал открыть iframe с помощью HTML + JS который будет выполнять всю грязную работу и использовать некоторые междоменные коммуникации для передачи результатов. К сожалению, я заметил, что владелец iframe страдает от работы процессора в окне iframe.

Выполнено ли такое поведение? есть ли способ решить это?

Ответ 1

Один из способов сортировки мультипроцессорности заключается в том, чтобы функция Javascript выполняла немного работы, а затем вызывала setTimeout с той же функцией; то функция немного поработает и снова вызовет setTimeout, и этот цикл будет продолжаться вечно или пока они не закроют кадр или сигнал не перестанет работать. В MDN есть хороший пример того, как установить это.

Между таймаутами Javascript не должен потреблять процессорное время. Возможно, вам придется немного поиграть, чтобы посмотреть, как долго будут длиться ваши таймауты - 1 мс, вероятно, слишком короткий, но 1с определенно слишком длинный. Другим фактором будет скорость процессора компьютера, на котором выполняется задание, поэтому вам может потребоваться выполнить псевдо-бенчмаркинг на стороне клиента с помощью Javascript, прежде чем вы сможете определить, как долго задерживаться каждый раз.

Ответ 2

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

Если речь идет о отзывчивости интерфейса, у Рушакова есть хороший ответ. Хотя JavaScript работает, рендеринг HTML не происходит, и пользовательский интерфейс не реагирует. Используя тайм-ауты, управление можно периодически возвращать в поток рендеринга/UI-потока, обеспечивая более отзывчивое восприятие, даже если оно по-прежнему работает только однопоточно.