KR102006507B1 - 스크립트 코드를 가진 마크업 콘텐츠의 고속 프레젠테이션 기법 - Google Patents

스크립트 코드를 가진 마크업 콘텐츠의 고속 프레젠테이션 기법 Download PDF

Info

Publication number
KR102006507B1
KR102006507B1 KR1020147005629A KR20147005629A KR102006507B1 KR 102006507 B1 KR102006507 B1 KR 102006507B1 KR 1020147005629 A KR1020147005629 A KR 1020147005629A KR 20147005629 A KR20147005629 A KR 20147005629A KR 102006507 B1 KR102006507 B1 KR 102006507B1
Authority
KR
South Korea
Prior art keywords
code
script
script code
executable code
executable
Prior art date
Application number
KR1020147005629A
Other languages
English (en)
Other versions
KR20140063661A (ko
Inventor
스티븐 루코
루이스 라프레니어
커티스 쳉-쳉 맨
폴 아드리안 레더스
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20140063661A publication Critical patent/KR20140063661A/ko
Application granted granted Critical
Publication of KR102006507B1 publication Critical patent/KR102006507B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/48Incremental compilation

Abstract

동적 코드 생성 및 조정 기술은 스크립트 코드를 포함하는 동적 마크업 문서의 디스플레이를 위해 제공된다. 코드 생성 프로세스는 코드 준비 단계 및 하위 단계의 연기에 의해 안내될 뿐만 아니라 코드 자체에 관한 보유된 다양한 정보 레벨에 의해 통보받아, 실행의 해석 또는 관찰을 통해서, 수정된 코드를 생성할 뿐만 아니라 (예를 들어, 그 후 브라우저 애플리케이션에 의해 주어진 기능 호출에 따라 쉽게 스왑 인 또는 아웃될 수 있는 서로 다른 루프 본체를 생성하는) 대안적인 상황에 대한 대안적인 코드를 생성한다. 멀티 코어 아키텍처는 웹 사이트 프레젠테이션을 비대칭으로 보장함으로써 사용자 경험을 더 향상시키고, 기능은 사용자 경험에 대해 우선 순위가 정해진다.

Description

스크립트 코드를 가진 마크업 콘텐츠의 고속 프레젠테이션 기법{FAST PRESENTATION OF MARKUP CONTENT HAVING SCRIPT CODE}
웹 브라우징 경험이 최소한의 상호 작용을 갖는 정보의 플랫 프레젠테이션(flat presentation)으로부터 클라이언트 측에서의 수많은 상호 작용 또는 더욱 일반적으로 정보 디스플레이 및 디스플레이 상의 객체와의 풍부한 상호 작용의 융합(hybrid)을 갖는 풍부한 애플리케이션 또는 애플릿 경험으로 지속적으로 발전함에 따라, 주로 클라이언트 상의 네이티브 코드(native code)에 기초한 정보의 플랫 프레젠테이션을 위해 원래 설계된 기존의 문서 객체 모델(DOM(document object model))을 JavaScript 객체와 같은 스크립트 코드를 유동적으로 처리하는 경험으로 발전시키는 것에 기초한 다양한 과제가 있다. 예를 들면, 사용자 경험을 가속화하는 것이 과제로 남아있다.
예를 들면, 과거의 플라이 아웃 메뉴(fly out menus)를 사용하면 웹 경험이 서버와의 통신에 기인한 지연으로 플리커(flicker)된다. 스크립트는 작은 프로그램, 예를 들어 비동기형 자바스크립트(Asynchronous Javascript) 및 확장성 마크업 언어(Ajax)가 추가적인 도움을 위해 서버로 반환됨이 없이 즉석에서 DOM을 수정하도록 할 수 있다. 개발자 및 소비자가 둘 다 서버로 반환함이 없이 즉석에서 더욱 동적으로 수행하기를 원하기 때문에, 스크립트 코드가 클라이언트 측에서 빠르게 실행하게 하는 것은 과제가 되어 왔다.
사용자 경험은 DOM을 스크립트하는 데에 집중하므로, DOM을 변경하는 것은 서서히 불량한 상호 작용 응답을 하게 한다. 스크립트 엔진과 DOM의 네이티브 클래스 사이의 통신은 어떤 객체를 스크립트할 수 있게 하는 한 세트의 인터페이스, iDispatch, iActiveScript 등을 포함하는 OLE 자동화의 사용으로 인해 과거에는 불량했다. 아울러, 다양한 COM(Component Object Model) 객체가 오늘날 무차별적으로 생성될 수 있지만, 이는 불필요하고 실행을 느리게 할 수 있다.
서버와의 하나 이상의 왕복(round trip) 통신을 방지함으로써 웹 페이지가 클라이언트 브라우저에서 한번 사용자 입력에 더 응답하게 할 수 있는 클라이언트 측 스크립트는 일반적으로 (웹 서버 상의) 서버 측 대신 사용자의 웹 브라우저에 의해 클라이언트 측에서 실행되는 웹 상의 컴퓨터 프로그램의 클래스를 지칭한다. 일례로서, 클라이언트 측 스크립트는 동적 하이퍼텍스트 마크업 언어(동적 HTML 또는 DHTML)의 일부이며, 웹 페이지가 예를 들어 JavaScript(클라이언트 측 JavaScript) 및 VBScript와 같은 스크립트 언어로 스크립트되고 사용자 입력, 시각과 같은 환경 조건 또는 다른 변수에 따라 서로 다른 변화하는 콘텐츠를 갖도록 할 수 있다.
마크업 문서 내에 내장되는 클라이언트 측 스크립트는 때때로 "엠베디드 스크립트(embedded script)"로 지칭되고, 파일을 사용하는 문서에 의해 참조되는 별도의 파일에 포함된 스크립트는 때때로 "외부 스크립트"로 지칭된다. 요청에 응답하여, 이러한 스크립트 파일은 파일이 상주하는 웹 서버와 같은 네트워크 컴퓨팅 장치에 의해 사용자 컴퓨터에 전송된다. 이와 관련하여, 스크립트를 실행하고 스크립트로부터의 어떤 가시적 출력을 포함하는 마크업 문서를 표시하기 위해, 웹 브라우저는 스크립트 코드를 분석하고 컴파일하기 위해 스크립트 엔진과 함께 동작한다. 클라이언트 측 스크립트는 또한 브라우저가 예를 들어 버튼을 클릭하는 것과 같은 어떤 사용자 동작에 응답하여 따르게 하는 명령어를 포함할 수 있다. 종종, 이러한 명령어는 서버와의 추가적인 통신 없이 수반될 수 있다.
하나의 추세로서, 웹 브라우저 및 웹 페이지는 사용자가 웹 페이지의 비우호적 "리프레싱(refreshing)"을 경험하지 않지만, 대신 예를 들어 GIF(Graphic Interchange Format) 파일에 대한 요청이 발생하고 페이지의 부분이 곧 업데이트될 것임을 나타내는 움직이는(animated) GIF를 나타내는 아이콘을 보는 개선된 사용자 인터페이스를 제시하는 더 많은 클라이언트 측 스크립트를 채용하는 경향이 있다. JavaScript 기능을 추가함으로써, Ajax는 스크립트된 문서의 클라이언트 머신 및 개발자가 요청되고 렌더링되는 페이지의 새로운 버전을 필요로 하지 않고 배경에서 웹 서버와 같은 네트워크 컴퓨팅 장치와 통신하도록 해준다.
이것은 일반적으로 사용자 경험의 개선으로 이어지는 반면에, 설정 시간이 클라이언트 측에서 너무 오래 걸리는 다른 지연 시간(latency)으로 이어진다. 예를 들면, 상당량의 스크립트가 상위 100개의 웹 속성에 대한 경우인 경향이 있을 때에 웹 사이트에 채용되거나, 네트워크의 데이터 전송 속도가 느리거나, 클라이언트 상의 처리가 제한되는 경우에, 스크립트 엔진은 불량한 사용자 경험으로 이어지는 마크업 문서의 콘텐츠의 프레젠테이션을 위한 실행 가능 코드의 모두를 제공하는 데 너무 오래 걸릴 수 있다.
이와 관련하여, 기존의 웹 브라우징은 스크립트 엔진에 의해 실행 가능 코드의 비효율적 생성으로 이어지는 방식으로 발전하였는데, 그 이유는 스크립트 코드 생성에 관한 스크립트 엔진에 의한 구별이 없기 때문이고, 이것은 스크립트 엔진이 스크립트된 마크업 문서의 프레젠테이션을 위한 작업을 완료하는 동안 원치 않는 지연 시간으로 이어진다. 그러한 원치 않는 지연 시간은 특히 사용자가 상호 작용을 시작하기 전에 적재하기 위해 모든 웹 사이트의 기능을 기다릴 필요가 없거나 이를 원하지 않을 수 있는 경우 사용자 경험에 상당한 지체(significant drag)를 발생시킬 수 있다.
오늘날의 스크립트 엔진 및 코드 생성의 상술한 결함은 단지 종래의 시스템의 문제점 중 일부의 개요를 제공하도록 의도되고, 모든 것을 포괄하도록 의도되지 않는다. 현재 기술 수준의 다른 문제점 및 다양한 비제한적 실시예의 일부의 해당하는 이득은 다음의 상세한 설명을 검토할 때 더욱 자명해질 수 있다.
단순화된 요약은 본 명세서에서 더욱 상세한 설명 및 첨부 도면에 따르는 예시적인 비제한적 실시예의 다양한 양태의 기본적 또는 일반적인 이해를 돕기 위해 제공된다. 그러나, 이러한 요약은 광범위하거나 완전한 개요로서 의도되지 않는다. 대신에, 이러한 요약의 유일한 목적은 다음의 다양한 실시예의 더욱 상세한 설명에 대한 서두로서 단순화된 형태로 일부 예시적인 비제한적 실시예에 관한 몇몇 개념을 제시하는 것이다.
예시적인 실시예에서, 방법은 컴퓨팅 장치의 스크립트 엔진에 의해 스크립트 코드를 수신하는 단계와 - 스크립트 코드는 컴퓨팅 장치의 브라우저 애플리케이션에 의해 수신된 마크업 문서에 포함되거나 참조됨 -, 스크립트 엔진에 의해 스크립트 코드에 적용되는 다단계(multi-phase) 코드 준비 프로세스 중 적어도 하나의 단계에 적용하는 노력의 레벨을 결정하는 단계를 포함한다. 노력의 레벨은 브라우저 애플리케이션에 의해 스크립트 코드의 일부의 호출의 예측 또는 분석에 기초하거나 브라우저 애플리케이션에 의해 스크립트 코드의 과거의 사용에서 관찰되는 패턴에 기초하여 결정될 수 있다.
다른 실시예에서, 컴퓨팅 장치는 스크립트 코드를 포함하거나 참조하는 마크업 문서를 표시하도록 구성된 브라우저 애플리케이션과, 스크립트 코드를 수신하고 스크립트 코드 또는 스크립트 코드의 실행 동안 이러한 부분의 사용을 분석하여 이러한 부분의 성능이 수정된 부분의 실행에 의해 증가하는 조건의 세트를 결정하도록 구성된 스크립트 엔진 구성 요소를 포함하고, 충족되는 조건의 세트에 응답하여 수정된 부분이 이러한 부분 대신에 브라우저 애플리케이션에 의해 실행된다.
다른 실시예에서, 컴퓨터 판독 가능 저장 매체는 실행에 응답하여 적어도 2개의 프로세싱 코어를 포함하는 컴퓨팅 장치가 동작을 수행하도록 하는 컴퓨터 판독 가능 명령어를 포함하고, 이 동작은 마크업 문서의 스크립트 코드에 의해 나타내는 기능을 가능하게 하는 제 1 프로세싱 코어에 의해 실행 가능 코드를 생성하는 것을 포함하는 적어도 2개의 프로세싱 코어 중 제 1 프로세싱 코어에 의해 스크립트 코드를 포함하거나 참조하는 마크업 문서를 처리하는 것을 포함한다. 이러한 동작은 추가로 스크립트 코드의 특성에 기초하여 적어도 2개의 프로세싱 코어의 제 2 프로세싱 코어에 의해 실행 가능 코드와 다른 대안적인 실행 가능 코드를 선택적으로 생성하는 동작과, 실행 가능 코드를 스크립트 코드의 제 1 프로세싱 코어에 의한 추가적인 실행을 위한 대안적인 실행 가능 코드로 대체하는 동작을 포함한다.
대안적인 실행 가능 코드를 생성하는 것은 스크립트 코드의 전체 크기에 대한 스크립트 크기 중 적어도 하나의 루프의 크기의 비율의 함수, 스크립트 코드의 계산 강도의 측정, 또는 스크립트 코드에 기초하여 구성된 호출 트리의 분석에 기초하여 대안적인 실행 가능 코드를 선택적으로 생성하는 것을 포함할 수 있다.
다른 실시예 및 다양한 비제한적 예, 시나리오 및 구현은 아래에서 더욱 상세히 설명된다.
다양한 비제한적 실시예는 첨부 도면을 참조하여 추가로 설명된다.
도 1은 다단계 코드 준비 프로세스 중 하나 이상의 단계에 적용하는 노력의 레벨을 결정하기 위한 예시적인 방법을 도시한 흐름도이다.
도 2는 코드가 다양한 실시예에 따라 코드 준비 동안 겪을 수 있는 다양한 예시적인 단계를 도시한다.
도 3은 서로 다른 노력의 레벨이 다양한 실시예에 따라 적용될 수 있는 주어진 단계의 다수의 하위 레벨이 있을 수 있음을 예시하는 블록도이다.
도 4는 실시예에서 실행의 서로 다른 조건에 기초하여 코드에 대한 대안적인 루프 본체의 생성을 예시하는 블록도이다.
도 5는 실시예에서 동적 타이핑에 기초하여 동적 코드 생성 및 실행 중에 코드 스와핑(swapping)의 다른 비제한적 예를 도시한다.
도 6은 실시예에서 브라우저 애플리케이션과 스크립트 엔진 사이의 예시적인 교환을 예시한 흐름도이다.
도 7은 실시예에서 스레드 실행 해석된 코드와 스레드 생성 최적화된 코드 사이의 균형 및 데이터 구조의 대응하는 세트를 예시한 블록도이다.
도 8은 실시예에 따라 코드 최적화를 위한 작업 항목의 재우선 순위를 예시한 블록도이다.
도 9는 실시예에서 대체를 위한 최적화된 코드를 생성하기 위한 비제한적 프로세스를 예시한 흐름도이다.
도 10은 다양한 실시예에 따라 스크립트 엔진과 브라우저 애플리케이션 사이의 상호 작용을 포함하는 예시적인 비제한적 장치를 도시한 블록도이다.
도 11은 본 명세서에 설명된 다양한 실시예가 구현될 수 있는 예시적인 비제한적 네트워크 환경을 나타내는 블록도이다.
도 12는 본 명세서에 설명된 다양한 실시예의 하나 이상의 양태가 구현될 수 있는 예시적인 비제한적 컴퓨팅 시스템 또는 운영 환경을 나타내는 블록도이다.
배경 기술에서 설명된 바와 같이, DHTML 문서와 같은 마크업 문서에 JavaScript와 같은 임베디드 또는 외부 스크립트된 코드를 더욱더 포함시키는 추세는 종래의 스크립트 엔진에 의해 적용된 종래의 동적 코드 생성 프로세스의 결과로서 과도한 지연이 발생하는 일부 불량한 사용자 경험으로 이어질 수 있다.
이와 관련하여, 동적 코드 생성은 일부 특성으로 인해 몇몇 고유의 문제를 갖는다. 예를 들면, JavaScript와 같이 동적으로 타이핑된 언어를 사용하면, 종종 코드가 실제로 실행할 때까지 다양한 데이터 항목이 어떤 타입을 가지는지 구별할 수 없다, 예를 들어 코드가 실제로 실행할 때까지 동적으로 타이핑된 변수가 정수, 부동 소수점(float) 또는 문자열(string)인지를 알 수 없다.
아울러, CNN.com의 프로그램과 같이 웹 페이지의 일부가 되는 목표를 가진 프로그램에 대해서 프로그램을 동시에 실행하는 동안 네이티브 코드 명령어를 이용하기 위한 프로그램의 동적 컴파일에 대한 요구가 중요해질 수 있으므로 JavaScript가 호스팅되는 방법에 대한 넓은 상황은 다른 차이로 이어진다. 예를 들면, 상위 100개의 웹 사이트의 하나의 특성은 이들이 실제로 실행하는 것보다 훨씬 더 많은 코드를 적재한다는 것이다. 이와 관련하여, 과제는 단순히 코드를 빠르게 실행하는 것이 아니다. 일부 웹 사이트가 궁극적으로 주어진 사용자 또는 사용을 위해 적재하는 코드의 약 15%-20%만을 실행하므로, 적재, 파싱(parsing) 등과 같은 프로세스의 다른 병목(bottleneck)으로 인해 단순히 코드를 빠르게 실행하는 것 이상의 다른 과제가 있다. 적재 및 파싱을 최소화하고, 이용되지 않거나 이용될 가능성이 없는 코드에 대해 행해지는 코드 준비(code preparation)의 양을 감소시키는 목표가 관련되어 있으므로 이는 단순히 자바를 빠르게 실행하는 것과 다른 상황이다.
용어 "핫 스팟(hot spots)"은 실행 중인 프로그램에서 자주 사용되는 기능에 대한 특유한 용어이다. 그러나, 본 명세서의 다양한 실시예에서 다루어지는 문제는 그들이 마크업 페이지를 수신하는 것에서부터 웹 페이지를 제공하고 요청된 기능을 실행하는 것에 이르는 전체 과정을 통해 코드 준비를 회피하는 것, 예를 들어 적재를 회피하거나 지연시키고, 파싱을 회피하거나 지연시키고, 컴파일을 회피하거나 지연시키며, 실행 코드의 최적화를 회피하거나 지연시키는 것에 관련되어 있다는 점에서 광범위하다. 따라서, 본 개시는 준비와 관련된 지연의 감소와 함께 프리젠테이션 콘텐츠를 사용자에게 표시할 수 있게 하기 위해 웹 페이지 요청에 응답하여 네트워크로부터 수신된 마크업 콘텐츠에 참조된 스크립트 코드와 같은 프리젠테이션 콘텐츠에 참조되거나 수신된 스크립트 코드의 준비를 조정하는 것에 관한 것이지만 이제 한정되지는 않는다.
따라서, 본 출원에 제시된 다양한 실시예에서, 예를 들어, 가능한 한 빨리 마크업 문서와 관련된 UI를 제공하기 위해 가능한 한 코드를 적게 준비하고, 가능한 많이 적재, 파싱, 해석 등을 연기하며, 예를 들어, 코드가 실제로 요청되거나 어떤 조건이 충족될 때까지 스내피(snappy) UI의 프레젠테이션을 방해하는 어떤 항목에 대한 다양한 코드 준비 단계 또는 하위 단계를 연기하는 목표를 가지고 코드 준비가 감소된다.
아울러, 해석 또는 실행 중에 코드의 관찰을 통해, 일반적인 실행 경로 케이스가 코드에 대해 결정될 수 있는 경우에, 아래에 더욱 상세히 제시되는 다양한 실시예에서, 네이티브 코드의 두 버전은 일반적인 경우에 하나가 최적화되거나 개선되는 상태로 유지되며, 여기서 다른 버전은 일반적이지 않은 경우에만 사용된다. 이러한 개념은 네이티브 코드의 두 개 초과 버전 및 관련된 사용 케이스로 확장될 수 있고, 여기서 전환 비용(switching cost)보다 더 중요한 두 개 초과 사용 케이스를 유지하는 데에 효율성이 있다.
아래에 더욱 상세히 제시되는 또 다른 실시예에서, 하나의 코어 또는 코어의 세트에 대한 정보를 제공하기 위한 UI 스레드를 유지하고 다른 코어 또는 코어의 세트에 대한 코드 준비 프로세스의 상술한 최적화 및 관리를 지팅(jitting)하거나 적용하는 것을 수행함으로써 준비되는 정보에 응답하여 정보의 디스플레이에 우선 순위를 부여하는 방식으로 다수의 코어가 사용될 수 있다. 이와 관련하여, 작업 요청과 같은 데이터 구조는 수정된 네이티브 코드를 생성하는 최적화 및 관리 코어와 가능한 한 빨리 사용자에 대한 웹 사이트의 디스플레이를 실행하는 UI 코어 사이에서 정보를 공유하기 위해 유지될 수 있다. 더욱이, 다양한 실시예에서, UI 코어에는 코드의 대안적인 부분이 주어진 환경 동안에 실행하기 위해 이용할 수 있다는 통지(notice)가 제공됨으로써, 코드의 대안적인 부분은 UI 코어에 의해 현재 실행하는 코드의 간섭없이 UI 코어에 의한 실행을 위해 스왑 인(swap-in)될 수 있도록 한다.
다른 실시예 및 다양한 비제한적 예, 시나리오 및 구현은 아래에서 더욱 상세히 설명된다.
콘텐츠의 고속 프레젠테이션을 위한 스크립트 코드의 연기 및 최적화된 코드 준비
상술한 바와 같이, 본 명세서에 제공된 다양한 실시예에서, 예를 들어, 가능한 한 빨리 마크업 문서와 관련된 UI를 제공하기 위해 가능한 한 코드를 적게 준비하고, 가능한 많이 적재, 파싱, 해석, 최적화 등을 연기하고, 예를 들어,나중에 또는 실제로 요청될 때까지 스내피 UI의 프레젠테이션을 방해하는 어떤 항목에 대한 다양한 코드 준비 단계 또는 하위 단계를 연기하는 비제한적 목표를 가지고 코드 준비는 감소되거나 연기된다.
도 1은 다단계 코드 준비 프로세스 중 하나 이상의 단계에 적용하고, 예를 들어 노력 없이 코드 등을 최적화하기 위해 코드의 실행을 부분적으로만 파싱하고, 파싱하고, 해석하며, 모니터링하는 노력의 레벨을 결정하기 위한 예시적인 방법을 도시한 흐름도이다. 100에서, 스크립트 코드는 컴퓨팅 장치의 스크립트 엔진에 의해 수신되며, 스크립트 코드는 컴퓨팅 장치의 브라우저 애플리케이션에 의해 수신된 마크업 문서에 포함되거나 참조된다. 110에서, 노력의 레벨은 스크립트 엔진에 의해 스크립트 코드에 적용된 다단계 코드 준비 프로세스 중 적어도 하나의 단계에 적용하도록 결정된다. 노력의 레벨의 결정은 120에서 스크립트 코드의 적어도 일부가 어느 정도 마크업 문서의 표시와 관련하여 브라우저 애플리케이션에 의해 호출되는지의 예측 또는 관찰에 기초하여 노력의 레벨을 결정하고, 130에서 마크업 문서의 표시와 관련하여 브라우저 애플리케이션에 의해 스크립트 코드의 일부의 과거 사용에서 관찰된 패턴에 기초하여 노력의 레벨을 결정하거나, 120 및 130 둘 다를 수행하는 것을 포함한다.
예를 들면, 도 2에 도시된 바와 같이, 코드를 완전히 파싱하는 대신에 코드를 수신한 후의 초기 단계로서, 선택적으로 적은 노력이 적용될 수 있다. 예를 들면, 파싱이 수행되지 않을 수 있거나, 부분 파싱이 예를 들어 브레이스 매칭(brace matching)으로 단지 기능의 시작 및 끝을 결정함으로써 수행될 수 있다. 예를 들면, 브레이스 매칭으로, 스크립트 엔진은 코드(200)를 수신하고, 브라우저 애플리케이션에 의해 호출되는 기능이 발견될 때까지 N 기능 Methodl, Method2, Method3, Method4,...MethodN의 경계가 부분적으로 파싱 코드(202)인 경우를 결정할 수 있다. 예를 들면, 코드(202)의 Method4가 실제로 호출되는 경우, 스크립트 엔진은 단지 Methodl, Method2 및 Method3의 시작 및 끝을 결정한 파싱 및 해석된 Method4(204)를 생성하는 파싱 및 해석 Method4를 시작할 수 있다. 따라서, 파싱 및 해석은 코드 준비 단계의 예이며, 여기서 이러한 노력의 레벨은 노력의 레벨의 특정 결정이 나타낼 수 있는 바와 같이 더욱 많은 자원을 가진 높은 우선 순위 코드 및 자원이 거의 없는 낮은 우선 순위 코드를 취급하기 위해 결정되고 적용될 수 있다.
해석 중에, 스크립트 엔진은 또한 예를 들어 Method4의 메모리 사용을 개선하거나 Method4를 더욱 효율적으로 행함으로써 Method4를 수행하도록 생성된 실행 가능 코드를 향상시키기 위해 Method4의 특성을 관찰할 수 있다. 예를 들면, 스크립트 엔진은 많이 실행하는 Method4에서 루프가 있다고 판단하고, 더욱 최적화 자원을 이 루프에 적용할 수 있거나, 스크립트 엔진은 어떤 변수의 타입이 예측 가능하거나 결정적으로 코드에 대한 정수라고 판단할 수 있으며, 어느 경우에 더욱 효율적인 표현이 사용될 수 있다. 이와 관련하여, 동적 프로그램이 실행 시에 서로 다른 타입을 수행하는 변수를 가질 수 있지만, 프로그래머는 그럼에도 불구하고 디자인 또는 표현의 단순성을 위한 패턴으로 코드를 개발하는 경향이 있으며, 여기서 예를 들어 프로그래머는 지속적으로 정수를 저장하는 변수를 사용하거나, 대신에 예측 가능하거나 결정적으로 문자열인 다른 변수를 사용한다. 이와 관련하여, 해석 중에, 스크립트 엔진은 이러한 패턴을 관찰하여, Method4를 위한 실행 가능 코드(206)의 생성/컴파일을 위한 코드 준비를 단순화할 수 있다.
추가적인 동작으로서, 다른 실시예에서 아래에 더욱 상세히 설명되는 바와 같이, 실행 가능 코드(206)의 동작은 코드의 실행 동안에 또한 관찰될 수 있으며, 이 경우에 코드가 통상적인 경우에 실행하는 방식에 대한 추가의 관찰이 행해질 수 있고, 미래의 실행 또는 미래의 실행의 일부를 위해 실행 가능 코드(206)를 교체할 수 있는 수정된 실행 가능 코드(208)의 형태로 실행 가능 코드(206)에 대한 추가의 수정이 행해질 수 있다. 따라서, 다양한 실시예에서, 코드 준비의 여러 단계, 예를 들어, 파싱, 해석, 컴파일, 실행 또는 어떤 단계 중 하위 단계 중 하나에서, 이러한 활동의 각각이 노력의 레벨이 적용될 수 있는 다양한 코드 준비 단계로 분할될 수 있으므로, 노력이 레벨이 결정될 수 있으며, 노력의 레벨이 즉석 자원을 요구하지 않는 경우에, 관련된 코드 준비 단계 또는 하위 단계는 연기될 수 있으며, 사실상 실제로 브라우저 애플리케이션에 의해 요청되거나 실제로 브라우저 애플리케이션에 의해 가까운 미래에 요청될 가능성이 있는 코드 준비로 즉석 자원을 할당할 수 있다.
따라서, 일 양태에서, 코드 준비는 코드 준비의 다양한 단계 및 하위 단계 동안에 어디에서나 가능하게 연기된다. 이것은 네이티브 프로세서 코드로의 스크립트 코드의 변환을 간단히 바로 연기하지 않고, 본 명세서에 설명된 다양한 실시예가 파싱, 해석, 바이트코드의 생성 등, 즉 주어진 코드에 적용되는 노력의 관련된 레벨에 기초한 코드 준비의 어떤 단계 또는 하위 단계를 연기한다는 점에서 더욱 광범위하게 적용할 수 있다.
상술한 바와 같이, 현재 설명된 실시예는 용어 '핫 스팟'의 전형적인 특유의 사용보다 광범위하며, 이러한 '핫 스팟'은 핫 기능(예를 들어, 많은 것을 실행하는 기능)을 관찰하고, 콜드(cold) 기능보다 실행 시에 핫 기능을 준비하는 데에 더 많은 노력을 한다. 이러한 실시예는 코드를 준비하는 단계의 수 N을 고려할 수 있고, 노력의 레벨은 코드의 예측 및 관찰 사용에 기초하여 각 단계에 대해 결정될 수 있다. 아울러, 노력의 다른 레벨이 적용될 수 있는 주어진 단계의 여러 하위 레벨이 있을 수 있다.
이것은 제각기 하위 단계(302, 304 및 306), 312, 314 및 316), 및 (322, 324 및 326)의 세트를 갖는 코드 준비의 3 단계(300), (310) 및 (320)를 도시한 도 3의 블록도에 도시된다. 이와 관련하여, 노력의 서로 다른 레벨은 예를 들어 예측된 코드 사용 또는 실제 코드 사용의 관찰에 기초하여 서로 다른 단계 및/또는 하위 단계에 할당될 수 있다. 예를 들면, 단계(300, 310 또는 320)와 같은 코드 최적화 단계를 위한 하위 단계 레벨에서의 예시적인 최적화 기술은 루프 불변 코드 모션 분석(loop invariant code motion analysis), 일반적인 자기 표현 제거(common self expression elimination), 상수 전파(constant propagation)를 포함할 수 있다.
3 단계가 도 3에서 제각기 3개의 하위 단계로 도시되지만, 어떤 계층적 관계에 따라, 또는 노력의 레벨이 코드 준비 프로세스의 주어진 브랜치 또는 노드에 할당될 수 있는 어떤 다른 임의의 또는 선택적 코드 준비 프로세스에 따라 다수의 단계 및 하위 단계가 대안적 실시예에 대해 고려된다는 것이 주목된다. 예를 들면, 다른 비제한적 예로서, 스크립트 엔진은 "웜(warm)" 코드에서 총 10개의 단계 중 3개의 단계를 실행하고, "콜드(cold)" 코드에서는 총 10개의 단계 중 1개의 단계만을 실행하지만, 가장 핫 코드의 하위 세트에서는 모든 10개의 단계를 실행하도록 결정할 수 있다. 다시 말하면, 코드 준비 프로세스의 다수의 단계에 대해, 노력의 레벨은 얼마나 많은 코드가 실행 프로그램, 및 코드 및 이의 사용에 관한 정보에 의해 사용되는지에 기초하는 시간의 함수로서 네이티브 머신 명령어의 가장 효율적인 시퀀스를 발할 시에 조정되거나 맞추어질 수 있다.
따라서, 코드 준비 단계 또는 하위 단계의 연기 이외에, 본 명세서에서의 다양한 실시예는 자원이 이용 가능하게 되거나, 코드의 실행에 대한 예측 또는 실제 관찰에 기초하여 코드 또는 기능의 주어진 세트를 최적화하는데 전념하게 때 시간에 걸쳐 대안적인 코드를 생성하는 것을 설명한다. 일례로서, 뉴욕 타임즈의 온라인 사이트와 같은 높은 이용 웹 사이트와의 평균 사용자 경험은 약 5-10분일 수 있지만, 스크립트 엔진이 뉴욕 타임즈의 핵심(core) 기능의 대부분, 예를 들어, 페이지를 배치하고, 스타일 정보를 인출하며, 데이터를 인출하는 방법 등을 관찰하는 사용자의 관점에서 일부 시간만이 걸린다. 이와 관련하여, 뉴스 페이지 등을 비교적 신속히 배치하는 많은 방법이 없으며, 스크립트 엔진은 공통 코드 패스(common code pass)가 뉴욕 타임즈에 대한 기사를 읽기 위한 것을 완전히 또는 대부분 관찰하여, 동일하거나 추가의 기사를 읽기 위한 대안적인 코드를 생성하기 시작할 수 있다.
도 4는 실행의 서로 다른 조건에 기초하여 코드에 대한 대안적인 루프 본체의 생성을 예시하는 블록도이다. 예를 들면, 실행의 조건(420)에 따라, 루프 본체(410), 루프 본체(412) 또는 루프 본체(414)는 현재 조건에 적용하기 위해 가장 빠르거나 그렇지 않으면 보다 효율적일 수 있다. 따라서, 루프 본체(410)를 가진 실행 가능 코드(400), 루프 본체(412)를 가진 실행 가능 코드(402), 및 루프 본체(414)를 가진 실행 가능 코드(404)는 각각 사전에 생성되거나, 루프 본체(410, 412 또는 414)는 제각기 적절한 조건 CI, C2 또는 C3에 대한 대안적인 본체를 실행하도록 프리젠테이션 스레드에 의해 처리되는 기존의 코드로 스왑 인 또는 스왑 아웃될 수 있다. 따라서, 단독 또는 조합하여 조건 CI, C2 또는 C3을 생성하는 어떤 사전 정의된 조건 A, B, C 등에 대해, 서로 다른 루프 본체는 코드의 실행의 효율을 향상시키기 위한 노력의 결과로서 스왑 인될 수 있다. 이러한 예에서, 루프 본체의 실행은 대안에 걸쳐 최적화되지만, 현재 설명된 실시예는 최적화, 또는 코드 또는 루프 본체와 다른 코드을 스왑 인 또는 스왑 아웃하는 다른 방식에 적용할 수 있다.
대안적인 코드의 생성의 추가의 비제한적인 예로서, 결정될 수 있는 경우에, 코드의 사용을 예측하거나 실제로 코드의 실행을 관찰한 결과로서, 시간의 95% 이상, 정수는 주어진 데이터 항목이거나 이에 대해 저장되고 나서, 예를 들어 x86 프로세서로 직접 사용하기 위해 네이티브 정수 레지스터 포맷을 사용하는 최적화된 네이티브 코드가 생성될 수 있으며, 따라서 시간의 대부분에 발생하는 이러한 시나리오 동안, 최적화된 네이티브 코드가 사용될 수 있다. 드문 경우가 시간의 5% 미만에 발생할 때, 변수는 특정 경우에 스왑 인될 수 있는 네이티브 코드의 다른 버전을 가진 부동소수점(float)(또는 네이티브 정수 레지스터 포맷보다 덜 효율적인 어떤 것)으로 타이핑될 수 있다.
도 5는 동적 타이핑에 기초하여 동적 코드 생성 및 실행 중에 코드 스와핑의 다른 비제한적 예를 도시한다. 이와 관련하여, 예를 들어, 해석 동안 코드(500)의 특성을 관찰함으로써 또는 실행 동안 코드(500)를 관찰하는 결과로서, 공통 코드 경로 또는 경로의 세트가 있는 것으로 판단될 수 있는 경우에, 공통 코드 경로에 적절한 네이티브 코드(502) 또는 다른 대안이 생성될 수 있고, 코드(504)는 덜 일반적인 경우가 실제로 발생될 경우에 스왑 인될 수 있다. 네이티브 코드의 서로 다른 사용 경우에 적용하기 위해 최적화된 네이티브 코드의 서로 다른 버전에 스와핑 주변의 이러한 양태는 아래에서 보다 상세히 설명된다. 예를 들면, 아래에서 보다 상세히 설명되는 다른 실시예에서, 휴리스틱(heuristics)은 코드에 시간 컴파일러를 적용하여, "지트(jitted)" 코드를 실행하거나, 코드에 대한 상황의 주어진 세트 하에 코드를 간단히 해석할 지의 여부의 결정에 적용된다.
이와 관련하여, 도 4 및 도 5는, 코드 생성 프로세스가 코드 준비 단계 및 하위 단계의 지연에 의해 안내될 뿐만 아니라, 실행의 해석 또는 관찰을 통해, 코드 자체에 관해 보유된 다양한 정보 레벨에 의해 통지받아, 대안적인 코드가 모든 경우에 코드를 간단히 대체할 수 있는 경우에 대안적인 코드를 생성할 뿐만 아니라, (예를 들어, 그 후 브라우저 애플리케이션에 의해 주어진 기능 호출에 따라 쉽게 스왑 인 또는 아웃될 수 있는 서로 다른 루프 본체를 생성하는 대안적인 상황 동안에 대안적인 코드를 생성한다는 점에서 본 명세서에 설명된 다양한 실시예의 다른 양태를 도시한다.
따라서, 상술한 바와 같이, 코드의 동작은 추론되거나 관찰되어, 서로 다른 상황, 예를 들어 일반적인 경우 대 드문 경우에 대해 서로 다른 코드의 생성으로 이어질 수 있고, 일반적인 경우에 대한 대안을 수행하여, 최소 공통 분모(lowest common denominator)의 경우의 제약없이 전체 성능을 향상시킬 수 있다. 따라서, 코드 생성을 위한 지능형 선택은 예를 들어 코드가 예측 가능하게 또는 결정적으로 정수의 배열로서 변수를 정의하는 것으로 나타난다는 것을 코드에 대한 정보에 의해 통보받을 수 있으며, 이 경우에 그것이 정수의 배열인지를 확인하는 루프의 상부에서 빠른 검사를 수행하는 코드가 생성될 수 있고, 그렇게 추정하고, 정수의 배열에 맞추어진 더욱 효율적인 루프를 이용하는 것이 구성된다.
도 6은 브라우저 애플리케이션(630)과 스크립트 엔진(640) 사이의 예시적인 교환을 예시한 흐름도이다. 브라우저 애플리케이션(630)에 의해 수신된 스크립트 코드(660)는 스크립트 코드(660)의 중요성에 대한 어떤 우선 순위 정보없이 스크립트 엔진(640)으로 전송된다. 600에서, 스크립트 엔진(640)은 스크립트 코드(660)의 루프 본체 또는 루프 본체의 사용을 분석한다. 610에서, 수정된 루프 본체는 어떤 조건 하에 사용, 예를 들어, 스크립트 코드(660)의 일반적인 사용 경우를 위한 최적화된 코드에 대해 생성될 수 있다. 620에서, 루프 본체는 충족되는 조건의 세트에 응답하여 수정된 루프 본체로 대체될 수 있거나, 대안적으로, 일반적인 사용 경우가 충족되는지 확인하고, 결과로서 루프 본체 또는 수정된 루프 본체를 실행하도록 루프 본체의 상부에서 검사가 행해질 수 있다. 대응하는 실행 가능 코드(670)는 실행을 위한 브라우저 애플리케이션(630)으로 반환된다.
이와 관련하여, 파싱되고, 생성되며, 최적화될 낮은 우선 순위 코드를 기다리지 않고 정보를 사용자에게 고속으로 제공하는 목표로 스크립트 엔진의 제한된 코드 생성 자원을 보내는 위의 기술의 적용에 대해서는 다음의 비제한적인 예를 참조하여 더 설명된다.
먼저, HTML 또는 DTHML과 같은 마크업 파일은 스타일 시트, JavaScript 파일 등을 가진 브라우저 애플리케이션에 의해 수신된다. 브라우저 애플리케이션은 마크업 파일의 서로 다른 부분을 분리한 후, JavaScript, 또는 마크업에서 동시 연결로 다양한 서로 다른 부분에 대해 하나로 정의된 다른 파일을 다운로드하도록 진행한다. 다양한 서로 다른 부분이 수신될 때, 브라우저 애플리케이션은 어떤 주어진 부분의 우선 순위 또는 중요성에 대한 어떤 정보없이 JavaScript 파일을 JavaScript 엔진으로 전송한다. 타이밍의 문제로, 스크립트 엔진은 또한 코드의 주어진 부분을 실행할 준비를 하기 위해 주문될 수 있다. 그러나, 코드의 주어진 부분을 실행하기 위한 요청은 브라우저 애플리케이션에 의해 코드를 수신한 단지 1ms 내에서 일어날 수 있고, 대응하는 코드를 생성하기 위해 30-40ms가 걸리고, 표시될 UI 경로에서는 다른 5ms가 걸릴 경우, 이러한 지연은 합산되고 잠재적으로사용자 경험에 영향을 미칠 수 있다. 따라서, 상술한 바와 같이, 지능(intelligence)이 코드 준비 단계 또는 하위 단계의 연기 또는 회피에 적용될 수 있는 경우에 유리하다. 예를 들면, 인간의 시각 및 인지 평가의 문제로서, 100ms 이상의 지연은 현저한 지연이 된다.
따라서, 다른 예로서, 주어진 코드에 대해, 스크립트 엔진은 대신 기능 경계가 있는 곳을 살펴보는 데에 1-2ms를 사용할 수 있지만, 아직 어떤 파싱을 시작하지 않으며, 스크립트 엔진은 "parse me later" 스터브(stub)를 코드에 삽입하여 1-2ms만 전달한 후에 다시 전달한다. 그 후, 브라우저 애플리케이션이 예를 들어 코드의 기능 F를 호출하기를 원할 경우, 여전히 전체 코드를 파싱하는 것을 방지하면서 다른 1-2ms는 코드의 기능 F을 파싱하고 실행하는 데에 사용될 수 있다.
상술한 다른 실시예에 따르면, 스크립트 엔진은 코드의 기능 F를 위한 코드를 파싱하고 생성할 동안에 관찰할 수 있는 예가 더 사용될 수 있으며, 변수 V는 예측 가능하게 또는 결정적으로 정수인 것처럼 나타나거나, F를 몇 번 실행한 후, V는 예측 가능하게 또는 결정적으로 정수인 것이 확인될 수 있으며, 그 후 스크립트 엔진은 정수로서 V의 표현으로 전문화된 코드를 생성할 수 있다. 이와 관련하여, 스크립트 엔진은 지금까지 무슨 일이 일어났는지 명상적으로 관찰하면서 일반적인 경우에서 일어나는 보다 빠르고 더욱 효율적인 코드의 생성을 향해 더 발전하는 것으로 가능한 한 늦게 요구되는 것에 응답하려고 시도한다.
본 개시물의 다른 양태에서, 다수의 코어는 한편 코어 생성의 상술한 관리 및 최적화 사이의 균형을 달성하고 다른 한편 완료하기 위한 관리 및 최적화를 기다리지 않고 UI를 사용자에게 신속히 제공하는 데 사용된다. 따라서, 다양한 실시예에서, 최적화 및 관리는 (마우스 클릭 등과 같은 입력에 응답하여, 즉시 관련된 코드를 실행하며, 예를 들어, 이에 따라 입력에 응답하여 뷰(view)를 변경하는) 메인 UI 스레드와 다른 스레드에서 일어나지만, 다른 프로세싱 코어는 상술한 지능형 코드 생성 실시예 중 어느 하나에 기초하여 대안적인 코드를 동시에 생성할 수 있다.
이와 관련하여, 다양한 실시예에서, 마크업 문서의 렌더링을 구동하는 UI 코어와 코드의 생성을 최적화하는 최적화/관리 코어 사이에는 균형 프로세스가 적용된다. 일 실시예에서, 최적화/관리 코어는 대안적인 네이티브 코드를 생성하는 최적화/관리 코어와, 사용자에게 웹 사이트를 렌더링하는 UI 코어 사이에서 정보를 공유하기 위한 데이터 구조를 관리한다. UI 코어가 빠른 프레젠테이션에 초점을 맞추어, 실시예에서 일반적으로 사용자가 직면하므로, UI 코어가 이용할 수 있게 되지만, 대기하지 않고, 즉, 활동을 둔화시키지 않고 웹 페이지를 보여주는 활동으로 대안 코드를 스와핑할 수 있게 되는 것처럼 코드의 주어진 부분의 대안 또는 최적화된 버전을 실행되도록 공유 메커니즘을 포함한다. 이와 관련하여, 아래에 다양한 실시예에서 설명되는 바와 같이, 코드의 실행 중에 대안 코드와의 오버라이팅(overwriting) 코드와 관련된 어떤 문제를 피하는 메커니즘이 제공될 수 있다.
일 실시예에서 설명된 바와 같이, 균형 프로세스에 대한 비대칭 디자인은 UI 코어가 대기하지 않고 정보를 사용자에게 표시하는 태스크로 계속할 수 있도록 최적화/관리 코어가 작업 큐의 유지 보수의 부담, 코드를 스왑 인 및 아웃하는 조정, 배경에서의 코드의 생성을 확실히 처리한다.
비제한적인 일 구현에서, 기능별로 구현되는 function_info이라 하는 기능으로 호출하거나 검사함으로써, UI 스레드는 호출할 네이티브 엔트리 포인트가 있는지를 검사할 수 있으며, 있을 경우, UI 스레드는 네이티브 엔트리 포인트로 호출한다. 네이티브 엔트리 포인트는 코드 생성의 다양한 단계에서 코드에 대한 스터브일 수 있으며, 예를 들어 네이티브 엔트리 포인트는 "generated code" 스터브, 또는 코드의 파싱에 이르는 "parse me" 스터브, 또는 "call the interpreter to run the code" 스터브일 수 있다. 이와 관련하여, UI 스레드는 스터브의 콘텐츠에 불가지론(agnostic)적이고, 스터브 호출에 따라 그때에 거기에 있는 것을 실행하도록 간단히 진행한다. 대안 코드가 생성될 수 있을 때, UI 스레드가 코드를 통과한 다음에, 대안 코드는 스터브 검사에 의해 기존의 코드를 교체할 것이며, 즉, 다음 통과는 UI 스레드가 새 주소를 나타내는 "generated code" 스터브를 통해 대안 코드로 점프하도록 할 것이다.
예를 들면, 일 실시예에서, 초기 통과 시에 생성된 코드를 향해 점진적으로 이동하는 코드로서, 중요하지 않은 코드는 파싱되지 않지만, "parse me" 스터브는 다음 통과 시나 코드가 UI 스레드에 의해 다음에 접하게 될 때, 코드가 파싱되도록 삽입된다. 그 후, 다음 시간에 코드는 호출되고, 바이트코드는 생성된 후, 인터프리터는 바이트코드를 실행하기 위해 호출된다. UI 코어는 또한 로크하지 않고 작업 항목을 일렬로 세우는 방식인 로크 프리 큐(lock free queue)를 가진 작업 항목을 드롭 오프(drop off)할 수 있다. 이와 관련하여, 이러한 큐가 어떻게 구성되는지의 휴리스틱, 코드할 무엇을 할 때에 대한 우선 순위, 파싱, 컴파일 등에 넣는 얼마나 많은 노력 및 이유가 아래에 상세히 설명된다. 따라서, 많은 작업은 일반적인 웹 페이지 및 애플리케이션 시나리오를 인식하고, 가장 효과적인 곳으로 배경 코어(최적화/관리 코어)의 자원을 보내는 사용자에 의한 지식없이 배경에서 일어나고 있다.
도 7은 제 1 코어 또는 코어의 세트에 의해 처리되는 UI 스레드(750) 및 제 2 코어 또는 코어의 다른 세트에 의해 처리되는 JIT 스레드(760)가 인터프리터에 의해 해석되는 해석된 코드(770)를 실행할 때 또는 (JIT 컴파일러를 통해 코드를 통과시키는) 코드를 "지트(jit)하여 지트된 코드(780)를 실행할 때에 대해 상술한 균형을 달성하는 예시적인 구현을 도시한다.
썽크(thunk)와 같은 스터브의 사용의 일례로서, 상술한 바와 같이, 이 경우에는 처음에 각 썽크에 NULL 값이 할당될 수 있고, 값이 NULL이면, UI 스레드(700)는 해석된 코드(770)를 사용하도록 진행할 수 있지만, 필드가 NULL이 아니면(즉, 지트된 코드를 가리키는 주소가 있다면), UI 스레드(700)는 대신에 지트된 코드(780)를 사용할 것이다. 그 동안에, 최적화/관리 코어는 궁극적으로 모드 작업이 행해지지만, 그 동안에 사용자가 모드 코드가 아직 로드, 파싱, 컴파일, 지트되지 않았을지라도 가능한 한 빨리 웹 페이지를 경험하도록 자원 및 시간이 허용할 때 더욱 많은 코드를 지트하려고 계속 시도한다.
이러한 예를 비제한적으로 더욱 상세히 설명하면, 이러한 환경에서 코드를 실행하는 2개의 방식이 있다: 코드는 인터프리터를 통해(일반적으로 더욱 빠르게) 실행할 수 있거나, 코드는 "지트될" 수 있다(지터라 하는 JIT(Just in Time) 컴파일러를 통해 실행할 수 있으며, 이는 일반적으로 더욱 느리다). 인터프리터로 코드의 선형 시퀀스를 해석하는 것은 일반적인 문제로서 코드를 지트하고, 지터의 완료를 기다려 지트된 코드를 실행하는 것보다 더 빠르다. 이와 관련하여, 지터는 최적화된 코드를 형성하기 위해 코드를 통해 여러 번 통과하는 경향이 있다. 따라서, 코드가 많이 사용될 것으로 나타나는 경우에, 여분 코드 준비 시간에도 불구하고 지터를 사용하는 것은 일반적으로 성능을 개선하지만, 코드의 사용이 낮은 경우, 예를 들어, 한번 사용한 경우, 일반적으로 인터프리터를 이용하여 코드를 빠르게 실행하는 것이 성능을 개선한다. 따라서, 다양한 실시예에서, 지트된 코드와 해석된 코드 사이에는 균형이 유지된다.
처음에, UI 스레드에서 인터프리터는 코드를 해석하기 시작하고, JIT 스레드에서 지팅(jitting)을 위한 후보가 식별된다. 예를 들면, 지팅을 잘 수행하는 기능은 코드의 대부분이 루프 내에 있는 작은 기능이다. 따라서, 이러한 기능은 최고의 후보가 휴리스틱의 세트에 기초하여 선택되는 라운드 추정 지팅(round speculative jitting)에 따라 먼저 지트된다. 추정 지팅으로, 호출되는 기능이 지트될 뿐만 아니라 일부 기능은 호출될 가능성 때문에 호출되지 않더라도 지트된다. 그 후, 이러한 기능이 지트되면, 엔트리 포인트는 해석된 코드(770)에서 지트된 코드(780)로 전환된다.
이와 관련하여, 서로 다른 우선 순위의 복수의 큐는 배경(최적화/관리) 코어에 의해 유지된다. 이것의 예는 도 7에 도시되며, 도 7에서, 작업 부하 슬롯(700, 702, ..., 704)을 가진 최고 우선 순위 큐가 유지되고, 작업 부하 슬롯(710, 712, ..., 714)을 가진 제 2 레벨의 우선 순위 큐가 유지되고, 작업 부하 슬롯(720, 722, ..., 724)을 가진 제 3 레벨의 우선 순위 큐가 유지되며, 작업 부하 슬롯(730, 734, ..., 736)을 가진 제 N 레벨의 우선 순위 큐가 유지된다. 예를 들면, 일 실시예에서, 7개의 서로 다른 우선 순위 큐는 높은 우선 순위에서 낮은 우선 순위로 선택된다. 초기 통과 동안, 작업은 마치 수신되는 것처럼 코드의 특성에 따라 슬롯되지만, 초기 통과 동안, 추정 지팅은 아래에 설명되는 바와 같이 어떤 추정 기준을 충족하는 경우에 낮은 우선 순위 큐에 대한 작업을 지정하기 위해 동작할 수 있다. 추정 지팅 후, 예를 들어, 작업 항목(714, 722 및 730)은 지팅을 위한 양호한 후보일 수 있으며, 따라서 지팅은 작업 부하 슬롯(700, 702, ..., 704)의 최고 레벨의 후보 및 추정 프로세스 동안에 선택된 후보를 위해 진행한다.
추정 지팅 라운드 후에, 추가의 지팅은 최고 우선 순위로 시작하지만, 항목의 나머지는 다음과 같이 우선 순위로 퍼진다. 이와 관련하여, 제 3 우선 순위 코드에서 코드 작업 항목(724)에 대해 도 8에 도시된 바와 같이, 코드가 실행될 때마다, 그것은 해석된 코드(770)가 호출될 때마다 우선 순위 레벨로 이동된다. 따라서, 초기 통과 후에, 해석된 코드(770)가 사용될 때마다, 우선 순위는 최고 우선 순위로 행할 때까지 이동한다. 일 구현에서, 제 2 우선 순위 코드가 작업 항목(710)에 의해 도시된 바와 같이 최고 우선 순위로 행할 때, 그것은 실제로 모든 다른 작업의 전면으로 이동되고, 지터는 다음 기회에 이러한 코드를 통해 통과를 시작한다.
결과적으로, 코드가 많이 사용되지만, 초기에 낮은 우선 순위를 사용하고 추정 라운드가 상실하면, 그것은 침투하고 즉시 최적화될 것이다. 코드가 많이 호출되지 않으면, 그것은 빨리 최적화되지 않을 것이다. 모든 최고 우선 순위 항목이 지트되면, 모든 작업 항목이 소비되고, UI 스레드가 그 사이에 감속하지 않고 최적의 코드를 실행할 때까지, 지터는 제 2 우선 순위 항목을 최적화하기 시작할 수 있다.
스크립트 항목에 대한 코드의 생성의 우선 순위를 정하는 방법의 휴리스틱에 관해, 하나의 휴리스틱은 코드가 얼마나 이상한 지이며, 이는 루프인 모든 것을 제외한 코드 크기의 측정이며, 즉 얼마나 많이 루프인가 대 전체 코드 크기의 비율, 또는 반대로, 코드 크기에 대한 루프의 비율이다. 따라서, 기능이 거의 루프이면, 그것은 작은 루프를 가진 기능보다 최적화를 위한 높은 우선 순위이지만, 대부분의 코드는 루프가 아니다.
아울러, 많은 수학적 계산을 행하는 코드는 행하지 않는 코드보다 지트되는 것으로부터 더 많은 혜택을 획득한다. 프로세서의 네이티브 레지스터가 다른 메모리에 별도의 메모리 구조를 설정하는 코드에 비해 매우 빠르다는 점을 이용할 수 있으므로 최적화 작업은 많은 수학적 계산을 수행하는 코드에서 잘 동작한다.
다른 비제한적인 실시예에서, 호출 트리(call tree)는 우선 순위를 알리는데 도움을 주는 스크립트 실행으로 만들어진다. 이와 관련하여, 호출 트리는 무슨 기능이 핫(hot)일 것을 예상하는데 도움을 준다. 예를 들면, 제 1 코드가 예측 가능하게 또는 결정적으로 제 2 코드 전에 실행한다는 것이 언급되면, 그제 2 코드보다 제 1 코드를 우선하는 것이 이해가 된다. 예를 들면, 조건문(if statement)없이 글로벌 기능이 있는 경우, 높은 우선 순위인 경우에 이러한 코드를 실행하는 높은 기회가 있다. 기능 Foo를 포함하는 코드의 비트의 가상의 예로서:
Figure 112014020471340-pct00001
이 경우에, Foo가 호출되는 경우에 Bar가 호출될 것이 명백한 반면에, X가 그 경우가 아니므로, Y는 호출될 수 없으며, 따라서 Bar는 Y보다 최적화를 위한 높은 우선 순위이다. 이러한 휴리스틱을 입력으로서 취하고 상대 우선 순위를 형성하기 위한 많은 서로 다른 방법이 있다. 하나의 방법은 코드의 주어진 부분이 휴리스틱의 선택된 세트를 얼마나 충족하는가에 따라 0 내지 100의 우선 순위 값을 할당하여, 거의 균등하게 큐의 수로 분할되는 것이다.
상술한 바와 같이, 지트된 실행 가능 코드가 이용할 수 있게 되면, 지트된 실행 가능 코드에 대한 주소는 인터프리터 코드 썽크를 통해 삽입된다. 인터프리터 코드 썽크가 여전히 주변에 있으면, 코드 생성이 행해졌거나 행해질려고 하는 지를 판단하도록 검사가 행해지며, 그렇지 않은 경우, 작업 항목은 우선 순위로 올려진다. 지트되었다면, 썽크는 지트된 주소로 대체된다. 다시 말하면, 지트된 코드가 이용할 수 있게 되어, 코드가 지트된 코드를 실행하기 위해 서로 다른 메모리 위치로 점프하기 위해 동작하도록, 예를 들어 UI 스레드를 새로운 코드로 전송하거나 점프하도록 썽크가 나타나지 않고 새로운 메모리 위치로 대체될 때까지, 썽크는 해석된 코드를 사용하는 경우를 식별하는데 도움을 주기 위해 존재한다. 일 실시예에서, 충돌을 방지하기 위하여 최우선 순위 큐의 전면에 작업 항목을 이동할 때에 짧은 로크가 취해질 수 있지만, 리스트에서 항목을 간단히 재위치 결정하므로, 그것은 매우 빠른 최소 로크 시간이다.
상술한 바와 같이, 2개의 코어가 사용되며, 하나는 인터프리터에 대한 것이고 다른 하나는 지터에 대한 것이지만, 추가적인 실시예에서, 3개 이상의 코어가 있을 수 있으며, 즉 하나는 인터프리터에 대한 것이고, 다른 하나는 빠른 지터(덜 철저한)에 대한 것이며, 또 다른 하나는 느린 지터(철저한)에 대한 것이다. 이러한 방식으로, 일부로부터 혜택을 받지만, 완전한 최적화가 아닌 어떤 항목에 대해, 이러한 항목은 중간 단계로 개선된다.
아울러, 보조 코어는 다른 코어에 의해 행해지는 중요한 작업을 방해하지 않도록 웹 사이트의 디스플레이와 관련하여 어떤 다른 객체에 의해 더 이상 사용되지 않거나 참조되지 않는 모든 객체에 대한 모든 가비지 콜렉션(garbage collection)을 수행하는 데 사용될 수 있다.
도 9는 실시예에서 대체를 위한 최적화된 코드를 생성하기 위한 비제한적 프로세스를 예시한 흐름도이다. 900에서, 제 1 프로세싱 코어를 채용하면, 스크립트 코드를 포함하거나 참조하는 마크업 문서가 표시되고, 마크업 문서의 스크립트 코드로 표현된 기능을 가능하게 하는 실행 가능 코드가 생성된다. 910에서, 제 2 프로세싱 코어를 채용하면, 스크립트 코드의 특성에 기초하여, 실행 가능 코드와 다른 대안적인 실행 가능 코드가 선택적으로 생성된다. 920에서, 제 2 프로세싱 코어를 채용하면, 실행 가능 코드는 스크립트 코드의 제 1 프로세싱 코어에 의해 더 실행을 위한 대안적인 실행 가능 코드로 대체된다. 선택적으로, 930에서, 제 3 프로세싱 코어는 더 이상 마크업 문서 및 이의 기능에 사용되지 않는 마크업 문서와 관련된 객체를 위한 메모리를 회수하는 가비지 콜렉션 프로세스를 수행할 수 있다.
도 10은 다양한 실시예에 따라 스크립트 엔진(1040)과 브라우저 애플리케이션(1030) 사이의 상호 작용을 포함하는 예시적인 비제한적 장치(1000)를 도시한 블록도이다. 도시된 바와 같이, 스크립트 코드(1032)를 포함하는 마크업 문서(1034)는 브라우저 애플리케이션(1030)에 의해 수신되고 나서, 본 명세서에서의 하나 이상의 실시예에서 설명된 바와 같이 지능형 코드 생성을 위한 스크립트 엔진(1040)으로 스크립트 코드(1060)를 전송한다. 이와 관련하여, 우선 순위가 스크립트 코드(1060)의 주어진 부분에 대한 코드 생성의 다양한 단계의 최적화에 할당되는 다양한 중간 데이터 구조(1050)가 유지된다. 이러한 구조는 메모리(1010)에 유지되고, 적절한 캐시 메모리(1015)에 캐시될 수 있다. 상술한 바와 같이, 다양한 실시예에서, 다수의 프로세서 코어(1020)는 위에서 하나 이상의 실시예에서 설명된 바와 같이 분업(division of labor)에 따라 실행하여, 별도의 코어로 사용자 경험의 우선 순위를 정한다. 스크립트 엔진(1040)은 궁극적으로 본 명세서에 설명된 다양한 실시예에 따라 최적화 또는 완료의 다양한 레벨에서 실행 가능 코드(1070)를 브라우저 애플리케이션으로 다시 전달한다. 그 사이에 1차 코어는 모든 작업 항목에 대한 작업을 완료하기 위해 스크립트 엔진(1040)을 기다리지 않고 태스크를 완료하자마자 마크업 문서(1044)의 렌더링을 처리하고, 실행 가능 코드(1070)의 출력은 마크업 문서(1044)의 출력(1042)으로 표현된다.
다양한 실시예에서, 어떤 웹 페이지 "핫 스폿(hot spots)", 예를 들어 클라이언트에 의한 높은 상호 작용의 영역에 대한 코드의 생성의 속도를 높이기 위해 별도의 코어를 이용할 수 있는 지능형 컴파일 기술 및 휴리스틱이 가능해진다. 휴리스틱은 예를 들어 주어진 웹 페이지가 사용된 마지막 시간에 관하여 캐시에 정보를 저장함으로써 웹에 대해 맞춤화된다. 예를 들면, 데이터 구조의 웹 캐시는 코드 생성 선택을 안내하는 데 사용될 수 있으며, 결과로서 식별된 핫 스폿에 대한 코드는 더욱 빠르게 행해질 수 있다. 이러한 방식으로, 시간에 걸쳐, 동일한 웹 사이트가 많이 호출되는 경향이 있으므로, 웹 사이트의 해석은 캐시에 보유된 빌트업(built up) 구조를 참조하여 시간이 지남에 따라 개선한다.
일부 성능 결과는 상술한 다양한 실시예 및 기술이 본 명세서에서 설명된 다양한 실시예의 적용없이 이전의 웹 페이지 적재 및 상호 작용에 비해 40-150 배의 속도 향상에 기여하는 것으로 나타났다.
예시적인 네트워크 및 분산 환경
당업자는 본 명세서에서 설명된 동적 코드 생성을 위한 다양한 실시예가 컴퓨터 네트워크의 부분으로서 배치되거나 분산 컴퓨터 환경에 배치될 수 있고, 어떤 종류의 데이터 저장소에 연결될 수 있는 어떤 컴퓨터 또는 다른 클라이언트 또는 서버 장치와 관련하여 구현될 수 있다는 것을 이해할 수 있다. 이와 관련하여, 본 명세서에 설명된 다양한 실시예는 다수의 메모리 또는 저장 유닛을 가진 어떤 컴퓨터 시스템 또는 환경, 및 다수의 저장 유닛에 걸쳐 생성하는 다수의 애플리케이션 및 프로세스에서 구현될 수 있다. 이것은 네트워크 환경 또는 분산된 컴퓨팅 환경에 배치되고 원격 또는 로컬 저장소를 가진 서버 컴퓨터 및 클라이언트 컴퓨터를 가진 환경을 포함하지만, 이에 제한되지 않는다.
분산된 컴퓨팅은 컴퓨팅 장치 및 시스템 간의 의사 소통 교환에 의해 컴퓨터 자원 및 서비스의 공유를 제공한다. 이러한 자원 및 서비스는 정보의 교환, 캐시 저장 및 파일과 같은 객체에 대한 디스크 저장을 포함한다. 이러한 자원 및 서비스는 또한 적재 균형, 자원의 확장, 처리의 전문화 등을 위한 다중 처리 유닛에 걸친 처리 파워(power)의 공유를 포함한다. 분산된 컴퓨팅은 클라이언트가 전체 기업에 혜택을 주기 위해 집단적 파워(collective power)를 활용하도록 하는 네트워크 연결을 이용한다. 이와 관련하여, 다양한 장치는 본 개시물의 다양한 실시예에 설명된 바와 같이 동적 코드 생성을 위한 메커니즘에 참여할 수 있는 애플리케이션, 객체 또는 자원을 가질 수 있다.
도 11은 예시적인 네트워크 또는 분산된 컴퓨팅 환경의 개략도를 제공한다. 분산된 컴퓨팅 환경은 컴퓨팅 객체(1110, 1112) 등, 및 컴퓨팅 객체 또는 장치(1120, 1122, 1124, 1126, 1128) 등을 포함하며, 이는 애플리케이션(1130, 1132, 1134, 1136, 1138) 및 데이터 저장소(1140)에 의해 표현된 바와 같이 프로그램, 방법, 데이터 저장, 프로그램 가능한 논리 등을 포함할 수 있다. 컴퓨팅 객체(1110, 1112) 등, 및 컴퓨팅 객체 또는 장치(1120, 1122, 1124, 1126, 1128) 등은 개인 휴대 정보 단말기(PDA), 오디오/비디오 장치, 휴대폰, MP3 플레이어, 개인용 컴퓨터, 랩톱 등과 같은 서로 다른 장치를 포함할 수 있다는 것이 이해될 수 있다.
각각의 컴퓨팅 객체(1110, 1112) 등, 및 컴퓨팅 객체 또는 장치(1120, 1122, 1124, 1126, 1128) 등은 직간접적으로 통신 네트워크(1142)를 경유하여 하나 이상의 다른 컴퓨팅 객체(1110, 1112) 등, 및 컴퓨팅 객체 또는 장치(1120, 1122, 1124, 1126, 1128) 등과 통신할 수 있다. 도 11에서 단일 요소로서 도시될지라도, 통신 네트워크(1142)는 도 11의 시스템에 서비스를 제공하는 다른 컴퓨팅 객체 및 컴퓨팅 장치를 포함할 수 있으며/있거나, 도시되지 않은 다수의 상호 연결된 네트워크를 나타낼 수 있다. 각각의 컴퓨팅 객체(1110, 1112) 등, 또는 컴퓨팅 객체 또는 장치(1120, 1122, 1124, 1126, 1128) 등은 또한 본 개시물의 다양한 실시예에 따라 제공되는 동적 코드 생성 기술과의 통신 또는 이의 구현에 적절한 API, 또는 다른 객체, 소프트웨어, 펌웨어 및/또는 하드웨어를 이용할 수 있는 애플리케이션(1130, 1132, 1134, 1136, 1138)과 같은 애플리케이션을 포함할 수 있다.
분산된 컴퓨팅 환경을 지원하는 다양한 시스템, 구성 요소 및 네트워크 구성이 있다. 예를 들면, 컴퓨팅 시스템은 로컬 네트워크 또는 널리 분산된 네트워크에 의해 유선 또는 무선 시스템에 의해 서로 연결될 수 있다. 현재, 많은 네트워크는 널리 분산된 컴퓨팅을 위한 인프라를 제공하고, 많은 서로 다른 네트워크를 포함하는 인터넷에 결합되지만, 어떤 네트워크 인프라는 다양한 실시예에서 설명된 바와 같이 동적 코드 생성 시스템에 따라 행해진 예시적인 통신을 위해 사용될 수 있다.
따라서, 클라이언트/서버, 피어 투 피어, 또는 하이브리드 아키텍처와 같은 네트워크 토폴로지 및 네트워크 인프라의 호스트가 이용될 수 있다. "클라이언트"는 관련되지 않은 다른 클래스 또는 그룹의 서비스를 이용하는 클래스 또는 그룹의 멤버이다. 클라이언트는 프로세스, 즉, 대충 다른 프로그램 또는 프로세스에 의해 제공된 서비스를 요청하는 명령어 또는 태스크의 세트일 수 있다. 클라이언트 프로세스는 다른 프로그램 또는 서비스 자체에 관한 어떤 작업 상세 사항을 "알지(know)" 않고 요청된 서비스를 이용한다.
클라이언트/서버 아키텍처, 특히 네트워크 시스템에서, 클라이언트는 일반적으로 다른 컴퓨터, 예를 들어, 서버에 의해 제공되는 공유 네트워크 자원에 액세스하는 컴퓨터이다. 도 11의 예시도에서, 비제한적인 예로서, 컴퓨팅 객체 또는 장치(1120, 1122, 1124, 1126, 1128) 등은 클라이언트로 생각될 수 있고, 컴퓨팅 객체(1110, 1112) 등은 서버로 생각될 수 있으며, 여기서, 어떤 컴퓨터가 상황에 따라 클라이언트, 서버 또는 둘 다로 간주될 수 있을지라도, 서버의 역할을 하는 컴퓨팅 객체(1110, 1112) 등은 클라이언트 컴퓨팅 객체 또는 장치(1120, 1122, 1124, 1126, 1128) 등으로부터 데이터를 수신하고, 데이터를 저장하고, 데이터를 처리하며, 데이터를 클라이언트 컴퓨팅 객체 또는 장치(1120, 1122, 1124, 1126, 1128) 등으로 송신하는 것과 같은 데이터 서비스를 제공한다.
서버는 통상적으로 인터넷 또는 무선 네트워크 인프라와 같이 원격 또는 로컬 네트워크를 통해 액세스 가능한 원격 컴퓨터 시스템이다. 클라이언트 프로세스는 제 1 컴퓨터 시스템에서 활동적일 수 있고, 서버 프로세스는 제 2 컴퓨터 시스템에서 활동적일 수 있으며, 이러한 컴퓨터 시스템은 통신 매체를 통해 서로 통신하며, 따라서 분산된 기능을 제공하고, 다수의 클라이언트가 서버의 정보 수집 기능을 이용하도록 한다. 본 명세서에 설명된 기술에 따라 이용되는 어떤 소프트웨어 객체는 독립적으로 제공되거나, 다수의 컴퓨팅 장치 또는 객체를 통해 분산될 수 있다.
통신 네트워크(1142) 또는 버스가 인터넷인 네트워크 환경에서, 예를 들어, 컴퓨팅 객체(1110, 1112) 등은 다른 컴퓨팅 객체 또는 장치(1120, 1122, 1124, 1126, 1128) 등이 하이퍼텍스트 전송 프로토콜(HTTP)과 같은 다수의 알려진 프로토콜 중 하나를 통해 통신하는 웹 서버일 수 있다. 서버의 역할을 하는 컴퓨팅 객체(1110, 1112) 등은 분산된 컴퓨팅 환경의 특성일 수 있듯이 클라이언트, 예를 들어 컴퓨팅 객체 또는 장치(1120, 1122, 1124, 1126, 1128) 등의 역할을 할 수 있다.
예시적인 컴퓨팅 장치
상술한 바와 같이, 이점으로, 본 명세서에 설명된 기술은 컴퓨팅 시스템에서 동적 코드 생성을 수행하는 것이 바람직한 어떤 장치에 적용될 수 있다. 그래서, 핸드헬드, 휴대용 및 다른 컴퓨팅 장치 및 모든 종류의 컴퓨팅 객체는 다양한 실시예와 관련하여, 즉, 장치의 자원 사용이 바람직하게 최적화될 수 있는 어디에서 사용하기 위해 고려되는 것으로 이해될 수 있다. 따라서, 도 12에서 아래에 설명되는 범용 원격 컴퓨터는 컴퓨팅 장치의 일례일 뿐이다.
필요하지 않지만, 실시예는 장치 또는 객체에 대한 서비스 개발자에 의해 사용하기 위해 운영 체제를 통해 부분적으로 구현되며/되거나, 본 명세서에 설명된 다양한 실시예의 하나 이상의 기능적 양태를 수행하도록 동작하는 애플리케이션 소프트웨어 내에 포함될 수 있다. 소프트웨어는 클라이언트 워크스테이션, 서버 또는 다른 장치와 같은 하나 이상의 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행 가능한 명령어의 일반적인 맥락에서 설명될 수 있다. 당업자는 컴퓨터 시스템이 데이터를 통신하는 데 사용될 수 있는 다양한 구성 및 프로토콜을 가질 수 있으며, 따라서, 특정 구성 또는 프로토콜이 제한적인 것으로 간주되지 않는다는 것을 이해할 것이다.
도 12는 본 명세서에 설명된 다양한 실시예의 하나 이상의 양태가 구현될 수 있는 적절한 컴퓨팅 시스템 환경(1200)의 일례를 예시하고 명백히 상술되었지만, 컴퓨팅 시스템 환경(1200)은 적절한 컴퓨팅 환경의 일례일 뿐이며, 사용 또는 기능의 범위에 대한 어떤 제한을 제시하는 것으로 의도되지 않는다. 컴퓨팅 시스템 환경(1200)은 예시적인 컴퓨팅 시스템 환경(1200)에 도시된 구성 요소 중 어느 하나 또는 조합에 관한 어떤 종속성 또는 요구 사항을 갖는 것으로 해석되지 않아야 한다.
도 12를 참조하면, 하나 이상의 실시예를 구현하기 위한 예시적인 원격 장치는 컴퓨터(1210)의 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(1210)의 구성 요소는 처리 유닛(1220), 시스템 메모리(1230), 및 시스템 메모리를 포함하는 다양한 시스템 구성 요소를 처리 유닛(1220)에 결합하는 시스템 버스(1222)를 포함할 수 있지만, 이에 제한되지 않는다.
컴퓨터(1210)는 통상적으로 다양한 컴퓨터 판독 가능한 매체를 포함하고, 컴퓨터(1210)에 의해 액세스될 수 있는 어떤 이용 가능한 매체일 수 있다. 시스템 메모리(1230)는 판독 전용 메모리(ROM) 및/또는 랜덤 액세스 메모리(RAM)와 같은 휘발성 및/또는 비휘발성 메모리의 형태의 컴퓨터 저장 매체를 포함할 수 있다. 제한이 아니라 예로서, 시스템 메모리(1230)는 또한 운영 체제, 애플리케이션 프로그램, 다른 프로그램 모듈 및 프로그램 데이터를 포함할 수 있다. 추가의 예에 따르면, 컴퓨터(1210)는 또한 제한없이 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, 디지털 다기능 디스크(DVD) 또는 다른 광 디스크 저장소, 자기 카세트, 자기 테이프, 자기 디스크 저장소 또는 다른 자기 저장 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있는 다른 유형 및/또는 비일시적인 매체를 포함할 수 있는 (도시되지 않은) 다양한 다른 매체를 포함할 수 있다.
사용자는 입력 장치(1240)를 통해 명령 및 정보를 컴퓨터(1210)에 입력할 수 있다. 모니터 또는 다른 타입의 디스플레이 장치는 또한 출력 인터페이스(1250)와 같은 인터페이스를 통해 시스템 버스(1222)에 접속된다. 모니터 외에, 컴퓨터는 또한 출력 인터페이스(1250)를 통해 접속될 수 있는 스피커 및 프린터와 같은 다른 주변 출력 장치를 포함할 수 있다.
컴퓨터(1210)는 원격 컴퓨터(1270)와 같은 하나 이상의 다른 원격 컴퓨터에 대한 네트워크 인터페이스(1260)와 같은 논리적 접속을 이용하여 네트워크 또는 분산된 환경에서 동작할 수 있다. 원격 컴퓨터(1270)는 개인용 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 공통 네트워크 노드, 또는 어떤 다른 원격 미디어 소비 또는 송신 장치일 수 있고, 컴퓨터(1210)에 대해 상술한 요소 중 어느 하나 또는 모두를 포함할 수 있다. 도 12에 도시된 논리적 접속은 네트워크(1272), 근거리 통신망(LAN) 또는 광역 통신망(WAN)을 포함하지만, 또한 다른 네트워크/버스를 포함할 수 있다. 이러한 네트워크 환경은 가정, 사무실, 전사적 컴퓨터 네트워크, 인트라넷 및 인터넷에서 일반적이다.
상술한 바와 같이, 예시적인 실시예가 다양한 컴퓨팅 장치 및 네트워크 아키텍처와 관련하여 설명되었지만, 기본 개념은 어떤 네트워크 시스템 및 어떤 컴퓨팅 장치 또는 시스템에 적용될 수 있다.
아울러, 동일하거나 유사한 기능, 예를 들어, 애플리케이션 및 서비스가 본 명세서에 제공된 기술을 이용할 수 있도록 하는 적절한 API, 툴 키트, 드라이버 코드, 운영 체제, 제어, 독립형 또는 다운로드 가능한 소프트웨어 객체 등을 구현하는 다수의 방법이 있다. 따라서, 본 명세서에서 실시예는 API(또는 다른 소프트웨어 객체)의 관점뿐만 아니라, 본 명세서에 설명된 바와 같이 하나 이상의 실시예를 구현하는 소프트웨어 또는 하드웨어 객체로부터 고려된다. 따라서, 본 명세서에 설명된 다양한 실시예는 전체적으로 하드웨어, 부분적으로 하드웨어 및 부분적으로 소프트웨어 뿐만 아니라, 소프트웨어에 있는 양태를 가질 수 있다.
단어 "예시적(examplary)"은 본 명세서에서 예, 경우 또는 예시로서 기능하는 것을 의미하는 데 사용된다. 애매함을 피하기 위해, 본 명세서에 개시된 발명 대상은 이러한 예에 의해 제한되지 않는다. 아울러, "예시적"으로 본 명세서에 설명된 어떤 양태 또는 설계는 다른 양태 또는 설계에 비해 반드시 바람직하거나 유리한 것으로 해석될 필요는 없고, 당업자에게 알려진 동등한 예시적인 구조 및 기술을 배제하는 것을 의미하지도 않는다. 더욱이, 용어 "포함한다" 및 "갖는다" 및 다른 유사한 단어가 사용되는 범위에서, 애매함을 피하기 위해, 이러한 용어는 어떤 추가적 또는 다른 요소를 배제하지 않고 개방형 전이어(open transition word)로서 용어 "포함하는"과 유사한 방식으로 포괄적이도록 의도된다.
상술한 바와 같이, 본 명세서에 설명된 다양한 기술은 하드웨어 또는 소프트웨어, 또는 적절한 경우에 둘 다의 조합과 관련하여 구현될 수 있다. 본 명세서에서 사용된 바와 같이, 용어 "구성 요소", "시스템" 등은 마찬가지로 컴퓨터 관련 엔티티, 하드웨어, 하드웨어 및 소프트웨어의 조합, 소프트웨어, 또는 실행 시의 소프트웨어를 나타내는 것으로 의도된다. 예를 들면, 구성 요소는 프로세서에서 실행하는 프로세스, 프로세서, 객체, 실행 파일(executable), 실행 스레드, 프로그램 및/또는 컴퓨터일 수 있지만, 이에 제한되지 않는다. 예시로서, 컴퓨터에서 실행하는 애플리케이션 및 컴퓨터는 둘다 구성 요소일 수 있다. 하나 이상의 구성 요소는 프로세스 및/또는 실행의 스레드 내에 상주할 수 있고, 구성 요소는 하나의 컴퓨터에 지역화될 수 있으며/있거나 2 이상의 컴퓨터 사이에 분산될 수 있다.
상술한 시스템은 여러 구성 요소 사이의 상호 작용에 대해 설명되었다. 이러한 시스템 및 구성 요소는 이의 구성 요소 또는 지정된 하위 구성 요소, 지정된 구성 요소 또는 하위 구성 요소의 일부, 및/또는 추가적인 구성 요소를 포함할 수 있고, 상술한 것의 다양한 순열 및 조합에 따를 수 있다는 것이 이해될 수 있다. 하위 구성 요소는 또한 (계층적) 부모 구성 요소(parent component) 내에 포함되는 것보다는 다른 구성 요소에 통신 가능하게 결합되는 구성 요소로서 구현될 수 있다. 추가적으로, 하나 이상의 구성 요소는 집계 기능을 제공하는 단일 구성 요소로 조합되거나 여러 개의 별도의 하위 구성 요소로 분할될 수 있고, 관리 층과 같은 어떤 하나 이상의 중간층은 통합된 기능을 제공하기 위해 이러한 하위 구성 요소에 통신 가능하게 결합하도록 제공될 수 있다는 것이 주목될 수 있다. 본 명세서에 설명된 어떤 구성 요소는 본 명세서에 특별히 설명되지 않지만, 일반적으로 당업자에 의해 알려진 하나 이상의 다른 구성 요소와도 상호 작용할 수 있다.
상술한 예시적인 시스템을 고려하여, 설명된 발명 대상에 따라 구현될 수 있는 방법은 다양한 도면의 흐름도의 참조로 이해될 수 있다. 설명의 간략화를 위해, 방법은 일련의 블록으로 도시되고 설명되지만, 일부 블록이 서로 다른 순서로 발생하고/하거나 본 명세서에 도시되고 설명된 것과 다른 블록과 동시에 발생할 수 있음에 따라 다양한 실시예는 블록의 순서에 의해 제한되지 않는 것으로 이해되어야 한다. 비순차적 또는 브랜치된 흐름이 흐름도를 통해 예시되는 경우, 동일하거나 유사한 결과를 달성하는 다양한 다른 분기, 흐름 경로, 및 블록의 순서가 구현될 수 있다는 것이 이해될 수 있다. 더욱이, 도시된 모든 블록이 후술되는 방법을 구현하기 위해 필요로 될 수 없다.
본 명세서에 설명된 다양한 실시예 외에, 다른 유사한 실시예가 이용되거나 거기에서 벗어나지 않고 대응하는 실시예의 동일하거나 동등한 기능을 수행하기 위해 설명된 실시예에 대한 수정 및 추가가 행해질 수 있다는 것이 이해되어야 한다. 또한, 다수의 처리 칩 또는 다수의 장치는 본 명세서에서 설명된 하나 이상의 기능의 성능을 공유할 수 있으며, 마찬가지로, 복수의 장치에 걸쳐 저장이 달성될 수 있다.
따라서, 본 발명은 어떤 단일 실시예에 제한되지 않고, 첨부된 청구범위에 따른 사상 및 범위 내에서 이해되어야 한다.

Claims (24)

  1. 컴퓨팅 장치로서,
    컴퓨터 실행 가능 구성 요소가 저장되어 있는 메모리와,
    상기 메모리에 통신가능하게 연결되어 있으며, 상기 컴퓨터 실행 가능 구성 요소의 실행을 가능하게 하도록 구성된 프로세서를 포함하되,
    상기 컴퓨터 실행 가능 구성 요소는,
    스크립트 코드를 포함하거나 참조하는 마크업 문서를 디스플레이하도록 구성된 브라우저 애플리케이션과,
    상기 스크립트 코드를 수신하고, 런타임에서 상기 스크립트 코드의 부분을 분석하거나 또는 상기 브라우저 애플리케이션에서 상기 스크립트 코드를 실행하는 동안 상기 스크립트 코드의 부분의 사용을 분석하고, 상기 스크립트 코드의 수정된 부분이 상기 스크립트 코드의 상기 부분 대신에 실행될 경우에 상기 스크립트 코드의 상기 부분의 성능이 향상되는 조건 세트를 결정하도록 구성된, 스크립트 엔진을 포함하며,
    상기 조건 세트가 충족될 경우, 상기 스크립트 코드의 상기 수정된 부분이 상기 스크립트 코드의 상기 부분 대신에 상기 브라우저 애플리케이션에 의해 실행되는
    컴퓨팅 장치.
  2. 제1항에 있어서,
    상기 조건 세트가 충족되지 않을 경우,
    상기 스크립트 코드의 상기 부분이 상기 브라우저 애플리케이션에 의해 실행되는
    컴퓨팅 장치.
  3. 제1항에 있어서,
    상기 스크립트 코드의 부분은 상기 스크립트 코드의 루프 본체이고, 상기 스크립트 코드의 상기 수정된 부분은 상기 스크립트 코드의 수정된 루프 본체인
    컴퓨팅 장치.
  4. 제1항에 있어서,
    상기 스크립트 코드의 상기 부분은 상기 스크립트 코드의 변수의 타입과 관련되고, 상기 스크립트 코드의 상기 수정된 부분은 상기 변수의 타입에 대해 최적화되는
    컴퓨팅 장치.
  5. 컴퓨팅 장치로서,
    적어도 두 개의 프로세싱 코어 및 적어도 하나의 메모리를 포함하되,
    상기 적어도 두 개의 프로세싱 코어 중 제1 프로세싱 코어는, 콘텐츠를 디스플레이하도록 마크업 문서를 처리하도록 구성되고, 상기 마크업 문서는 스크립트 코드를 포함하거나 참조하며, 상기 처리는 상기 마크업 문서의 상기 스크립트 코드에 의해 표현된 기능을 인에이블시키는 실행 가능 코드를 생성하는 것을 포함하고,
    상기 적어도 두 개의 프로세싱 코어 중 제2 프로세싱 코어는,
    상기 스크립트 코드의 특성에 기초하여, 상기 제1 프로세싱 코어 상에서의 프로세스와 동시에, 상기 실행 가능 코드와 상이한 대안적인 실행 가능 코드를 선택적으로 생성하고,
    상기 스크립트 코드의 상기 제1 프로세싱 코어에 의한 추가 실행을 위해 상기 실행 가능 코드를 상기 대안적인 실행 가능 코드로 대체하도록 구성된
    컴퓨팅 장치.
  6. 제5항에 있어서,
    상기 실행 가능 코드를 대체하는 것은, 상기 제1 프로세싱 코어가 상기 실행 가능 코드의 현재의 실행과 간섭하지 않고, 상기 실행 가능 코드를 상기 대안적인 실행 가능 코드로 대체하는 것을 포함하는
    컴퓨팅 장치.
  7. 제5항에 있어서,
    상기 실행 가능 코드를 대체하는 것은, 상기 제1 프로세싱 코어에 의한 추가 실행을 위해 상기 대안적인 실행 가능 코드의 주소를 스왑 인(swap in)하는 것을 포함하는
    컴퓨팅 장치.
  8. 제5항에 있어서,
    상기 대안적인 실행 가능 코드를 선택적으로 생성하는 것은 상기 스크립트 코드가 표현되는 우선 순위 작업 큐의 세트에 표현된 상기 스크립트 코드에 할당된 우선 순위에 기초하여 상기 대안적인 실행 가능 코드를 생성하는 것을 포함하는
    컴퓨팅 장치.
  9. 제5항에 있어서,
    상기 제1 프로세싱 코어에 의해 상기 실행 가능 코드를 생성하는 것은 해석된 코드를 생성하는 것을 포함하고,
    상기 제2 프로세싱 코어에 의해 상기 대안적인 실행 가능 코드를 선택적으로 생성하는 것은 JIT(Just in Time) 컴파일러를 이용하여 수정된 코드를 생성하는 것을 포함하는
    컴퓨팅 장치.
  10. 제5항에 있어서,
    상기 제2 프로세싱 코어에 의해 상기 대안적인 실행 가능 코드를 선택적으로 생성하는 것은, 상기 실행 가능 코드의 실행에 적용할 수 있는 상황의 세트에 대해 추론되거나 관찰되는 상기 실행 가능 코드의 동적 변수의 타입에 대해 수정되는 코드를 생성하는 것을 포함하는
    컴퓨팅 장치.
  11. 제5항에 있어서,
    상기 적어도 두 개의 프로세싱 코어는 또한, 상기 적어도 두 개의 프로세싱 코어 중 제3 프로세싱 코어에 의해, 상기 마크업 문서의 디스플레이에 더 이상 사용되지 않는 상기 마크업 문서와 관련된 객체를 위한 메모리를 회수하도록 구성되는
    컴퓨팅 장치.
  12. 방법으로서,
    적어도 하나의 프로세서 및 메모리를 갖는 컴퓨팅 장치의 브라우저 애플리케이션에서, 스크립트 코드를 포함하거나 참조하는 마크업 문서를 디스플레이하는 단계와,
    스크립트 엔진에 의해, 런타임에서 상기 스크립트 코드의 부분을 분석하거나 또는 상기 브라우저 애플리케이션에서 상기 스크립트 코드를 실행하는 동안 상기 스크립트 코드의 부분의 사용을 분석하여, 상기 스크립트 코드의 수정된 부분이 상기 스크립트 코드의 상기 부분 대신에 실행될 경우에 상기 스크립트 코드의 상기 부분의 성능이 향상되는 조건 세트를 결정하는 단계와,
    상기 조건 세트가 충족될 경우, 상기 스크립트 코드의 상기 수정된 부분을 상기 스크립트 코드의 상기 부분 대신에 실행하는 단계를 포함하는
    방법.
  13. 제12항에 있어서,
    상기 조건 세트가 충족되지 않을 경우, 상기 스크립트 코드의 상기 부분을 실행하는 단계를 더 포함하는
    방법.
  14. 제12항에 있어서,
    상기 스크립트 코드의 부분은 상기 스크립트 코드의 루프 본체이고, 상기 스크립트 코드의 상기 수정된 부분은 상기 스크립트 코드의 수정된 루프 본체인
    방법.
  15. 제12항에 있어서,
    상기 스크립트 코드의 상기 부분은 상기 스크립트 코드의 변수의 타입과 관련되고, 상기 스크립트 코드의 상기 수정된 부분은 상기 변수의 타입에 대해 최적화되는
    방법.
  16. 방법으로서,
    적어도 두 개의 프로세싱 코어 중 제1 프로세싱 코어 상에서, 콘텐츠를 디스플레이하도록 마크업 문서를 처리하는 단계 - 상기 마크업 문서는 스크립트 코드를 포함하거나 참조하고, 상기 처리하는 단계는 상기 마크업 문서의 상기 스크립트 코드에 의해 표현된 기능을 인에이블시키는 실행 가능 코드를 생성하는 것을 포함함 - 와,
    상기 적어도 두 개의 프로세싱 코어 중 제2 프로세싱 코어 상에서, 상기 스크립트 코드의 특성에 기초하여, 상기 제1 프로세싱 코어 상에서의 프로세스와 동시에, 상기 실행 가능 코드와 상이한 대안적인 실행 가능 코드를 선택적으로 생성하는 단계와,
    상기 제2 프로세싱 코어에 의해, 상기 스크립트 코드의 상기 제1 프로세싱 코어에 의한 추가 실행을 위해 상기 실행 가능 코드를 상기 대안적인 실행 가능 코드로 대체하는 단계를 포함하는
    방법.
  17. 제16항에 있어서,
    상기 실행 가능 코드를 대체하는 단계는, 상기 제1 프로세싱 코어에 의한 상기 실행 가능 코드의 현재의 실행과 간섭하지 않고, 상기 실행 가능 코드를 상기 대안적인 실행 가능 코드로 대체하는 것을 포함하는
    방법.
  18. 제16항에 있어서,
    상기 실행 가능 코드를 대체하는 단계는, 상기 제1 프로세싱 코어에 의한 추가 실행을 위해 상기 대안적인 실행 가능 코드의 주소를 스왑 인(swap in)하는 것을 포함하는
    방법.
  19. 제16항에 있어서,
    상기 대안적인 실행 가능 코드를 선택적으로 생성하는 단계는 상기 스크립트 코드가 표현되는 우선 순위 작업 큐의 세트에 표현된 상기 스크립트 코드에 할당된 우선 순위에 기초하여 상기 대안적인 실행 가능 코드를 생성하는 것을 포함하는
    방법.
  20. 제16항에 있어서,
    상기 제1 프로세싱 코어에 의해 상기 실행 가능 코드를 생성하는 것은 해석된 코드를 생성하는 것을 포함하고,
    상기 제2 프로세싱 코어에 의해 상기 대안적인 실행 가능 코드를 선택적으로 생성하는 것은 JIT(Just in Time) 컴파일러를 이용하여 수정된 코드를 생성하는 것을 포함하는
    방법.
  21. 제16항에 있어서,
    상기 제2 프로세싱 코어에 의해 상기 대안적인 실행 가능 코드를 선택적으로 생성하는 것은, 상기 실행 가능 코드의 실행에 적용할 수 있는 상황의 세트에 대해 추론되거나 관찰되는 상기 실행 가능 코드의 동적 변수의 타입에 대해 수정되는 코드를 생성하는 것을 포함하는
    방법.
  22. 제16항에 있어서,
    상기 적어도 두 개의 프로세싱 코어 중 제3 프로세싱 코어에 의해, 상기 마크업 문서의 디스플레이에 더 이상 사용되지 않는 상기 마크업 문서와 관련된 객체를 위한 메모리를 회수하는 단계를 더 포함하는
    방법.
  23. 시스템으로서,
    적어도 하나의 프로세서 및 메모리를 포함하며,
    상기 적어도 하나의 프로세서는 제12항 내지 제15항 중 어느 한 항의 방법의 각 단계를 수행하도록 구성되는
    시스템.
  24. 시스템으로서,
    적어도 두 개의 프로세서 및 메모리를 포함하며,
    상기 적어도 두 개의 프로세서는 제16항 내지 제22항 중 어느 한 항의 방법의 각 단계를 수행하도록 구성되는
    시스템.
KR1020147005629A 2011-09-02 2012-08-26 스크립트 코드를 가진 마크업 콘텐츠의 고속 프레젠테이션 기법 KR102006507B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/225,132 US10466989B2 (en) 2011-09-02 2011-09-02 Fast presentation of markup content having script code
US13/225,132 2011-09-02
PCT/US2012/052414 WO2013032959A1 (en) 2011-09-02 2012-08-26 Fast presentation of markup content having script code

Publications (2)

Publication Number Publication Date
KR20140063661A KR20140063661A (ko) 2014-05-27
KR102006507B1 true KR102006507B1 (ko) 2019-10-01

Family

ID=47574775

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147005629A KR102006507B1 (ko) 2011-09-02 2012-08-26 스크립트 코드를 가진 마크업 콘텐츠의 고속 프레젠테이션 기법

Country Status (7)

Country Link
US (2) US10466989B2 (ko)
EP (1) EP2751709A4 (ko)
JP (1) JP6054397B2 (ko)
KR (1) KR102006507B1 (ko)
CN (2) CN102902528B (ko)
HK (1) HK1179369A1 (ko)
WO (1) WO2013032959A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220015107A (ko) * 2020-07-30 2022-02-08 홍익대학교세종캠퍼스산학협력단 성능 개선을 위해 소프트웨어 소스 코드 변경한 후 이를 시각적으로 가시화하는 방법 및 그 장치
KR20220067324A (ko) * 2020-11-17 2022-05-24 홍익대학교세종캠퍼스산학협력단 전력 개선을 위한 소프트웨어 코드 변경 방법 및 그 장치

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10466989B2 (en) 2011-09-02 2019-11-05 Microsoft Technology Licensing, Llc. Fast presentation of markup content having script code
US9015682B1 (en) 2012-03-28 2015-04-21 Google Inc. Computer code transformations to create synthetic global scopes
US20150205585A1 (en) * 2012-06-04 2015-07-23 Google Inc. Delayed compiling of scripting language code
US20140053064A1 (en) * 2012-08-16 2014-02-20 Qualcomm Incorporated Predicting the usage of document resources
US9569342B2 (en) * 2012-12-20 2017-02-14 Microsoft Technology Licensing, Llc Test strategy for profile-guided code execution optimizers
US8930920B2 (en) * 2012-12-31 2015-01-06 Oracle International Corporation Self-optimizing interpreter and snapshot compilation
US9232016B2 (en) * 2013-03-26 2016-01-05 International Business Machines Corporation Undoing sent communications
US9710789B2 (en) 2013-06-04 2017-07-18 SuccessFactors Multi-dimension analyzer for organizational personnel
US9207914B2 (en) 2013-12-20 2015-12-08 Microsoft Technology Licensing, Llc Execution guards in dynamic programming
US9104434B2 (en) 2013-12-20 2015-08-11 Microsoft Technology Licensing, Llc Property accesses in dynamically typed programming languages
US9639382B2 (en) 2014-05-15 2017-05-02 Microsoft Technology Licensing, Llc. Interactive viewer of intermediate representations of client side code
KR102232085B1 (ko) * 2014-10-10 2021-03-25 주식회사 케이티 웹 페이지를 동적으로 제공하는 방법, 웹 서버 및 컴퓨팅 장치
US10389795B2 (en) 2015-10-09 2019-08-20 Microsoft Technology Licensing, Llc Distributed extension execution in computing systems
US10230712B2 (en) 2016-09-12 2019-03-12 Microsoft Technology Licensing, Llc Binary experimentation on running web servers
US10481876B2 (en) 2017-01-11 2019-11-19 Microsoft Technology Licensing, Llc Methods and systems for application rendering
CN106953765A (zh) * 2017-03-31 2017-07-14 焦点科技股份有限公司 一种互联网路径流量数据生成和展现方法
EP3649547A1 (en) * 2017-07-07 2020-05-13 Nchain Holdings Limited Method for compiling from a high-level scripting language to a blockchain native scripting language
US20200186623A1 (en) * 2018-12-11 2020-06-11 Microsoft Technology Licensing, Llc Performant retrieval and presentation of content
CN110308920B (zh) * 2019-05-31 2023-05-12 北京控制工程研究所 一种不影响正常运行的在轨修改星上产品软件的方法
KR102165928B1 (ko) * 2019-12-04 2020-10-14 서울대학교 산학협력단 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법
CN111008019B (zh) * 2019-12-06 2021-07-02 北京百度网讯科技有限公司 小程序的Web化运行方法、装置、设备及介质
US11301218B2 (en) 2020-07-29 2022-04-12 Bank Of America Corporation Graph-based vectorization for software code optimization references
US11256488B1 (en) 2020-07-29 2022-02-22 Bank Of America Corporation Graph-based vectorization for software code optimizations
CN113986322B (zh) * 2021-12-29 2022-03-11 天津联想协同科技有限公司 一种动态修改页面代码的方法、装置及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080235325A1 (en) * 2007-03-20 2008-09-25 Microsoft Corporation Identifying appropriate client-side script references
US20110214016A1 (en) * 2010-03-01 2011-09-01 International Business Machines Corporation Performing Aggressive Code Optimization with an Ability to Rollback Changes Made by the Aggressive Optimizations

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2001233111A1 (en) 2000-02-04 2001-08-14 America Online Incorporated Optimized delivery of web application code
US6658656B1 (en) 2000-10-31 2003-12-02 Hewlett-Packard Development Company, L.P. Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions
WO2002065286A2 (en) 2001-02-12 2002-08-22 Lto Limited Client software enabling a client to run a network based application
US6988240B2 (en) 2002-03-29 2006-01-17 Global Knowledge, Inc. Methods and apparatus for low overhead enhancement of web page and markup language presentations
US7499401B2 (en) 2002-10-21 2009-03-03 Alcatel-Lucent Usa Inc. Integrated web cache
US7228500B2 (en) * 2003-06-13 2007-06-05 Microsoft Corporation Web page rendering priority mechanism
US7617490B2 (en) 2003-09-10 2009-11-10 Intel Corporation Methods and apparatus for dynamic best fit compilation of mixed mode instructions
US8103742B1 (en) 2003-11-24 2012-01-24 Amazon Technologies, Inc. Deferred and off-loaded rendering of selected portions of web pages to incorporate late-arriving service data
US20050155022A1 (en) 2004-01-14 2005-07-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses to identify hot spots
US20050223359A1 (en) * 2004-03-30 2005-10-06 Rao Nagaraju Kodalapura N Techniques for multi-core debugging
WO2006085314A2 (en) 2005-02-11 2006-08-17 Flash Networks Ltd Method and system for improving user experience while browsing
KR100763177B1 (ko) 2005-04-21 2007-10-04 삼성전자주식회사 자바 가상 머신의 명령어 수행 방법 및 그 장치
CN1855052A (zh) 2005-04-25 2006-11-01 罗迪平 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法
US8239939B2 (en) * 2005-07-15 2012-08-07 Microsoft Corporation Browser protection module
US7945853B2 (en) 2005-09-12 2011-05-17 Microsoft Corporation Script markup
CN101263482B (zh) 2005-09-12 2012-07-18 微软公司 脚本标记
US7805670B2 (en) * 2005-12-16 2010-09-28 Microsoft Corporation Partial rendering of web pages
US7689665B2 (en) 2007-04-27 2010-03-30 Microsoft Corporation Dynamically loading scripts
US8079025B2 (en) 2007-06-08 2011-12-13 Apple Inc. Asynchronous load of source dependencies
US10216854B2 (en) 2007-07-26 2019-02-26 International Business Machines Corporation Optimized page script downloads in a component based architecture
US8286189B2 (en) 2007-09-27 2012-10-09 American Express Travel Related Services Company, Inc. System and method for automatically generating computer code for message flows
US8001469B2 (en) 2007-11-07 2011-08-16 Robert Bosch Gmbh Automatic generation of interactive systems from a formalized description language
US8639743B1 (en) 2007-12-05 2014-01-28 Appcelerator, Inc. System and method for on-the-fly rewriting of JavaScript
JP2009211190A (ja) 2008-02-29 2009-09-17 Hitachi Ltd 情報処理装置
US9405555B2 (en) 2008-05-23 2016-08-02 Microsoft Technology Licensing, Llc Automated code splitting and pre-fetching for improving responsiveness of browser-based applications
US8799884B2 (en) 2008-08-13 2014-08-05 Qualcomm Incorporated Software application performance enhancement
BRPI1004942B1 (pt) * 2009-01-19 2020-04-07 Koninl Philips Electronics Nv sistema de processamento de dados, meio legível por computador não transitório, e método para execução de um mecanismo de escrita
CN101706753B (zh) 2009-12-11 2013-04-10 武汉虹信通信技术有限责任公司 一种基于Perl的单元测试装置及方法
US8650426B2 (en) * 2009-12-16 2014-02-11 Qualcomm Incorporated System and method for controlling central processing unit power in a virtualized system
US9003380B2 (en) 2010-01-12 2015-04-07 Qualcomm Incorporated Execution of dynamic languages via metadata extraction
US9626197B1 (en) 2010-07-30 2017-04-18 Amazon Technologies, Inc. User interface rendering performance
US8850574B1 (en) * 2011-02-28 2014-09-30 Google Inc. Safe self-modifying code
US8880991B2 (en) * 2011-04-21 2014-11-04 Qualcomm Innovation Center, Inc. Methods and apparatus for improved browsing performance by precompilation of high-priority JavaScripts in a webpage and delaying the removal of corresponding compiled code
US8285808B1 (en) 2011-05-20 2012-10-09 Cloudflare, Inc. Loading of web resources
US10466989B2 (en) 2011-09-02 2019-11-05 Microsoft Technology Licensing, Llc. Fast presentation of markup content having script code
US8819649B2 (en) * 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
US9037636B2 (en) 2012-01-19 2015-05-19 Microsoft Technology Licensing, Llc Managing script file dependencies and load times
US11233841B2 (en) 2013-03-15 2022-01-25 Yottaa, Inc. Systems and methods for configuration-based optimization by an intermediary
US20150088970A1 (en) 2013-09-20 2015-03-26 Yottaa Inc. Systems and methods for managing loading priority or sequencing of fragments of a web object
US9785452B2 (en) 2013-10-09 2017-10-10 Cisco Technology, Inc. Framework for dependency management and automatic file load in a network environment
CN105094857B (zh) 2014-04-23 2018-09-25 国际商业机器公司 用于应用加载的方法和系统
US10481876B2 (en) 2017-01-11 2019-11-19 Microsoft Technology Licensing, Llc Methods and systems for application rendering

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080235325A1 (en) * 2007-03-20 2008-09-25 Microsoft Corporation Identifying appropriate client-side script references
US20110214016A1 (en) * 2010-03-01 2011-09-01 International Business Machines Corporation Performing Aggressive Code Optimization with an Ability to Rollback Changes Made by the Aggressive Optimizations

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220015107A (ko) * 2020-07-30 2022-02-08 홍익대학교세종캠퍼스산학협력단 성능 개선을 위해 소프트웨어 소스 코드 변경한 후 이를 시각적으로 가시화하는 방법 및 그 장치
KR102413994B1 (ko) * 2020-07-30 2022-06-28 홍익대학교세종캠퍼스산학협력단 성능 개선을 위해 소프트웨어 소스 코드 변경한 후 이를 시각적으로 가시화하는 방법 및 그 장치
KR20220067324A (ko) * 2020-11-17 2022-05-24 홍익대학교세종캠퍼스산학협력단 전력 개선을 위한 소프트웨어 코드 변경 방법 및 그 장치
KR102523329B1 (ko) * 2020-11-17 2023-04-19 홍익대학교세종캠퍼스산학협력단 전력 개선을 위해 소프트웨어 소스 코드 변경하고 성능 개선 요소를 시각적으로 가시화하여 표시하는 방법

Also Published As

Publication number Publication date
CN104866320A (zh) 2015-08-26
US11288048B2 (en) 2022-03-29
WO2013032959A1 (en) 2013-03-07
EP2751709A1 (en) 2014-07-09
EP2751709A4 (en) 2015-07-15
JP2014525632A (ja) 2014-09-29
JP6054397B2 (ja) 2016-12-27
US10466989B2 (en) 2019-11-05
US20130061128A1 (en) 2013-03-07
KR20140063661A (ko) 2014-05-27
CN102902528A (zh) 2013-01-30
CN104866320B (zh) 2018-02-23
US20180046442A1 (en) 2018-02-15
CN102902528B (zh) 2016-05-04
HK1179369A1 (zh) 2013-09-27

Similar Documents

Publication Publication Date Title
KR102006507B1 (ko) 스크립트 코드를 가진 마크업 콘텐츠의 고속 프레젠테이션 기법
US8209674B2 (en) Tier splitting support for distributed execution environments
JP5989248B2 (ja) ウェブブラウザにおけるスクリプトの事前処理
JP6166371B2 (ja) ドキュメントリソースの使用量の予測
US8458585B1 (en) Delayed code parsing for reduced startup latency
JP6254592B2 (ja) サンドボックス化された実行を介した推測的なリソースのプリフェッチ
US8140646B2 (en) Network application performance enhancement using speculative execution
US20140047015A1 (en) Web application script migration
US20140365861A1 (en) Prefetching binary data for use by a browser plugin
JP6379654B2 (ja) 処理実行プログラム、処理実行方法、及び情報処理装置
Lee et al. Selective just-in-time compilation for client-side mobile javascript engine
Thakkar et al. Next. js
EP1489504A2 (en) Mechanism for asynchronous components to be application framework agnostic
Park et al. Concurrent JavaScript parsing for faster loading of Web apps
US20160110170A1 (en) Message inlining
US20120324457A1 (en) Using compiler-generated tasks to represent programming elements
Sabeghi et al. Interfacing operating systems and polymorphic computing platforms based on the molen programming paradigm
US7937565B2 (en) Method and system for data speculation on multicore systems
US7908375B2 (en) Transparently externalizing plug-in computation to cluster
Romero-Ventura et al. Polyglot programming with graalvm applied to bioinformatics for dna sequence analysis
US20220308930A1 (en) Provisioning pluggable smart services for browser-based smart editing tools
Meijers et al. Unity Advanced
Doglio et al. Node. js and REST
KR20230093425A (ko) 다중 운영 체제를 실행하는 컴퓨터 시스템
Liang et al. Towards Lightweight Javascript Engine Acceleration for Privacy-Aware Distributed Learning in Large Language Models

Legal Events

Date Code Title Description
N231 Notification of change of applicant
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right