V8 및 WebKit의 JavaScriptCore와 같은 일반적인 JavaScript 엔진은 JavaScript 문자열에 string interning을 사용합니까? 아니면 실제로 동일한 문자열의 여러 인스턴스를 메모리에 유지합니까?일반적인 JavaScript 구현은 문자열 인턴을 사용합니까?
24
A
답변
18
예. 일반적으로 리터럴 문자열, 식별자 또는 JS 소스의 다른 상수 문자열은 사용하지 않습니다. 그러나 구현 세부 사항 (정확하게 예를 들어 구금되어있는 것)은 다양하며 인터내셔널이 발생할 때도 다양합니다.
문자열 값은 String 개체와 같지 않습니다. 그러나 String 개체는 근본적으로 잘못된 동작이므로 인턴 된 것이 아닙니다.
10
http://jsperf.com/strinterning
크롬에서 예, 아니오 오로라 (15)과 FF (13)에! 두 문자열을 비교하는 것은 Firefox에서 두 개의 포인터를 비교하는 것보다 85 % 느립니다. 그러나 Chrome에서 속도가 같아서 두 개의 포인터를 비교한다는 표시입니다.
어쩌면 모질라에서 JS 엔진 팀은 자신의 코드를 확인해야합니다
...+4
만약 당신이 나쁜 생각, IE9조차 포인터 비교를 [때 문자열 변수를 비교할 때 * 자체 *] (http://www.kpozin.net/archive/2011/05/ie9 문자열 평등). ([관련 JSPerfs] (http://jsperf.com/string-comparison1/3).) – kpozin
관련 문제
- 1. 좋은 Javascript RDFa 파서 구현은 무엇입니까?
- 2. 일반적인 HTTP 서버 구현은 게시 된 양식 데이터의 압축을 해제합니까?
- 3. 이미지로드하기 : Ajax와 일반적인 기존 JavaScript
- 4. JavaScript InfoVis Toolkit은 어떻게 사용합니까?
- 5. 좋은 신원지도 구현은 무엇입니까?
- 6. 문자열 풀이 지역 변수를 사용합니까?
- 7. 자바 구현은 C에서
- 8. JavaScript 용 JSON 문자열 화 독립형 함수
- 9. JavaScript 대체 문자열
- 10. Javascript/jQuery 문자열 조작?
- 11. JavaScript/jQuery에서 문자열 파싱
- 12. JavaScript 문자열 다중 대체
- 13. 파일 이름에서 일반적인 문자열 그룹을 검색하는 방법
- 14. 일반적인 전자 메일 클라이언트 사용자 에이전트 문자열
- 15. 일반적인 '문자열'(형식) 구문을 확인하는 정규식
- 16. 문자열 조작으로 Firefox에서 javascript 버그
- 17. Javascript 문자열 연결이이 예제보다 빠릅니까?
- 18. JavaScript 문자열 모범 사례 분석
- 19. 보기에서 JavaScript 문자열 리터럴 이스케이프
- 20. Javascript 문자열 - 날짜 변환 - 간단합니까?
- 21. JavaScript 팩 ("d") - 이진 문자열
- 22. Greasemonkey Javascript 스크립트에서 jQuery는 어떻게 사용합니까?
- 23. Javascript 정규식에서 캡쳐되지 않은 요소는 어떻게 사용합니까?
- 24. livevalidation javascript 라이브러리 custom.validation 함수는 어떻게 사용합니까?
- 25. Javascript 및 성능, jQuery 또는 Javascript를 사용합니까?
- 26. javascript : 왜 "sign-prefix"변수를 사용합니까?
- 27. 은 어떻게 대체 할 TR을 사용합니까 '-'문자열
- 28. `strtol`의 구현은 무엇입니까?
- 29. XQueryX의 모든 구현은 무엇입니까?
- 30. markdown의 표준 구현은 무엇입니까?
안녕 @olliej, 명세서에 대한 모든 소스가있다? –
@FelipeSabino 주요 엔진에서 작동하고 ecmascript위원회에 참여 했습니까? ;) 더 심각하게 당신은 JavaScriptCore, SpiderMonkey, V8 등 온라인 소스를 볼 수 있습니다. – olliej
물론 오픈 소스 코드를 살펴보고 직접 확인해 볼 수도 있습니다.하지만 그 이유 중 하나는 이런 번거 로움을 피하는 것입니다. 지식을 의심하는 것이 아니라 개발자가 연구에 도움을주는 것입니다. 당신은 주제에 대해 많이 알고있는 사람이고,이 주제에 관해 더 많은 것을 배우는 데 도움이 될 수있는 훨씬 더 믿을만한 참조가있는 것 같습니다. 예를 든다면, "일반적인 문자열은 인턴입니다"라고했는데, 그렇지 않은 경우는 무엇입니까? 등등. –