21 шаги для Super Speedy JavaScript

Sep 12, 2025
Инструкции
Speed up JavaScript
(Образ кредита: Pexels.com)

На первый взгляд, параллельная обработка звучит как приглашение на бесплатный обед - возможность использовать многоядерные процессоры более эффективно должны дать ваш код огромной скоростью. Практический опыт показывает, что это не всегда так: некоторые проблемы невозможно распараллелите. В дополнение к этому, параллельное исполнение приводит к целую семью новых проблем, которые не видели на односных машинах.

Параллельный код может, в принципе, быть разбитым на две группы работы. Первая группа - это классическая скорость увеличения - если ваша программа должна просеять через 3000 изображений, разделение работы означает, что можно обрабатывать больше изображений в любое время. В то время как определенно выгодно, эта задача редко встречается в повседневной веб-разработке. (Если вы создаете Heake Image Site, убедитесь, что вы обратно их прилично облачное хранилище ).

Более распространенная форма работы параллелизма работает вокруг долгосрочных задач, которые не требуют много времени процессора. Хорошим примером для этого будет ждать загрузку или какого-либо ввода устройства: если это сделано в параллельном моде, остальная часть GUI не должна быть заблокирована. Учитывая, что пользователи имеют тенденцию к пониманию «Почему кнопка не нажимает», это может привести к увеличению удовлетворенности пользователя, даже если фактическая скорость не увеличивается.

Если вам нужны новые ресурсы, чтобы помочь вам Code Smarter, ознакомьтесь с нашим руководством к лучшему Инструменты веб-дизайна 2019 года. Если вы хотите полностью избежать кода, спроектируйте свой сайт лучшим Строитель сайта и убедитесь, что вы выбрали идеальный веб хостинг Сервис с нашим руководством.

01. Интервьюированное исполнение

 Var Sleep = требуют («сон»);

Функциональный работник () {
    Console.log («Working Up»)
    Sleep.msleep (1000)
    console.log («работник вниз»)
}

SetInterval (работник, 2000);
в то время как (1 == 1)
{
    Sleep.msleep (250)
    Console.log («Привет от главного»)
} & gt; 

Давайте начнем с небольшим примером на основе любимой любимой: setinterval. функция. Требуется ссылка на функцию и числовое значение, разграниченное в миллисекундах. После этого функция периодически выпускается всякий раз, когда истекает задержки таймера.

02. Настройка для осени

 NPM Установка сна
NPM Example1.js 

С использованием спать() Функция требует, чтобы мы загрузили модуль сна в локальный проект NPM. Он действует как интерфейс к библиотеке сна операционной системы - не задавайся вопросом, будет ли компилятор вашей рабочей станции включен во время развертывания пакета.

03. Огиб многозадачности

Speed up JavaScript: 03

(Кредит на изображение: TAM Hanna)

При запуске этой программы вы обнаружите, что вы столкнулись с выходом, аналогичным, как показано на рисунке, сопровождающему этот шаг. Очевидно, что наш работник никогда не вызывает - что-то должно быть не так с функцией SetInterval.

04. Опытные опасности многозадачности, часть 2

Современные браузеры оснащены каждой вкладкой с одной нитью JavaScript. Тщательный взгляд на наш цикл показывает, что он бесконечно. Это означает, что он будет работать навсегда, и никогда не будет давать контроль. При условии setinterval () Работает с сообщением, его полезная нагрузка никогда не запускается, поскольку обработчик сообщений заблокирован от работы.

05. Сосредоточиться на нарушителях

 const bar = () = & gt; console.log ('Bar')

const baz = () = & gt; Console.log ('baz')

const foo = () = & gt; {
  console.log ('foo')
  Setimeate (бар, 0)
  Баз ()
}

foo ()

Блог Flavio Copes's ' обеспечивает чрезвычайно интересный бит кода, иллюстрирующего проблему. При запуске он дает вывод, показанный на рисунке из-за блокировки очереди сообщений до foo () Отказ от контроля над основным потоком.

06. Введите резьбу

Speed up JavaScript: 06

(Кредит на изображение: TAM Hanna)

Учитывая, что базовая операционная система способна выполнять упреждающую многозадачность, давайте использовать его возможности нерестами потоками через выделенные API под названием WebWorkers, которые наслаждаются широкой поддержкой. Фигура, сопровождающая этот шаг, показывает Текущий список для функции.

07. Создайте дополнительный файл

Console.log («Работник говорит привет!»);
Console.log («работник вверх»);
в то время как (1 == 1)
{
   Console.log («X»);
}

WebWorkers не могут отключить с помощью полезной нагрузки функции. Вместо этого требуется новый файл, который содержит код, предназначенный для запуска в потоке. В случае нашего примера, example7thread.js. Содержание показано сопровождающим этот шаг.

08. Запустите рабочий ...

 const рабочий = требует ('works_threads');

var myworker = новый рабочий. Worker ('./
example7Thread.js ');
var myworker2 = новый рабочий. Worker ('./
example7Thread.js '); 

Наш работник готов к первому времени. Специальности Node.js runtime заставляет нас включать модуль рабочих потоков и пропуск в относительном пути - проблемы, не сталкивающиеся в браузере. Кроме того, не задавайся вопросом о Отсутствует начало () Позвоните - веб-работник устанавливается, когда экземпляр наступит в Интернет.

09. ... и понять его результаты

Speed up JavaScript: 09

(Кредит на изображение: TAM Hanna)

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

10. Добавьте маску

Speed up JavaScript: 10

(Кредит на изображение: TAM Hanna)
 const рабочий = требует ('works_threads');

var myworker = новый рабочий. Worker ('./
example7Thread.js ');
var myworker2 = новый рабочий. Worker ('./
example7Thread.js ');


в то время как (1 == 1)
{

}

Другой эксперимент включает в себя размещение пустой петли после двухконструкций конструктора. В этом случае темы никогда не начнут работать - сообщение вызова никогда не приходит к операционной системе.

11. Интерпретация связи

Хотя работники, работающие на жестких бесконечных петель, имеют выставленные выше проблемы, процедуры могут общаться друг с другом. Это делается через сообщение, передающее интерфейс - подумайте о нем как объект, который позволяет пройти объект сообщения от отправителя к реципиенту по границам нити.

12. Почему сообщение-проход?

В дополнение к преимуществам возможность координации потоков E FF устойчиво (и снизить риск «столкновения», также известных как условия расы), сообщение, передавающее в основную нить, является единственным способом взаимодействия с DOM, из-за Di FF Cology Безопасные потоки стеки GUI.

13. Перейти к браузеру

Реализация сообщения, проходящего в Node.js утомительно. Переместите код в Интернет - начните, создавая жгут HTML, которые загружаются examplempi.js. Отказ Имейте в виду, что этот код может быть запущен только с веб-сервера localhost из-за ограничений о происхождении DOM.

14. Настройте почтовый ящик ...

 var myworker = новый работник ('./
ExamplempithRead.js ');
var myworker2 = новый рабочий ('./
ExamplempithRead.js ');


myworker.onmessage = Функция (E)
{
console.log (e);
}

myworker2.onmessage = Функция (E)
{
console.log (e);
}

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

15. ... и кормить его от работника

 Postmessage («Работник говорит привет!»);
PostMessage («работник вверх»);
в то время как (1 == 1)
{
   PostMessage («X»);
}

Отправка сообщений на почтовый ящик достигается путем вызова функции сообщения сообщения. Имейте в виду, что работник также может реализовать onmessage. Событие, которое может получать информацию от того, кто «владеет» объектом инстанции работника.

16. Удар ...

На данный момент в течение времени код готов к запуску. Консоль разработчиков не затоплен сообщениями из-за высокой целевой целесообразности интерфейса MPI, что означает, что данные могут ездить по системе E FF устойчиво.

17. async и ждать

Speed up JavaScript: 17

(Кредит на изображение: TAM Hanna)

Добавление Microsoft Async и await ключевых слов изменена история C # и VisualBasic.net. В принципе, метод, обозначенный Async, работает совместно с остальной частью программы. Результаты могут быть собраны через функцию ждут.

18. Заменить наш спящий

 const sleep = (milliseconds) = & gt; {
  вернуть новое обещание (разрешение = & gt;
Settimeate (разрешение, миллисекунды))
} 

Учитывая, что браузеры находятся под тяжелыми ограничениями, когда речь идет о доступе к родным функциям, мы не можем повторно использовать функцию сна, упомянутой ранее. Кроме того, это, кроме того, в том, что он остановил весь odd.js во время выполнения. Спипка, сопровождающий этот шаг, обеспечивает более эффективный подход.

19. Поймите код ...

Этот код возвращает объект обещания - это еще один класс удобства, добавленный в Java Script в попытке сделать многопоточность проще. Вам нужно будет вызвать его метод разрешения через сентиментальный Обеспечивая, что код должен «сидеть» довольно много времени.

20. ... и развернуть его где-то

Ждут вызовы разрешены только внутри асинковых функций. Это означает, что работник нуждается в перезаписи - начните выключить, вызывая функцию предъявителя Async. Он обрабатывает остальную часть взаимодействия кода.

 const sleep = (milliseconds) = & gt; {
  вернуть новое обещание (разрешение = & gt;
Settimeate (разрешение, миллисекунды))
}
PostMessage («Работник говорит привет!»);
PostMessage («работник вверх»);
работник ()
Async Function Worker () {
в то время как (1 == 1)
{
   PostMessage («X»);
   ждут сон (1000);
}
} 

21. Упряжать силы родного!

Разработчики, работающие на код Node.js, не должны забывать, что они могут - обычно - также создают совершенно родные модули, если требуется чрезвычайно высокая производительность. Они могут не только воспользоваться различными API в операционной системе, но также можно записать в языках программирования, которые компилируют машинный код.

Эта статья была первоначально опубликована в номере 291 журнала Creative Web Design Веб-дизайнер Отказ Купить проблему 291. Отказ

Прочитайте больше:

  • Лучшие библиотеки JavaScript
  • 25 лучших apis javascript
  • Действительно полезные учебные пособия веб-дизайна

Инструкции - Самые популярные статьи

Как выбрать имя сайта для вашего бизнеса

Инструкции Sep 12, 2025

(Образ кредита: Ян из Песелей) Пытаясь выбрать имя сайта? Это одн�..


Начните с Bulma

Инструкции Sep 12, 2025

(Кредит на изображение: Bulma) Хотите начать использовать Bulma? Ты в �..


8 Удивительные новые графические учебники дизайна

Инструкции Sep 12, 2025

Независимо от того, просто начинаете ли вы в графическом дизайне или заправочном Pro, всегда есть что-то н�..


7 Top Tips для запуска собственного бизнеса

Инструкции Sep 12, 2025

Если вы чувствуете себя застрявшим в творческой колею, это может стоит..


Уровень вашего VR Art

Инструкции Sep 12, 2025

Я начал использовать Cinema 4D через несколько месяцев после получения мо�..


Создайте простую цветовую диаграмму

Инструкции Sep 12, 2025

Добраться до захвата с Теория цвета может показаться немного слишком похожем на изучение матем�..


Восстановите Flash на 2004 год на 2018 год

Инструкции Sep 12, 2025

В 1999 году я построил свой первый веб-сайт, используя веб-студию 1.0. Веб-студия была графическим пользоват�..


4 совета по разработке навыков разработчиков

Инструкции Sep 12, 2025

(Образ кредита: Роберт Пиццо) Сверхрусенний режиссер Дэн Молл..


Категории