Super Speedy Javascript 21 단계

Sep 16, 2025
어떻게
Speed up JavaScript
(이미지 크레디트 : pexels.com)

처음에는 무료 점심에 대한 초대장과 같은 병렬 처리가 멀티 코어 CPU를 사용하여 코드를보다 효율적으로 사용할 수 있어야합니다. 실용적인 경험은 항상 그런 것은 아닙니다 : 일부 문제는 병렬로 전혀 불가능합니다. 이 외에도 병렬 실행은 단일 코어 컴퓨터에서는 보이지 않는 새로운 문제의 전체 가족이됩니다.

병렬 코드는 원칙적으로 두 그룹의 직업 그룹으로 분해 될 수 있습니다. 첫 번째 그룹은 고전적인 속도 증가입니다 - 프로그램이 3000 개의 이미지를 통해 멈추어야하는 경우 작업을 분할하면 한 번에 더 많은 이미지를 처리 ​​할 수 ​​있음을 의미합니다. 확실히 유익하지만,이 종류의 임무는 일상적인 웹 개발에서 거의 발생하지 않습니다. (이미지 무거운 사이트를 만드는 경우, 괜찮은 것으로 확인하십시오. 클라우드 스토리지 짐마자

많은 CPU 시간이 필요하지 않은 장기 실행 작업을 중심으로 더 일반적인 병렬 작업이 작동합니다. 이것에 대한 좋은 예가 다운로드 또는 일종의 장치 입력을 기다리고 있습니다. 이것이 평행 한 방식으로 수행되면 나머지 GUI를 차단할 필요가 없습니다. 사용자가 '버튼을 클릭하지 않는 이유'를 이해하는 데 문제가있는 경향이 있음을 감안할 때 실제 속도가 증가하지 않아도 사용자 만족도가 향상 될 수 있습니다.

더 똑똑한 코드를 돕기 위해 새로운 리소스가 필요한 경우 우리 가이드를 최상의 가이드를 확인하십시오. 웹 디자인 도구 2019 년. 코드를 모두 피하고 싶다면 사이트를 최고로 디자인하십시오. 웹 사이트 빌더 , 완벽한 것을 선택했는지 확인하십시오 웹 호스팅 우리 가이드와 함께 서비스.

01. intermalled 실행

 var 슬립 = 요구 ( '수면');

기능 노동자 () {
    console.log ( "Worker 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. 문제가있는 것에 집중하십시오

 constbar = () = & gt; console.log ( 'bar')

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

const foo = () = & gt; {
  console.log ( 'foo')
  SetTimeout (바, 0)
  바즈 ()
}

foo ()

Flavio는 '블로그의 블로그를 모르게합니다 문제를 보여주는 매우 흥미로운 비트의 코드를 제공합니다. 실행될 때 메시지 대기열이 차단 될 때까지 그림에 표시된 출력을 생성합니다. foo () 메인 스레드의 제어를 포기합니다.

06. 스레딩을 소개합니다

Speed up JavaScript: 06

(이미지 크레디트 : Tam Hanna)

기본 운영 체제가 선제 멀티 태스킹을 수행 할 수 있다는 점을 감안할 때 광범위한 지원을 즐길 수있는 전용 API라는 전용 API를 통해 스레드를 산란하여 기능을 활용하십시오. 이 단계를 수행하는 수치는 다음을 보여줍니다 현재 목록 기능의 경우.

07. 추가 파일을 만듭니다

console.log ( "근로자는 안녕하세요!"라고 말합니다);
console.log ( "근로자 업");
동안 (1 == 1)
{
   console.log ( "x");
}

WebWorkers는 함수 페이로드로 걷어차는 것을 꺼질 수 없습니다. 대신 스레드에서 실행하려는 코드가 들어있는 새 파일이 필요합니다. 예제의 경우, example7thread.js. 이 단계와 함께 표시된 콘텐츠가 있습니다.

08. 작업자를 실행 ...

 Const Worker = requient ( 'Worker_Threads');

var myworker = 새 작업자 .worker ( './
example7thread.js ');
var myworker2 = 새 작업자 .worker ( './
example7thread.js '); 

우리 작업자는 프라임 타임에 준비가되어 있습니다. Node.js 런타임의 특산품은 작업자 스레드 모듈을 포함하고 브라우저에 직면되지 않은 상대 경로를 전달하도록 런타임을 제공합니다. 게다가, 그대로 궁금해하지 마십시오 누락 된 시작 () 통화 - 인스턴스가 온라인 상태 일 때 웹 작업자가 설정합니다.

09. ... 그리고 그 결과를 이해하십시오

Speed up JavaScript: 09

(이미지 크레디트 : Tam Hanna)

메시지 전달은 대개 런타임과 나머지 운영 체제간에 몇 가지 종류의 상호 작용이 필요합니다. 슬프게도, 우리의 끝없는 루프는이 프로세스를 차단합니다. 이는 메시지 중 하나만 '빅 스톨'이전에 팝업됩니다.

10. 마스크를 추가하십시오

Speed up JavaScript: 10

(이미지 크레디트 : Tam Hanna)
 Const Worker = requient ( 'Worker_Threads');

var myworker = 새 작업자 .worker ( './
example7thread.js ');
var myworker2 = 새 작업자 .worker ( './
example7thread.js ');


동안 (1 == 1)
{

}

또 다른 실험은 두 개의 생성자 호출 후에 빈 루프를 배치하는 것입니다. 이 경우 스레드가 작동하지 않습니다. 호출 메시지는 운영 체제와 절대로 도착하지 않습니다.

11. 프로세스 간 통신

끝없는 루프를 실행하는 노동자들은 위에 전시 된 문제가 있지만, 일상은 서로 통신 할 수 있습니다. 이는 메시지 전달 인터페이스를 통해 수행됩니다. - 스레드 경계를 통해받는 사람의 메시지 객체를받는 사람에게 메시지 객체를 전달할 수있는 시설로 생각합니다.

12. 왜 메시지를 통과합니까?

스레드 e FF를 조정할 수있는 이점 외에도, 경쟁 조건이라고도하는 '충돌'의 위험을 줄이는 것의 이점이 있는데, 주 ​​스레드로 통과하는 메시지는 DOM과 상호 작용하는 메시지는 DOF와 상호 작용하는 것입니다. 스레드 안전 GUI 스택.

13. 브라우저로 이동하십시오

node.js에서 통과하는 메시지를 구현하는 것은 지루합니다. 로드하는 HTML 하네스를 작성하여 코드를 웹으로 이동하십시오. examplempi.js. ...에 이 코드는 DOM 원점 제한으로 인해 LocalHost 웹 서버에서만 실행될 수 있음을 알아야합니다.

14. 사서함 설정 ...

 VAR MyWorker = 새로운 작업자 ( './
examplempithread.js ');
var myworker2 = 새 작업자 ( './
examplempithread.js ');


myworker.onmessage = 함수 (e)
{
console.log (e);
}

myworker2.onmessage = 함수 (e)
{
console.log (e);
}

각 작업자는 다른 쪽 끝에서 메시지가 나타날 때마다 호출되어야하는 함수 참조를 차지하는 onMessage 속성을 노출합니다. 들어오는 메시지는 기본 스레드에서 브라우저의 콘솔로 전달됩니다.

15. ... 그리고 노동자에서 그것을 먹이십시오

 Postmessage ( "노동자는 안녕하세요!");
사후류 ( "근로자");
동안 (1 == 1)
{
   후후 ( "x");
}

사서함으로 메시지를 보내는 것은 POST 메시지 기능을 호출하여 수행됩니다. 작업자가 또한 구현할 수 있음을 명심하십시오. onMessage. 이벤트는 작업자 인스턴스 개체를 '소유 한'사용자로부터 정보를받을 수 있습니다.

16. 그것을 걷어차는 ...

이 시점에서 코드는 실행할 준비가되었습니다. Developer Console은 MPI 인터페이스의 High E FF Iciency로 인해 메시지가 멀지 않아서 데이터는 시스템 E FF를 iciently로 이동할 수 있습니다.

17. 비동기와 기다리고 있습니다

Speed up JavaScript: 17

(이미지 크레디트 : Tam Hanna)

Microsoft의 비동기 및 기타 키워드를 추가하면 C # 및 VisualBasic.net의 기록을 수정했습니다. 원칙적으로, 흔히 표시된 방법은 나머지 프로그램과 협력적으로 실행됩니다. 결과는 기다리고있는 기능을 통해 수확 될 수 있습니다.

18. 우리의 잠자리를 교체하십시오

 const 슬립 = (밀리 초) = & gt; {
  새로운 약속 반품 (resolve = & gt;
SetTimeout (해결, 밀리 초)))
} 

브라우저가 원시 함수에 액세스 할 때 심각한 제한 사항이 있음을 감안할 때 전에 언급 한 수면 기능을 다시 사용할 수 없습니다. 또한, 또한 전체 노드 .js 런타임을 정지시키는 것에서 서브 오디오입니다. 이 단계를 수반하는 스 니펫은보다 효과적인 접근법을 제공합니다.

19. 코드 이해 ...

이 코드는 약속 오브젝트를 반환합니다. 멀티 스레드를 쉽게 만들기 위해 Java 스크립트에 추가 된 또 다른 편의 클래스입니다. 해당 방법을 통해 해당 방법을 호출해야합니다. SetTimeout. 코드가 꽤 약간의 시간을 보도록 보장합니다.

20. ... 그리고 그것을 어딘가에 배치하십시오

대기중인 전화가 비동기 기능 내부에서만 허용됩니다. 즉, 비동기 베어러 기능을 호출하여 작업자가 다시 쓰기 시작을 필요로합니다. 그것은 코드 상호 작용의 나머지 부분을 처리합니다.

 const 슬립 = (밀리 초) = & gt; {
  새로운 약속 반품 (resolve = & gt;
SetTimeout (해결, 밀리 초)))
}
Postmessage ( "근로자가 안녕하세요!");
사후류 ( "근로자");
노동자()
비동기 기능 작업자 () {
동안 (1 == 1)
{
   후후 ( "x");
   잠자기를 기다리고 있습니다 (1000);
}
} 

21. 네이티브의 힘을 하네스!

node.js 코드에서 작업하는 개발자는 일반적으로 높은 성능이 필요할 경우 일반적으로 기본 모듈을 생성 할 수 있습니다. 이들은 다양한 운영 체제 API를 활용할 수있을뿐만 아니라 기계 코드로 컴파일하는 프로그래밍 언어로 작성할 수도 있습니다.

이 기사는 원래 Creative Web Design Magazine의 291 호에 발표되었습니다. 웹 디자이너 ...에 구매 문제 291. ...에

자세히보기 :

  • 최고의 자바 스크립트 라이브러리
  • 최고의 JavaScript API의 25 개
  • 정말 유용한 웹 디자인 자습서

어떻게 - 가장 인기있는 기사

4 개의 가구 항목 (진지하게)으로 자신의 스타일러스를 만드십시오

어떻게 Sep 16, 2025

(이미지 크레디트 : Olly Curtis) iPad 또는 태블릿에 대한 자신의 스타일러스를 만들 수있는 ..


GRAVE CMS로 시작하기

어떻게 Sep 16, 2025

(이미지 크레디트 : 미래) Grav는 차이가있는 콘텐츠 관리 시스템 (CMS)입니다. 콘텐츠 관리..


늑대를 그리는 법

어떻게 Sep 16, 2025

당신이 마스터 한 경우 개를 그리는 법 , 늑대도 쉽게 그릴 수있을 것이라고 생각하는 것에 대해 용서받을..


10 가지가 Photoshop과 함께 할 수있는 10 가지

어떻게 Sep 16, 2025

포토샵은 전체가 그 부분의 합보다 큰 완벽한 예제이며, 그 중 많은 부분이 많습니다. 도구, 조정 ..


14 Zbrush 워크 플로우 팁

어떻게 Sep 16, 2025

모든 아티스트는 Zbrush에서 3D 아트를 만들 때 자신의 고유 한 워크 플로를 가지고 있습니다. 이 워..


HTML5에 대한 이펙트 애니메이션 내보내기

어떻게 Sep 16, 2025

웹의 애니메이션이 여기에 있습니다. 그것은 우리의 미묘한 움직임에서 온 모든 일에 있습니다. ..


화려한 좀비를 칠하는 방법

어떻게 Sep 16, 2025

나는 항상 언데드를 좋아했으며, 종종 움직이는 목표물로 너무 자주 줄어들고있는 불규칙한 약자..


Photoshop에서 이중 노출을하십시오

어떻게 Sep 16, 2025

Adobe는 현재로 만들어지는 새로운 일련의 비디오 자습서를 시작하여 다양한 디자인 프로젝트를 작성하는 방법을 개요하는 것을 목표로합니다. ..


카테고리