HTML5 및 JS 앱이 기본 앱만큼 성능을 ​​발휘하지 못하게하는 요인은 무엇입니까?


9

내가 이해 한 것에서

  • HTML은 마크 업 언어이므로 XAML, XIB 및 Android에서 사용하는 모든 내용 및 기타 기본 UI 개발 프레임 워크도 포함됩니다.
  • JavaScript는 이벤트 처리, 클라이언트 측 유효성 검사 및 C #, Java, Objective-C 또는 C ++ 등 다양한 프레임 워크에서 수행하는 모든 것을 포함하는 클라이언트 측 스크립팅을 처리하기 위해 함께 사용되는 프로그래밍 언어입니다.
  • Sencha, Angular 등과 같은 폼 프레임 워크에서 MVC / MVVM 패턴을 사용할 수 있습니다.
  • 우리는 다른 프레임 워크와 마찬가지로 sqlite 및 키 값 저장소의 형태로 localStorage를 가지고 있으며 누락 된 거의 모든 것에 대한 API 사양이 있습니다.
  • 기본 UI 프레임 워크가 UI를 렌더링해야 할 때마다 유사한 마크 업을 구문 분석하고 UI를 렌더링해야합니다.

질문 분석

  • HTML과 JS 자체에서 똑같은 일을 멈추는 것은 무엇입니까?
  • 웹 제어 또는 브라우저를 왜 CSS와 함께 HTML과 JS가 동일한 방식으로 수행 할 수 없는지에 대한 계층으로 사용하는 대신?
  • 계층이 있더라도 .net 런타임과 JVM은 C ++, C를 사용하지 않는 다른 경우입니다.
  • Dalvik과 같은 Android의 경우, Chalmium이 dalvik 및 NDK와 함께 HTML이 Android 마크 업의 기능을 수행하고 JavaScript가 Java의 기능을 수행하는 또 다른 옵션이 아닌 이유는 무엇입니까?

문제는

현재 구현이 좋지는 않지만 이론적으로 HTML5 기반 응용 프로그램을 모바일에서 다른 기본 응용 프로그램으로 작동하도록 할 수 있습니까?


1
당신이 시작하는 진술과 실제 질문이 무엇인지 명확히하기 위해 리팩토링하십시오.
funkybro 2016 년

"HTML 및 JS 자체에서 동일한 작업을 수행하는 데 방해가되는 요소는 무엇입니까?" "동일한"이라는 말의 의미를 이해하지 못합니다. 이전에 네 가지 진술을했는데 그 질문에서 어떤 말을하는지 잘 모르겠습니다.
apillers

새로운 대신 HTML을 마크 업으로 사용하는 기본 개발 플랫폼이 있다면. JS를 언어로 사용하면 성능이 향상됩니까? 이 I / O에서 구글은 Chrome OS가 아닌 휴대 전화에서 실용적이며 Android를 사용하고 있다고 말했다. FF OS는 실용적인 개념이 아닙니다. 모든 모범 사례를 준수하면 FFOS 앱이 각 플랫폼에서 안드로이드 앱만큼 우수한 성능을 발휘할 수 있습니까?
Amogh Talpallikar 2016 년

Windows Metro 응용 프로그램을 살펴보십시오. GUI 디자인을 위해 HTML을 사용하고 그 뒤에있는 로직을 위해 Javascript를 사용하는 기본 애플리케이션입니다.
Philipp

HTML / JS 성능은 일반적으로 정보를 표시하고 사용자 조치를 기반으로 외부 서버에 요청하는 사용자 인터페이스에 비해 성능이 뛰어납니다. 원래는 그 이상을 위해 만들어지지 않았지만 지금까지는 훨씬 더 유능합니다. 그러나보다 직접적인 장치 액세스, 네이티브 코드와의 인터페이스 또는 운영 체제 (예 : 알림)와의 상호 작용이 필요한 상황에서는 여전히 범용 웹 기술을 사용하는 좋은 방법이 없습니다.
Katana314

답변:


11

HTML5 앱의 포스터 소년 인 LinkedIn은 2013 년 초에 모국어가 되었습니다. VentureBeat 인터뷰에서 이유를 설명합니다.

이것이 귀하의 질문과 가장 관련이 있다고 생각합니다.

Prasad는 성능 문제로 인해 충돌이 발생하거나 앱이 느리게 실행되지는 않는다고 말했다. 그가 말한 바에 따르면 모바일 웹용 HTML5는 여전히 미래가 밝습니다. 그러나 개발자가이를 지원할 도구를 기꺼이 개발하려는 경우에만 가능합니다.

...

비판적으로 누락 된 몇 가지가 있습니다. 하나는 툴링 지원입니다. 실제로 작동하는 디버거, 메모리가 부족한 위치를 알려주는 성능 도구입니다. Android와 iOS를 살펴보면 제작 과정에서 문제가 발생할 때 많은 세부 정보를 제공하는 도구를 만드는 데 중점을 둔 두 개의 대기업이 있습니다. 모바일 웹 측면에서 데스크톱 도구가 모바일 장치에서 작동하도록하는 것은 실제로 어렵습니다. 우리가 어려움을 겪고있는 두 번째 큰 덩어리는 작동 성, 런타임 진단 정보입니다. 지금도 HTML5를 빌드 할 때이를 클라이언트 측 앱으로 빌드합니다. 더 많은 클라이언트-서버 아키텍처입니다. …이 기능은 많은 사용자에게 배포 할 때 정보를 제공하므로이를 지원할 수있는 유용한 도구는 많지 않습니다.

[Prasad는 또한 문제를 신속하게 해결하기위한 개발 및 운영 도구가 "존재하지 않는다"고 지적했습니다.]

이 두 가지가 존재하지 않기 때문에 사람들은 네이티브로 돌아가고 있습니다. HTML5가 준비되지 않은 것은 아닙니다. 생태계가이를 지원하지 않는 것입니다. … 도구가 있지만 처음에 있습니다. 사람들은 단지 기본을 이해하고 있습니다.


나는 그것을 얻지 못한다. Google, Microsoft, Apple은 Chrome, Safari 및 IE 백업에 중점을 둔 대기업입니다. 우리는 Mozilla가 Firefox에 헌신했습니다. Chrome 개발자 도구, 웹 검사기, Firebug가 있습니다. 그리고 Prasad는 도구가 없다고 말합니다.
niutech

@niutech : HTML5 앱용 Valgrind와 같은 도구를 원한다고 가정합니다. 많지 않습니다.
vartec

5

Javascript 표준 라이브러리가 없다는 것은 끔찍한 억제제입니다. jQuery, Dojo, YUI와 같은 훌륭한 프레임 워크가 있지만, 프리젠 테이션 레이어와 XHR에만 중점을두고 있습니다.

구성 가능한 로깅, 암호화 도구, 그래프 알고리즘, UUID 생성기, 맵, 세트, ​​트리, 템플릿, 종속성 관리, 날짜 조작, 현지화 / 국제화, 매트릭스 작업, 종속성 주입, 단위 테스트, 맵 감소, XML 처리를 원하십니까? JVM 또는 .NET 언어의 경우 간단합니다. Javascript에서는 종종 자체 구현을 롤링해야합니다.


그것에보고를 추가하십시오.
Alan B

ECMAScript 6은 이러한 기능의 대부분을 추가합니다. Google 클로저 라이브러리는 또 다른 솔루션입니다.
niutech

Angular는 이제 훌륭한 선언적 방법을 제공합니다.
Amogh Talpallikar

2

Javascript가 느린 이유 중 하나는 유형 안전성이 완전히 없기 때문입니다. 모든 변수는 언제든지 모든 유형이 될 수 있습니다. 또한 대부분의 작업은 다양한 유형으로 유효 하지만 의미 가 다릅니다 . 간단한 용어

a += b;

인터프리터에 대한 그 사소한되지 않는 경우가 있기 ab숫자 나 문자열이 될 수 있습니다. 둘 다 숫자 인 경우 산술 덧셈입니다. 둘 다 문자열 인 경우 문자열 연결입니다. 하나는 문자열이고 다른 하나는 숫자 인 경우 문자열 연결을 수행하기 전에 숫자를 형식화해야합니다. 이것들은 인수를 다르게 해석해야하는 완전히 다른 연산입니다.

의 유형에 따라 a하고 b, 종류는 a지금에 관계없이 예전 입력 한 내용의, 이중 또는 문자열 정수가 될 수 있습니다.

JS의 변수는 언제든지 유형을 변경할 수 있기 때문에 인터프리터는이 명령을 호출 할 때마다 잘못된 연산을 피하기 위해 유형을 평가하는 일을 거의하지 않습니다. 추가 CPU주기가 필요합니다.

최적화를 더욱 어렵게 만드는 다른 기능으로는 스파 스 배열 또는 가비지 수집 및 이벤트 처리기가 있으며 언제든지 실행할 수 있습니다.

asm.js를 살펴보십시오. Javascript의 하위 세트로, 특히 동적 타이핑과 같은 일부 JS 기능을 제거하여 훨씬 더 나은 최적화를 할 수 있습니다.


1
최신 Javascript JIT 컴파일러는 실제 런타임 사용량이 안정적인 경우 사용중인 유형에 대해 특수 기계 코드를 즉석에서 생성합니다. a정수, 문자열 또는 이중 등이 될 수 있는 방식으로 실제로 코딩하는 경우 맞습니다. 그리고 여전히 통역사를 사용하는 구형 브라우저에는 이러한 최적화 기능이 없습니다.
Esailija 2016 년

1
@Esailija 현대 JavaScript 환경은 이전 환경보다 훨씬 빠릅니다. 그러나 .NET, JVM, ErlangVM 등과 같이 정적으로 유형이 지정된 현대 환경과 비교할 때 여전히 느립니다.
David Sergey

@nirth 그래, 나는이 게시물이 인터프리터 / 비 최적화 jit 컴파일러가 어떻게 작동하는지 설명했으며 심각하게 느리다는 것을 말하는 것이 아닙니다.
Esailija 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.