๋ธ๋ผ์ฐ์ ์ ๋๊ตฌ๊ฐ ๋น ๋ฅด๊ฒ ์ง์๋๋ ES6์ด ์ถ์๋ฉ๋๋ค. THREE.js๋ ES6์ ์๋ก์ด ๊ธฐ๋ฅ ์ค ์ผ๋ถ์์ ์์ฒญ๋ ์ด์ ์ ์ป์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๋ฏธ๋ฅผ ์ํด ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฅํ ํ๋ก์ ํธ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ํ ํ ๋ก ์ ์ฅ๋ คํ๊ธฐ ์ํด ์ด ๋ฌธ์ ๋ฅผ ๋ง๋ค๊ณ ๋ช ๊ฐ์ง ์ฝ๋ ์์ ๋ฅผ ๋ง๋ค์์ต๋๋ค.
์๋ ์์์ ๋ณด์ฌ์ง๋ ๊ธฐ๋ฅ:
let
ํค์๋import Object3D from '../core/Object3D';
import Geometry from '../core/Geometry';
import MeshBasicMaterial from '../materials/MeshBasicMaterial';
class Mesh extends Object3D {
constructor(
geometry = new Geometry(),
material = new MeshBasicMaterial({color: Math.random() * 0xffffff}
) {
super();
this.geometry = geometry;
this.material = material;
this.updateMorphTargets();
}
}
export default Mesh;
class Object3D {
constructor() {
...
}
traverse(callback) {
callback(this);
for (let object of this.children) {
object.traverse(callback);
}
},
*traversalGenerator() {
this.traverse(object => yield object);
}
...
}
์ฌ์ฉ ์ค์ธ ๋ฐ์ ๊ธฐ:
for (let object of scene.traversalGenerator()) {
if (object.name === 'Blah') {
break;
}
}
์ฐธ๊ณ : ๋๋ ์ด๊ฒ์ ํ ์คํธํ์ง ์์์ต๋๋ค.
์๋ง ์กฐ๊ธ ์ผ์ฐ? ์ง์์ ์ผ๊ด๋๊ฒ ํ๋ฅญํ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ๊ฐ ์๋๋๋ค: http://kangax.github.io/compat-table/es6/
let
FF์์๋ ๋
ธ์ถ๋์ง ์์ผ๋ฉฐ Chrome ๋ฐ IE์์๋ 100% ์ํฉ์ด ์๋๋๋ค.
generators
IE์์ ์ฌ์ฉํ ์ ์์
class
๋ ํ์ฌ ๋ฒ์ ๋ณด๋ค 2๋จ๊ณ ๋์ Win10 ๋ฐ FF39์ฉ Chrome, IE12(Spartan) ๊ธฐ์ ํ๋ฆฌ๋ทฐ์๋ง ์์ต๋๋ค.
import
์(๋) ์์ง ์ด๋์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
super
๋ IE11, Chrome ๋๋ FF๊ฐ ์๋ IE12์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
arrow functions
IE11 ๋๋ Chrome์ ์์
๋ํ ์ ๋๋ ์ดํฐ์ for-of
๋ ๋ชจ๋ Chrome์ ์ต์ ํ ํฌ๋ฌ์
๋๋ค.
Imo๋ ๋ํ ๋ ๋ฉ์ง ๊ตฌ๋ฌธ์ ๋ณด๊ธฐ์๋ ๋๋ฌด ์ด๋ฅด๋ค. ๋ชฉ๋ก์ ์๋ ํญ๋ชฉ์ด ๋์ ๋๋ ์ฑ๋ฅ ํฅ์ ๋๋ ์ฝ๋ ๊ฐ๋ ์ฑ ์ด์ ์ ์ ๊ณตํ ๋ ๋ ผ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ์ฝ๋๋ฒ ์ด์ค์ ES6 ๊ธฐ๋ฅ์ ์๋ ์ฌ๋์ด ์ด์ ๋ํด ์ธ๊ธํ ์ ์์ต๋๋ค.
ES6 ํํฐ์ ์กฐ๊ธ ๋ฆ์์ต๋๋ค. ์ด๊ฒ์ ๋์๊ฒ ๋ค๋ฅธ ์ธ์ด์ฒ๋ผ ๋ณด์ ๋๋ค. ๋๋ ์ ๊ธฐ์ ์ผ๋ก Three.js์ ๊ธฐ์ฌํ์ง๋ง ์์ ์ค๋ํซ์ฒ๋ผ ๋ณด์ธ๋ค๋ฉด ๊ณ์ํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก 'new function()' ๋ฐ 'object.prototype'๊ณผ ๋์ผํ ์์ ์ ์ํํ์ง๋ง ๋ ๋๋ฆด ์ ์๋ ๋ค๋ฅธ ๋ชจ์๊ณผ ๋ค๋ฅธ ๊ธฐ๋ฅ์ JavaScript ๋ฒ์ ์ ๋ฐฐ์ธ ์ธ๋ด์ฌ์ด ์์ต๋๋ค.
์ด๊ฒ์ด ์น ์ปค๋ฎค๋ํฐ๊ฐ ES6 ์ธ์ด ์์ํ์ ์๊ตฌํ ๊ฒ์ ๋๊น? ๋๋ 20๋ ๋์ ์ฝ๋ฉ์ ํด์๊ณ 'ํด๋์ค'๋ผ๋ ๋จ์ด๋ ๋ด ํ๋ก์ ํธ์ ์ด๋์๋ ๋ํ๋์ง ์์ต๋๋ค. ์์งํ JavaScript๋ JAVA...(script)์ฒ๋ผ ๋ณด์ด๊ธฐ ์์ํ์ต๋๋ค. :-\
์ ๋ @benaadams ๋ฐ @jonnenauha ์ ํจ๊ป ์์ต๋๋ค ; ๋๋ฌด ์ด๋ฅด๊ณ Chrome๊ณผ Firefox๊ฐ ์ด๋ฏธ ๋ด๋ถ์์ JavaScript(V8 ๋ฑ...)๋ฅผ ์ต์ ํํ๊ณ ์๋ ๊ฒ์ฒ๋ผ ์ด ์ ๋ฒ์ ์ ์ธ์ด๋ฅผ ํฌ๊ฒ ์ต์ ํํ์ง ์์ผ๋ฉด ์ฝ๋ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค.
:+1:
@erichlof ๊ธ์์, ์ ๋ ์ฌ์ค ES6 ํด๋์ค์ ๋ชจ๋ ์ง์์ ๊ฐ์ฅ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ํ์ฌ ๋ด ์ฑ์ AMD๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ด๊ฐ ์์
ํ๋ ์ฃผ์ JS ํ๋ก์ ํธ๋ ์๋ฐฑ ๊ฐ์ "ํด๋์ค"๊ฐ ์๋ ~10k ๋ผ์ธ์ด๊ณ AMD๋ ์๋ช
์ ์์ธ์
๋๋ค. ๊ฐ๋ฐ ์ค ๋ฐ ๋น๋ ์์ฑ ์ ๋ชจ๋. ํฌ๊ฑฐ๋ ๋ ์์ ํ๋ก์ ํธ์๋ ์ผ์ข
์ ๋ชจ๋ ์์คํ
๊ณผ ์์กดํ๋ ๋์์ ์ ์ธํ๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ๋ณต์กํ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ฒ ๋๋ฉด ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋๋ฌด ๋ณต์กํด์ง๋๋ค. ํ๋ก๊ทธ๋จ์ด 25x <script>
ํ๊ทธ๋ฅผ ์ด๋ค ์์๋ก ๋ฐฐ์นํ ์ง ์์๋ผ ์ ์๋๋ก ๋จ๊ฒจ๋์ด์๋ ์ ๋ฉ๋๋ค. three.js์ ๊ฐ์ ํ์ผ ์์ด ๋ง์ผ๋ฉด ์ด๋ฆฌ์์ ์ผ์
๋๋ค. ๋๋ถ๋ถ์ ํ๋ก์ ํธ๋ ํ๋์ ํฐ js ํ์ผ(์: three.js)์ ๋น๋ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ค์ ๋ค๋ฅธ ํญ๋ชฉ์ ํฌํจํ ์ ์๋ ์์์ extras/helpers ํด๋๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ๋ค์ ์ ํ์ ์ด๋ฉฐ ~๋ชจ๋ ๊ฒ์ ํ์ ์๋์์ ์ป์ผ๋ ค๋ฉด ~500kb(์ถ์) ๋น๋๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.
์ด๋ ์์ ์์ ๋๋ ์ธ ๊ฐ์ง๊ฐ AMD ์ง์์ ์ถ๊ฐํ๋ค๊ณ ์๊ฐํ์ง๋ง AMD๊ฐ ์ฌ์ฉ๋๋์ง ๊ฐ์งํ๊ณ ํจ๊ณผ์ ์ผ๋ก window.THREE๋ฅผ ์ ์ธํ๋ ๋์ ํจ์๋ฅผ ํธ์ถํ๋ ์์ ์ฝ๋ ๋ธ๋ก์ผ ๋ฟ์ ๋๋ค. ํ์ํ์ง ์์ ๊ธฐ๋ฅ์ ์ญ์ ํ๊ณ ์ฝ์ด ์ธ๋ถ์ ์ํ๋ ๊ฒ์ ์ถ๊ฐํ๊ณ ์์๋๋ก ๋ก๋ํ๋ ๋จ์ผ ์์ ํ์ผ๋ก ์ต์ ํํ๋ ๋ง์ถคํ ๋น๋๋ฅผ ๋ง๋๋ ๊ฒ์ด ํ์ฌ ์ผ๋ง๋ ์ด๋ ค์ด ์ผ์ธ์ง ๋ชจ๋ฆ ๋๋ค.
ํ๋ก์ ํธ์ "ํด๋์ค"๊ฐ ์์ ์๋ ์์ง๋ง object.prototype(3.js๊ฐ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ)์ ์ฌ์ฉํ๋ฉด ์ฌ์ค์ ๋์ผํ ๊ฒ์ ๋๋ค. ๋์ํ์๊ฒ ์ต๋๊น? ์ฐ๋ฆฌ๋ ๋ฌผ๊ฑด์ ์กฐํฉํ๊ณ ๋ชฉ์ ์ ๋ถ์ฌํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค๋ฅธ ์ฝ๋๋ ํด๋น ๊ฐ์ฒด์ ๊นจ๋ํ ์ ์ธ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ํฉ๋๋ค.
๋ด๊ฐ ๋งํ๋ ๊ฒ์ ES6 ํด๋์ค์ ๋ชจ๋์ด ๋น๋๋ฅผ ์ํ ๋ ๋ง์ ๊ตฌ์กฐ์ ๋ชจ๋์ฑ์ ์ ๊ณตํ๊ธฐ ์ํด three.js์ ์ถ๊ฐํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ฌด ์ด๋ฅด๋ค. ์์ง ๋ชจ๋. ๋ค๋ฅธ ์ฌ๋๋ค์ ์ฌ์ฉ์ ์์ํ๊ณ babel ๋ฑ์ ์ฌ์ฉํ๊ณ ES5 ํธํ ๋น๋๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค๊ณ ๋งํ ์๋ ์์ต๋๋ค. ์ข์ ์๊ฐ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋๊ฐ ์๊ฒ ์ต๋๊น. ์ด๊ฒ์ ๊ฐ๋ฐ์ ๋ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ , ํ์ผ์ ์ ์ฅํ ๋ ๋น๋๋ฅผ ์๋์ผ๋ก ์์ํด์ผ ํ๋ฉฐ, ๋๋ฒ๊น ๋ ๋ ๋ณต์กํด์ง ์ ์์ต๋๋ค. ์ด๊ฒ๋ง์ผ๋ก๋ ๋๋ ์ด ํธ๋์คํ์ผ๋ฌ๊ฐ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
PS๋ three.js์ ๋ํ ํธ์ธ์ฅ๋ด์ด ์๋๋ผ ๋ธ๋ผ์ฐ์ ์ง์์ด ์ ๊ณต๋๋ฉด three.js์ ๊ฐ์ ํ๋ก์ ํธ์ ๋ํด ES6์ ์ด์ ์ด ์์ ์ ์๋ค๊ณ ๋งํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ๋ ๋ง์ ๊ฒ์ ๊ฐ์ง ๊ฒ์ ๋๋ค.
three.js์ ๋์์ด ๋ ์ ์๋ ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ WeakMap ๋ฐ WeakSet ์ ๋๋ค. ๊ทธ ์๋ฏธ๋ ํ์คํ์ง ์์ง๋ง "์์ ์"๊ฐ ๋ ์ด์ ref๋ฅผ ๋ณด์ ํ์ง ์์ผ๋ฉด GC๊ฐ ์์ ์ ์ํํ์ง ์๊ณ ์ถ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. three.js์๋ ์ด์ ๊ฐ์ ์ํ๊ฐ ๋ง์ด ์์ผ๋ฉฐ ์ด๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ์ฐจ์ด๊ฐ ๋ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์์ ๊ถ ์ ์ธ์ ๋ํ C++์ ๊ณต์ /์ฝํ ptrs์ ์ฝ๊ฐ ์ ์ฌํ ๊ฒ ๊ฐ์ต๋๋ค.
์ข์ ํ๋ณด๋ https://github.com/mrdoob/three.js/blob/master/src/lights/SpotLight.js#L12 ์ ๊ฐ์ด ์ฝํ ์ฐธ์กฐ์ผ ์ ์์ผ๋ฉฐ ๋์์ด ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ง์์ง๋๋ค. ํ์ฅ์์ ์ ๊ฑฐํ๊ณ ์์งํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์จ๋ ์ปฌ๋ ์ ์ ์์กดํ ์๋ ์์ง๋ง ์ผ๋จ ๋์์ด ์ฅ๋ฉด์์ ์ ๊ฑฐ๋๋ฉด ์ด์จ๋ ์ด๋ฅผ ๋ฌดํจํํด์ผ ํ ๊ฒ์ ๋๋ค.
์ด ๋ชจ๋ ๊ธฐ๋ฅ์ด ์ผ๋ฐ์ ์ผ๋ก ์ฑ์ ์ด๋ค ์ด์ ์ด ์๋์ง ์ ๋ฌธ๊ฐ๊ฐ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์์ฑํ๊ธฐ๋ฅผ ๋๊ฐ ์๊ฒ ์ต๋๊น? :)
์๋ ํ์ธ์ @jonnenauha ์ ๋๋ค .
์, '๊ฐ์ ธ์ค๊ธฐ' ๋ฐ '๋ด๋ณด๋ด๊ธฐ'์ ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ด ํนํ ๋ชจ๋์ฑ๊ณผ ๊ด๋ จ๋ ๊ฒฝ์ฐ ์ ์ฉํ ๊ฒ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ์ด๊ฒ์ด @coballast ์ @kumavis ๊ฐ THREE.js๋ฅผ ์ฌ์ฉ์ ์ ์ ๋น๋์ ์ฝ๋ ๊ธฐ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํด ๋ชจ๋ํํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊ณ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค. ์ ๋ ํนํ THREE.js์ ๊ฐ์ ๋๊ท๋ชจ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์์ด ์๋ ๊ฒฝ์ฐ ๋ชจ๋๊ณผ ๊ฐ์ฒด ๋ฐ ํจ์์ ์ฌ์ฌ์ฉ์ ์ง์งํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก JavaScript์์ ์์ญ ๋ ๋์ ์ฌ์ฉ๋์ด ์์ผ๋ฉฐ ์ด๋ฏธ ๋ง์ ๊ฒฌ์ธ๋ ฅ. ๋๋ ๊ตฌ์์ผ์ง ๋ชจ๋ฅด์ง๋ง JavaScript๋ ์ด๋ฏธ ๊ฐ์ฒด ์งํฅ ์ธ์ด(์ฆ, ํจ์ = ๊ฐ์ฒด = ์ผ๊ธ ์๋ฏผ)์ด์ง๋ง '๊ณ ์ ์ ์ธ' ์ธ์ด๋ ์๋๋ผ๊ณ Douglas Crockford์ ํจ๊ปํฉ๋๋ค. ํด๋์ค๋ฅผ JavaScript๋ก ๊ตฌ๋ถ๋ฆฝ๋๋ค. ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. ์ฒ์์๋ (1990๋ ๋์ C/C++ ํ๋ก๊ทธ๋๋ฐ์์ ์ ๋) ๋นํฉํ์ง๋ง, ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์ฝ๋ ์ํคํ ์ฒ๋ฅผ ํ๋ ค๊ณ ํ ๋๋ง๋ค ์ ์ ๋ ๋์ํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ๋ฌธ์ .
THREE.js์ ๋ํ ๊ตฌ๋ฌธ ๋ณ๊ฒฝ ๋์ ์๋ก์ด SIMD ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค์ ๊ฐ์ ๊ธฐ๋ฅ์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์
์ ๋ณด๊ณ ์ถ์ต๋๋ค. THREE์ ๋ชจ๋ ์ํ ์ฝ๋(ํนํ Vector3 ๋ฐ Matrix4)๊ฐ ์ด๋ก๋ถํฐ ํฐ ์ด์ ์ ์ป์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ค์์ ๋น๋์ค ๋งํฌ์
๋๋ค(ํ์ ์ฝ๋์์ 22:51 ํ์ธ).
https://youtu.be/CbMXkbqQBcQ?t=1371
์ด ๊ธฐ๋ฅ์ด ์ฃผ์ ๋ธ๋ผ์ฐ์ ์ ๋์
๋๋ฉด ๋ชจ๋ THREE.js ์ฌ์ฉ์๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋ ์ ์๋๊ฐ ๋์ ๋๊ฒ ๋นจ๋ผ์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋ด ์ด์ ๊ฒ์๋ฌผ์ด ํธ์ธ์ฅ๋ด์ฒ๋ผ ๋ค๋ ธ๋ค๋ฉด ์ฃ์กํฉ๋๋ค. ์ ๋ THREE.js๊ฐ ์ง๊ธ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ์ข์ํฉ๋๋ค. ์์์ ๋ถ๋ถ์ ์ฝ๊ฒ ์ ํํ ์ ์๊ณ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง, ์ด๋์ ์๋์ง, ๋ฌด์์ ์ฌ์ฉํ๋์ง ์ ์ ์์ต๋๋ค. :)
@erichlof @jonnenauha es6 ํด๋์ค๋ ์คํ์ผ ๋ฟ์ด๋ฉฐ ๋ด๋ถ์ ์ผ๋ก ํ๋กํ ํ์ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ๋ฐํ์์ ๋ชจ๋ ๊ฒ์ ๊ตฌํํ๊ณ ์๋ค๋ ์ ์ ์ง์ ํ๊ณ ์ถ์ต๋๋ค.
์ ๋ es6 ๊ธฐ๋ฅ์ด ๊ณ์ฐ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๋นํ ๋๊ดํฉ๋๋ค. es6 ๋ชจ๋์ ํ๋์ ํฐ ํ์ผ์ด ์๋ ์ฌ๋ฌ ๊ฐ์ ์์ ํ์ผ์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์์ง์ ์ํด ์ต์ข ์ ์ผ๋ก ๊ตฌํ๋ ๋ ๋ก๋ ์๊ฐ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. HTTP/2๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ ์ ์์ต๋๋ค. ์ด๋ ์ชฝ์ด๋ es6 ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํญ์ ํ๋ ๊ฒ์ฒ๋ผ browserify๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ๋ค์ ๋น๋ํ ์ ์์ต๋๋ค.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค๊ณ ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฒ ์ด์ค์์ es6 ๊ตฌ๋ฌธ์ ์ต๋ํ ๋ง์ด ์ฌ์ฉํฉ๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ํ๋กํ ํ์ ์ฒด์ธ์ ๋จ์ฉํ๊ณ ์๋ชป ์ฌ์ฉํ๋ ๊ฒฝํฅ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ข์ ์๊ฐ ์์ต๋๋ค.
๋๋ ๋ํ ์์์ es6์ด ์์ง์ ๊ตฌํ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ์๋ชป๋ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ ๋ณํ๊ธฐ๋ฅผ ์ง๊ธ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ป์ ์ ์๋ ์ด์ ์ด ์์ฒญ๋๊ธฐ ๋๋ฌธ์ ์กฐ๊ธํด ํ๊ณ ์ฆ์ ์์ ์ ์์ํด์ผ ํฉ๋๋ค.
์๋์ผ๋ก ์ฝ๋๋ฅผ ์ฎ๊ธฐ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ ๋์ค ํ์ดํ์ ๋ฐ๋ช
๊ฐ์ด์ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ ๋ฐ์ธ Doug McIlroy๋ ๋ค์๊ณผ ๊ฐ์ด ๋งํ์ต๋๋ค.
"๋๊ตฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฐํํด์ผ ํ๊ณ ์ฌ์ฉ์ ๋ง์น ํ์ ์ผ๋ถ๋ฅผ ๋ฒ๋ฆด ๊ฒ์ผ๋ก ์์ํ๋๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์์
์ ๊ฐ๋ณ๊ฒ ํ๋ ค๋ฉด ๋ฏธ์ํ ๋์๋ณด๋ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ญ์์ค."
es6์ ๊ด์ฌ์ด ์๋ ๋ชจ๋ ์ฌ๋์ด ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ฐธ์ฌํ๊ณ ๊ธฐ์ฌํ๋๋ก ๊ถ์ฅํฉ๋๋ค: https://github.com/5to6/5to6
์ ์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค๋ฅธ ํ์ ์งํฉ์ผ๋ก ๋ณํํ๋ ๋ฐ ๋์ํ์ง ์์ต๋๋ค. ์ธ์ ๋์ฒ๋ผ ์ฐ๋ฆฌ๋ ๋ฌด์์ด ๊ฐ๋ฅํ๊ณ ์ฅ๋จ์ ์ด ๋ฌด์์ธ์ง ๋ ผ์ํด์ผ ํฉ๋๋ค. ๋ฒ์ ๋ง๋ค ์ฑ๋ฅ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฝํ ๋งต์ ๊ฐ์ฒด์ ์ํ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ ๋๋ฌ์์ ํฐ ์ด๋์ด ๋๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฅ ํฐ ๋จ์ ์ ์ฝํ ํด๋ฆฌํ๊ณผ ๋งค์ฐ ์ ์ ๋ธ๋ผ์ฐ์ ์ง์ ๋ฐ ์๋ ค์ง์ง ์์ ์ฑ๋ฅ ํน์ฑ์ด์์ต๋๋ค. (์กฐ์ฌํ์ง ์๊ฐ์ด ์ข ์ง๋์ ๋ณ๊ฒฝ๋์์ ๊ฐ๋ฅ์ฑ์ด ์์)
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ es6๋ง ๋ณด์์๋ ์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ams.js๋ ์ํํธ์จ์ด ๋ ๋๋ฌ๋ฅผ ์คํํ๋ ๊ธฐ์ ๋ก ํ๋ฅญํ ๊ฒ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ http://stackoverflow.com/questions/18427810/three-and-asmjs/18439786#18439786์ ์ฐธ์กฐํ์ธ์.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ต์ํ๊ณ es6์ด ์์ง ๋๋ถ๋ถ์ ์ฌ๋๋ค์๊ฒ ์ต์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ๊ธฐ์ฌ์๋ค์ด ์ฃผ๋ก ๊ธฐ์ฌํ๊ณ ์๋ค๋ ์ฌ์ค์ ์์ด์๋ ์๋ฉ๋๋ค.
@gero3 ์๊ฐ์ง๋ ๋ชปํ ์ข์์ ๋ค์ด
์์์ ์ ๊ฐ ์ฃผ๋ก ์ด์ผ๊ธฐํ ๊ฒ์ ๊ธฐ์กด es5 ๊ธฐ๋ฅ๊ณผ ์๋ฏธ ์ฒด๊ณ๊ฐ ๋์ผํ ๊ตฌ๋ฌธ ์คํ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ฏ๋ก ์ฑ๋ฅ์ ๋๋ฌด ๋ง์ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฉด์ ํธ๋์คํ์ผ๋ฌ๋ก ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์
๋ฐ์ดํธ:
์๋ฌด๋ ์ ๊ฒฝ์ฐ์ง ์์์ง ๋ชจ๋ฅด์ง๋ง ๋๋ ๋ง์์ ๋ฐ๊ฟจ๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ์์
์ ์ฌ์ฉํด์๋ ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ฌ์ ํ es6 ๋ชจ๋์ด ์ข์ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ ๋ ์์ ์ ์ ์ ์ผ๋ก ์ฐฌ์ฑํฉ๋๋ค. JavaScript์ ๊ฐ์ฒด ํ๋กํ ํ์ ์ด ํ ์ ์๋ ๋ชจ๋ ๋๋ผ์ด ์ผ์ ์ป์์ต๋๋ค. ๊ทธ๋ฌ๋ THREE.js(๋ฐ ๊ธฐํ ๋ง์ ์ต์ OS ํ๋ก์ ํธ)์์ ์ฐ๋ฆฌ๋ ํ๋กํ ํ์ ์์์ ์ฌ์ฉํ์ฌ ํด๋์ค๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ณ ์์ผ๋ฏ๋ก ๋ฉ์ง ๊ตฌ๋ฌธ์ ํจ๊ป ์ฌ์ฉํ๊ณ ๋ค์๊ณผ ๊ฐ์ ํดํน ํญ๋ชฉ์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ด๋ป์ต๋๊น?
THREE.Object3D.call( this );
๊ทธ๋ฆฌ๊ณ
THREE.Scene.prototype = Object.create( THREE.Object3D.prototype );
์์ ์ ์ธ Chrome ๋ฐ Firefox์์ ํด๋์ค๊ฐ ์ง์๋๋ ์ฆ์ ์ฝ๋ ์ ๋ฐ์ดํธ๋ฅผ ๊ณ ๋ คํ์ง ์์ ๊ฒ์ ๋๋ค ๐
@mrdoob ํด๋์ค๋ ํ์ฌ ์์ ์ ์ธ Chrome 42์์ ์ง์๋๋ฉฐ Firefox 39๋ 6์ FYI ์ถ์ ์์ ์ ๋๋ค ๐
์์ฆ์ iOS์ ์ฌํ๋ฆฌ๊ฐ ๋๋ฆฌ๋ ๊ฒ ๊ฐ์์... ๐ฃ
์์ ์ ํ๋ฅญํ๊ณ ๋ค๋ฅธ ES7 ๊ธฐ๋ฅ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ฐ๋ฆฌ ํ๋ก์ ํธ ์ค ํ๋์์ ์ฌ์ฉํ๊ณ ์์ง๋ง Chrome, Firefox, IE ๋ฐ Safari์ ๊ฐ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์คํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํฌ๋ก์ค ์ปดํ์ผ๋ฌ(babel.js)๋ฅผ ๋์ ํด์ผ ํ์ต๋๋ค.
babel.js(babelify)๋ฅผ ์คํํ๋ ๋ธ๋ผ์ฐ์ ํ ๋ณํ์ด ์์ผ๋ฏ๋ก ๋ด ๋ ธ๋ ฅ๊ณผ ์ ๋ง์ ๊ฒ์ ๋๋ค.
๊ทธ๋ฅ ํธ๊ธฐ์ฌ์์, ์ด๋ค ์ค ์ผ๋ถ์ ๋ํ ์์ ์ด ์์๋์์ต๋๊น? :)
์ฐ๋ฆฌ๋ ์์ง ์๋์ ๋ฏธ์น๋ ์ํฅ์ ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ด ์ดํด๋ ๋ณํ๋ฉ๋๋ค ES6์ ๋๋ถ๋ถ ์ฑ๋ฅ์ด ์ข์ง ์์ผ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ์ ๊ตฌํ๋ ๋๊น์ง ํ๋ก๋์ ์ฉ์ด ์๋๋๋ค. ์ฆ, ์๋ก์ด ํ๋ก์ ํธ ๋๋ ๋ชจ๋์ ์ค๋๋ ์ด๋ฌํ ํธ์๋ฅผ ์กฐ์ ํด์ผ ํ์ง๋ง ์ด ๊ฒฐ์ ์๋ ์ฑ๋ฅ์ด ๊ณ ๋ ค๋์ด์ผ ํฉ๋๋ค.
@erichlof imo์ ๋์ํฉ๋๋ค. ๊ฐ์ฅ ์ ์ฉํ ๊ตฌํ์ ํด๋ฆฌํ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ SIMD(https://github.com/tc39/ecmascript_simd)์ ๋๋ค. ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ๋ง์ ํํ์ ๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
SIMD๋ ThreeJS์์ ์ด๋์ ์ ํฉํ ๊น์? ThreeJS๋ ์ด๋ฏธ ๋ชจ๋ ์ค์ํ ๊ณ์ฐ์ GPU๋ก ์คํ๋ก๋ํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Vector ํด๋์ค์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ ์ ๋ ์ดํดํ ์ ์์ง๋ง ThreeJS์์ ์ค์ ๋ก ์ํ๋๋ ์ํ์ ๊ฑฐ์ ์์ผ๋ฉฐ ๋๋ถ๋ถ ์ด๋ฌํ ๋ฒกํฐ๊ฐ GPU๋ก ์ ์ก๋ฉ๋๋ค.
์ด์ ์ SSE2/SSE4 ํ์ฅ์ ๊ตฌํํ์ ๋์ ๊ฒฝํ์ ๋น์ถ์ด ๋ณผ ๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด์ ์ด ์ผ์์ ์ด๋ผ๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. ์ ์ผํ ์ค์ ์ฌ๋ก๋ ๋์ผํ ์์ ์ ์ํํ๊ธฐ๋ฅผ ์ํ๋ ๋๊ท๋ชจ ์ด๋ ์ด๊ฐ ์๋ ๊ฒฝ์ฐ์์ต๋๋ค. ์์ .
์๋
ํ์ธ์ @buston๋ .
Matrix ์์
์์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๊น? SIMD๋ฅผ ์๊ฐํ ๋ 4 X 4 ํ๋ ฌ ์ฐ์ฐ์ด ๊ฐ์ฅ ์ด์ต์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ ๋ชจ๋ ์๋ค์ํผ, ํ๋ ฌ์ ์ฑ์ ๋ณต์ก์ฑ์ ๊ด๊ณ์์ด JavaScript/CPU ์ธก์์ Three.js์ ๋ชจ๋ ์ ๋๋ฉ์ด์
ํ๋ ์์ ์ฌ์ฉ๋ฉ๋๋ค.
Babylon.js ์ฌ์ฉ์๊ฐ ์ ๊ฒฝ ์ฐ์ง ์๋๋ค๋ฉด ์ด ๋ชจ๋ ๊ฒ์ ์์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํํธ๊ฐ ์์ต๋๋ค.
https://github.com/BabylonJS/Babylon.js/blob/master/src/Math/babylon.math.js#L2030 -L2093
ํ์์ ๋ณํํด์ผ ํ๋ ๊ฒฝ์ฐ ๋จ์ผ ํ๋ ฌ ๋ฐฐ์๋ ์คํจํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋งคํธ๋ฆญ์ค๊ฐ ํญ์ SIMD ํ์์ธ ๊ฒฝ์ฐ ์ด์ ์ด ์์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํ๋ ฌ ๊ณฑ์ ์ ์ฌ์ ๋ ฌ ์์ ์ด ํ์ํ ํ๊ณผ ์ด์ ๊ณฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
SIMD ์ต์ ํ์ ๋ํ ๋๋ถ๋ถ์ ๋ ธ๋ ฅ(๋์ข ์์ ์ด ์๋ ๋๊ท๋ชจ ์ด๋ ์ด ์ ์ธ)์ ๋ ธ๋ ฅํ ๊ฐ์น๊ฐ ์์ง๋ง ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ฒค์น๋งํฌ๋ฅผ ์ํํ์ฌ ์์๋ด๋ ๊ฒ์ ๊ด์ฐฎ์ต๋๋ค.
๊ฒฐ๊ณผ ์ฝ๋๋ ๋๋ฒ๊ทธ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ ์ด๋ ต์ต๋๋ค.
์๋ํ ์ ์๋ ํ ๊ฐ์ง ์ ๋ต์ ๋ชจ๋ ๋ฒกํฐ์ ํ๋ ฌ์ด SIMD ํธํ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ๊ธฐ๋ณธ ํํ์ผ๋ก ์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์ ๊ฐ Quake 3์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฏฟ์๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํจ์จ์ฑ์ ์ํด vec2 ๋ฐ vec3 ์ ํ์ ๋ํด 4๊ฐ์ ๋ถ๋ ์์์ ์ ์ฌ์ฉํด์ผ ํ์ง๋ง, GPU์ ์ ๋ก๋ํ๋ ค๋ ๊ฒฝ์ฐ ์ด์ ์ถ๊ฐ ๋ถ๋ ์์์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
๋ฌด์จ ๋ง์ธ์ง ์๊ฒ ์ต๋๋ค. ํต์ฐฐ๋ ฅ๊ณผ ์ ๋ฌธ ์ง์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ผ๋ง ์ SIMD.js ํ๋ ์ ํ ์ด์ ์ ๊น์ ์ธ์์ ๋ฐ์ ๊ฒ๊ณผ ๊ทธ๊ฒ์ three.js์ ์ง์ด๋ฃ๊ณ ์ ์งํ๋ ๊ฒ์ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์ด ๋ช ๊ฐ์ง ์ฑ๋ฅ ๋น๊ต๋ฅผ ์ํํ๋ค๊ณ ๋งํ ๊ฒ์ฒ๋ผ ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค. three.js์ ํจ๊ป ์ฌ์ฉ๋๋ Cannon.js ๋ฐ Oimo.js์ ๊ฐ์ ๋ฌผ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ SIMD์์ ๋ ๋ง์ ์ด์ ์ ์ป์ ์ ์์๊น์?
@bhouston Ahh
@erichlof ๊ด์ฌ์ด https://github.com/Globegitter/three.js/tree/include-SIMD ์ง์ ์ ์์ํ์ต๋๋ค. ์ฌ๊ธฐ์ Vector3์ SIMD๋ก ๊ต์ฒดํ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๊ฒ์ ์ฌ์ ํ โโ๋ฌด๊ฑฐ์ด WIP์ด๊ณ ๋ด ์๊ฐ์ด ์ ํ๋์ด ์์ผ๋ฏ๋ก ์ผ๋ง๋ ๋ฉ๋ฆฌ ๊ฐ ์ ์๋์ง ์์ ๋ณด๊ฒ ์ต๋๋ค. ๋ํ ์ต์ Firefox๋ฅผ ์ผ๊ฐ์ ์ฌ์ฉํ๋ฉด ํด๋ฆฌํ ์์ด ์ด ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค(์ฌ๊ธฐ์ ๊ธฐ๋ณธ ๊ตฌํ์ ํด๋ฆฌํ์ ๋นํด ๋ถ๋ช ํ ~20๋ฐฐ ๋ ๋น ๋ฆ ๋๋ค: https://blog.mozilla.org/javascript/2015/03/10/state -of-simd-js-performance-in-firefox/).
@erichlof @jonnenauha es6 ํด๋์ค๋ ์คํ์ผ ๋ฟ์ด๋ฉฐ ๋ด๋ถ์ ์ผ๋ก ํ๋กํ ํ์ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ๋ฐํ์์ ๋ชจ๋ ๊ฒ์ ๊ตฌํํ๊ณ ์๋ค๋ ์ ์ ์ง์ ํ๊ณ ์ถ์ต๋๋ค.
์ ๋ es6 ๊ธฐ๋ฅ์ด ๊ณ์ฐ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๋นํ ๋๊ดํฉ๋๋ค.
JS ๊ฐ์ฒด์ (์๋นํ ๋ณต์กํ) ๊ตฌํ์์ ๋ชจ๋ JS ์์ง์๋ ์ค์ ๋ก ES6์ ๋ํ ๋ค๋ฅธ ์ฝ๋ ๊ฒฝ๋ก๊ฐ ์์ต๋๋ค.
es6 ๋ชจ๋์ ํ๋์ ํฐ ํ์ผ์ด ์๋ ์ฌ๋ฌ ๊ฐ์ ์์ ํ์ผ์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์์ง์ ์ํด ์ต์ข ์ ์ผ๋ก ๊ตฌํ๋ ๋ ๋ก๋ ์๊ฐ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. HTTP/2๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ ์ ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์ฌ์ ํ ์ ์ฒด ์ฑ JS ์์ค ์์ถ์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๋์ญํญ์ ์ค์ด๊ณ ์ง์ ์ฌ์ฐ์ ๋ณดํธํ๊ธฐ๋ฅผ ์ํ ์ ์์ต๋๋ค.
ํด๋ก์ ์ปดํ์ผ๋ฌ๊ฐ Three.js๋ฅผ ์ดํดํ๋๋ก ํ๋ฉด ES6์ผ๋ก ์ปดํ์ผํ๊ณ ์ ํํ ์ ์ ํ ์์ ์ ํ์ธํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ๋ง์ ์ถ๊ฐ ์ด์ ์ด ์์ต๋๋ค. ์ง๊ธ์ ์ด๋ฐ ๋ ธ๋ ฅ์ด ํ์ํ ๊ณณ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค...
๊ทธ๋ฌ๋ ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ [SIMD] ํ๋ ฌ ๊ณฑ์ ์ ์ฌ์ ๋ ฌ ์์ ์ด ํ์ํ ์ด๊ณผ ํ์ ๊ณฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
SIMD ๋ช ๋ น์ด ์ธํธ์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋ ฌ ๊ณฑ์ ์ ๊ตฌํํ๊ธฐ ์ํด ์ข ์ข "์ค์นผ๋ผ ๋ฐ ๋ํ๊ธฐ ๊ณฑํ๊ธฐ" ๋ช ๋ น์ด๊ฐ ์์ต๋๋ค.
for i : 0..3:
dst.col[i] = lhs.col[i] * rhs.co[i][0] // multiply vector by scalar
for j : 1..3:
dst.col[i] += lhs.col[i] * rhs_col[i][j] // multiply vector by scalar & add
ํ๋ ฌ ๊ณฑ์ ์ ์ค์ ๋ก ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์์ ์ด ๋ฒกํฐ์ ๋ณํ์ ์ ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ด์ ๋ณํ์ ๋ง์ ๋ด์ (์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ํ๊ณผ ์ข ์ด์ ์ฌ์ฉํ๋ ํผ๋์ค๋ฌ์ด ๋ฐฉ์)์ผ๋ก ๋ณด๊ฑฐ๋ ๋์ ๊ณต๊ฐ์ ์ถ ๋ฒกํฐ = ์ผ์ชฝ์ ์ด ๋ฒกํฐ์ ์ ํ ์กฐํฉ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ํผ์ฐ์ฐ์.
@Globegitter ์์ฐ ๋ฉ์ง ์์์ ๋๋ค! ์ ๋ถ๊ธฐ๋ ์คํํ ์ ์๋๋ก Firefox Nightly๋ฅผ ์ฌ์ฉํ ์์ ์ ๋๋ค!
@Globegitter ๋๊ตฐ๊ฐ๊ฐ ๋ฏฟ์ ๋ ์์ฅ์์ ๋ฌด์ธ๊ฐ๋ฅผ ํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค. ์ฝ๋๋ ํ ๋ก ๋ณด๋ค ๋ ๋นจ๋ฆฌ ๋ค์ํ ๊ด์ ์ ํด๊ฒฐํฉ๋๋ค.
๊ธฐ๋ณธ ๊ตฌํ์ด ํด๋ฆฌํ์ ๋นํด ๋ถ๋ช ํ ~20๋ฐฐ ๋น ๋ฆ ๋๋ค.
๋ํ ํด๋ฆฌํ์ด SIMD๊ฐ ์๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ ์ผ๋ง๋ ๋๋ฆฐ์ง ์๊ณ ์ถ์ต๋๋ค.
์ ๋ถ๊ธฐ๋ ์คํํ ์ ์๋๋ก Firefox Nightly๋ฅผ ์ฌ์ฉํ ์์ ์ ๋๋ค!
about:flags ์์ ์คํ ๋ฐ asm.js๋ฅผ ์ผ์ Edge์์ ์๋ํ ์๋ ์์ด์ผ ํฉ๋๋ค .
@Globegitter ํธ์ง์๊ฐ ๊ณต๋ฐฑ์ ๋ณ๊ฒฝํ์ฌ ์ ๋ง ๋ถ์พํ diff๋ก ์ด์ด์ง๋ ๊ฒ ๊ฐ์์: https://github.com/Globegitter/three.js/commit/d835ca3a22eed4ed4603534773ae55c29d5a8026
SIMD ์ ํ์ ์ฌ์ด๋์นด๋ก ๋ง๋ค๊ณ ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
https://github.com/Globegitter/three.js/commit/8ed9c1d351a3b0587a1f05051922d271d79f642d
Vector3 x, y, z๋ฅผ getter/setter๋ก ๋ณ๊ฒฝํ๊ณ float32x4๋ง ์ ์ฅํ๋๋ก ์ ์ํด๋ ๋ ๊น์? ๋๋ ๊ทธ๋ฌํ ์ ๊ทผ ๋ฐฉ์์ด ๋ ์ ์ ๋ณ๊ฒฝ์ผ๋ก ๊ตฌํํ๊ธฐ๊ฐ ํจ์ฌ ์ฌ์ธ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์ฑ์ ์ ์ํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ํ์คํ์ง ์์ง๋ง mrdoob์ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํฉ๋๋ค.
์ํ ์ ํ ๋ค์ ๊ธฐ๋ณธ ์ ์ฅ ์ ํ์ผ๋ก SIMD๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ์จ์ ์ผ ์ ์์ผ๋ฉฐ ์ถ๊ฐ ๋ณํ์ด ํ์ํ์ง ์์ต๋๋ค. ํ์ค ๋ฒกํฐ/ํ๋ ฌ ์ฐ์ฐ์ ๋ํ ๊ฐ์ด๋๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ค์์ Bullet Physics SSE ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
https://code.google.com/p/bullet/source/browse/trunk/src/vectormath/sse/
@bhouston , ์ด๋ฌํ ๋ฉ๋ชจ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ๋ ์ด์ ์ 3๊ณผ SIMD๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง ์๊ณ ๋ช ์๊ฐ ์์ ์ผ๋ง๋ ๋ง์ ์์ ์ ์ํํ ์ ์๋์ง ์์๋ณด๊ธฐ ์ํด ๋ฐ๋ก ๋ค์ด๊ฐ๊ณ ์์์ต๋๋ค(์ฐ๋ฆฌ๋ ๋๋ถ๋ถ์ ํ๋ก์ ํธ์์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค). ๋ฐ๋ผ์ ์ธ ๊ฐ์ง๋ฅผ ์๋ ์ฌ๋์ ์ด ํผ๋๋ฐฑ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์, ๋ด ํธ์ง๊ธฐ์์ ๊ทธ๊ฒ์ ๊บผ์ผํฉ๋๋ค.
@tschw ํ๋ ฌ/๋ฒกํฐ ์ํ์ ๋ํ ๋ฉ๋ชจ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ๊ทธ๊ฒ ๋ ๋ซ๋ค๋ ๋ง์ด ๋ง์ต๋๋ค.
@Globegitter ๋ค์์ ๊ฐ์ฒด์ ํ๋กํ ํ์ ์ ๋ํ setter/getter์ ๋ ๋์ ์์ ๋๋ค. https://github.com/mrdoob/three.js/blob/master/src/core/Object3D.js#L83
ES2015 ์์ ์ ๋ช ์ผํธ(์ฃผ๋ก ๋ ธ๋์์)
let x = 1, y = 2
์ ๊ฐ์ ๋ด ๊ฒฝํ ์ฝ๋์์ v8์ด ๊ฒฐ๊ตญ ์ง์๋ ๊ฒ์ผ๋ก ์์ํ์ง๋ง v8์ ์ต์ ํ ํด์ ํฉ๋๋ค.๋ฐ๋ ์ ์ ๋๋ ๋ช๋ช Three.js ํจ์(4x4 ํ๋ ฌ ๊ณฑ์ , Vector4 ๋ฑ)๋ฅผ SIMD๋ก ๋ณํํ๊ณ ๋น์ ์ ๊ทธ๊ฒ์ ์๋ํ ์ ์์ต๋๋ค. ์ด๋ ์์ ์์๋ ๋ถ๋งํฌ๋ก ์๋ํ์ง๋ง ์ง๊ธ์ ์ต์ Three ๋ฒ์ ์ผ๋ก ์์ ํ๋ ค๋ฉด ์๋ก ๊ณ ์นจ์ด ํ์ํ ์ ์์ต๋๋ค.
350% ์ฑ๋ฅ ํฅ์์ ๊ฑฐ์ง๋ง์ ๋๋ค :)
๋ํ Vector3์ ์ผ๋ถ๋ฅผ ์ด์ํ์ง๋ง ์ฃผ์์ด ๋ฌ๋ ค ์์ต๋๋ค.
https://github.com/DVLP/three.turbo.js
ํธ์ง: ๋ด ํ๋ ๋๋ผ์ด๋ธ ์ด๋๊ฐ์ ์ต์ ๋ฒ์ ์ด ์์ผ๋ฏ๋ก ์ด ํ๋ก์ ํธ๋ฅผ ๊ณง ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.
๋ฉ์ง ์์ฒญ ๋ฐ ์์ +1.
์ฑ๋ฅ์ ํ์ธํ๊ณ ํด๋น ์ฑ๋ฅ์ ๋ฐ๋ผ ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ์ฑํ ๋๋ ๋นํ์ฑํํ๋ ์์คํ
์ด ํ๋ฅญํ ๊ฒ์
๋๋ค.
์ฑ๋ฅ์ ํ์ธํ๊ณ ํด๋น ์ฑ๋ฅ์ ๋ฐ๋ผ ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ์ฑํ ๋๋ ๋นํ์ฑํํ๋ ์์คํ ์ด ํ๋ฅญํ ๊ฒ์ ๋๋ค.
ํ๋๋ Vector3 ๋ชจ๋ ๋ด์ ๋ ๊ฐ์ Vector3 ์ ์๊ฐ ์๊ณ SIMD๊ฐ ๊ธฐ๋ณธ์ธ์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ๋ก ํ๋ ๋๋ ๋ค๋ฅธ ํ๋๋ฅผ ๋ฐํํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ํจ๊ณผ๊ฐ ์๋ค๊ณ ์๊ฐํ์ง๋ง ๋ค์ด๋ก๋ ์ธก๋ฉด์ ์ฆ๊ฐ์ํฌ ๊ฒ์ ๋๋ค. SIMD๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์ ํ๋๋ ๋ช ๊ฐ์ง ํจ์๊ฐ ์์ ์ ์์ต๋๋ค. ์๋ง๋ SIMD๋ ์ํ ํจ์์ ์์ ํ์ ์งํฉ์ ๋ํด์๋ง ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋๋ค. ์ ์ฒด ์ฝ๋๋ก ๋ณผ ๋ ์ด๊ฒ์ด ์ ์๋ค๋ฉด ์ง๊ธ ๋ฃ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ SIMD๋ฅผ ์ฌ์ฉํ ์ ์์ ๋ ๋๋ ค์ง์ง ์๋๋ก ์ ํ ์ฌํญ์ด์ด์ผ ํฉ๋๋ค.
Matrix4
์ multiplyMatrices()
SIMD ๋ฒ์ ์ ํ์ฌ ๋ณต์กํ ์ฅ๋ฉด์์ ๊ฐ์ฅ ๋ง์ด ํธ์ถ๋๋ ๋ฐฉ๋ฒ์ด๋ฏ๋ก ์์ํ ์ ์์ต๋๋ค.
https://github.com/mrdoob/three.js/blob/dev/src/math/Matrix4.js#L383 -L419
@mrdoob ์ฌ๊ธฐ์์ ๋ณด์ธ์. ์๋ฃ๋์์ต๋๋ค.
https://github.com/DVLP/three.turbo.js/blob/master/src/three.turbo.js
๋ถ๋งํฌ๋ก ์ฌ์ฉํด ๋ณด์ธ์:
javascript:(function(){var script=document.createElement('script');script.src='//rawgit.com/DVLP/three.turbo.js/master/src/three.turbo.js';document.head.appendChild(script);})()
์ฑ ์์๋ ์ฝ๋ ์กฐ๊ฐ
THREE.Matrix4.prototype.multiplyMatrices = function(a, b) {
var ae = a.elements,
be = b.elements,
tb = this.elements,
arr1 = SIMD.Float32x4.load(ae, 0),
arr3 = SIMD.Float32x4.load(ae, 4),
arr5 = SIMD.Float32x4.load(ae, 8),
arr7 = SIMD.Float32x4.load(ae, 12),
arr2,
arr4,
arr6,
arr8,
res;
// calculated version
for (var i = 0; i < 4; i++) {
arr2 = SIMD.Float32x4.splat(be[i * 4]);
arr4 = SIMD.Float32x4.splat(be[i * 4 + 1]);
arr6 = SIMD.Float32x4.splat(be[i * 4 + 2]);
arr8 = SIMD.Float32x4.splat(be[i * 4 + 3]);
res = SIMD.Float32x4.add(SIMD.Float32x4.add(SIMD.Float32x4.mul(arr1, arr2), SIMD.Float32x4.mul(arr3, arr4)), SIMD.Float32x4.add(SIMD.Float32x4.mul(arr5, arr6), SIMD.Float32x4.mul(arr7, arr8)));
SIMD.Float32x4.store(tb, i * 4, res);
}
}
๋ฐ๋ ์ ์ ์ด๊ฒ์ ํ ์คํธํ์ ๋ "for" ๋ฃจํ๊ฐ ํผ์ณ์ง ๋ฒ์ ์ด ์ต์ํ์ผ๋ก ๋น ๋ฅด๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์ด๊ฒ์ด ๋ด ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฃจํ๊ฐ ์ฃผ์ ์ฒ๋ฆฌ๋๊ณ ํ๋ ์ฝ๋๋ ๋ฒ์ ์ด ์กด์ฌํ๋ ์ด์ ์ ๋๋ค.
"์ญ" ๋ถ๊ธฐ์ ๋ ๋ง์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
https://github.com/DVLP/three.turbo.js/blob/inverse/src/three.turbo.js
์ฑ๋ฅ ์ฐจ์ด๋ ๋ฌด์์ ๋๊น?
https://jsfiddle.net/tk6zx5dm/6/
๋์ ๋ฐ๋ผ ๋ค๋ฅด์ง. Nightly์์ ๊ณ์ฐ ์๊ฐ ์ ์ผ๋ฉด(<1000) ๊ฒฐ๊ณผ๊ฐ 3๋ฐฐ ๋๋ ค์ง๋๋ค. ๊ณ์ฐ ์๊ฐ 10000๋ณด๋ค ํฌ๋ฉด ์๋๊ฐ ~40% ๋ ๋น ๋ฆ ๋๋ค.
--js-flags="--harmony-simd"
ํ๋๊ทธ๊ฐ ํ์ฑํ๋ Chrome์๋ ์ค์ SIMD๊ฐ ์์ง๋ง JavaScript ํด๋ฆฌํ์ด ์์ผ๋ฏ๋ก ํ์ฌ๋ก์๋ ์๋๊ฐ ๋ช ๋ฐฐ๋ ๋๋ฆฝ๋๋ค.
ํ ์คํธํ๊ธฐ์ ์ข์ ๊ณณ์ Crosswalk ํ๋ก์ ํธ(Chromium ๊ธฐ๋ฐ)์ ๋๋ค. Android์ฉ ์ค์ SIMD๊ฐ ์์ผ๋ฏ๋ก ์ด JSFiddle์ ์ฝ๋๋ก ํ๋ก์ ํธ๋ฅผ ๋น๋ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ ๊ฒ์ ํฅ๋ฏธ๋ก์ด ์คํ์ด ๋ ์ ์์ต๋๋ค.
์ด์จ๋ ์์ ํ์ด์ง์ simd polyfill์ ํฌํจํ๊ณ ์ถ์ง ์์ ์ ์์ต๋๋ค. ์ฌ๋๋ค์ด ์ํํด๋ณด๊ธฐ์ ์กฐ๊ธ ๋ ํธ๋ฆฌํฉ๋๋ค. ์ฝ์์ ํ ์ค์ ๊ธฐ๋กํ๊ฑฐ๋ ๋ค์ดํฐ๋ธ๋ฅผ ์ฌ์ฉํ ์ ์์ ๋ ํ๋ฉด์ ํ ์คํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค(ํด๋ฆฌํ์ ์๋ง๋ ํ์ฑํ๋์๋ค๋ ํํธ๋ฅผ ๋จ๊ธธ ๊ฒ์ ๋๋ค).
Chrome์ด --js-flags="--harmony-simd"
js simd polyfill์ ๋ก๋ํ๋ ์ด์ ๋ฅผ ์์ํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์ ์์ญ์์ ์ด๋ฏธ ์ํํ ์ ์์ ๋ ์๋ฏธ๊ฐ ์์ต๋๋ค! ์ด๊ฒ์ ์ด์ ์ ๋ฌด์์
๋๊น? ์๋ง๋ ๊ทธ๋ค์ ์ ์ฐจ์ ์ผ๋ก ๋ฌผ๊ฑด์ ๋ฃ๊ธฐ ์์ํ ๊ฒ์
๋๋ค. ํ๋๊ทธ์์ ์ค์ ๋ก ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง, ์ข์ ๋งํฌ๊ฐ ์๋ค๋ ๊ฒ์ ์ด๋์ ์ฝ์์ต๋๊น? https://www.chromestatus.com/features/5757910432874496 ์์ "๊ฐ๋ฐ ์ค"์ธ ๊ฒ ๊ฐ์ต๋๋ค.
ํธ์ง: ์ค์ ์ฃผ์ ๋ก: ์ฑ๋ฅ์ด ๋ช ๊ฐ์ง ๊ฐ์ฒด์์ ๋ง์ ๊ฐ์ฒด์ ์ด๋ฅด๊ธฐ๊น์ง ๋ชจ๋ ๊ณณ์ ์๋ ๊ฒฝ์ฐ ์ด ํญ๋ชฉ์ three.js์ ๋ฃ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ต๋ค๊ณ ์์ํฉ๋๋ค. ๋ชจ๋ ๊ตฌํ์ด 1~N๊ฐ์ ๊ฐ์ฒด๋ก ์ฑ๋ฅ ํฅ์์ ์ ๊ณตํ ์ ์๋ค๋ฉด ๊ธฐ๋ฅ์ ๊ฐ์งํ๊ณ ์๋ฏธ๊ฐ ์๋ ๊ณณ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ค์ดํฐ๋ธ impls๊ฐ ์ผ๊ด์ฑ์ด ์์ผ๋ฉด ์ ์ฒด๊ฐ ์ด๋๋ก ๊ฐ๋์ง ์ ์ ์์ผ๋ฏ๋ก ๊ท์ฐฎ๊ฒ ์์ ํ๊ณ ๊ฐ๋ฐ ์๊ฐ์ ๋ ์์ฐ์ ์ธ ๋ฐ ์ฌ์ฉํ์ญ์์ค.
three๋ ์ฑ์ํด์ง๋ฉด ์ด์ ๋ฐ์ด๋ค ์ ์์ต๋๊น? ์๋๋ฉด three.js ์ง์์ด ๋ธ๋ผ์ฐ์ ๊ตฌํ์ ๋ ์ ํ ์ ์๋๋ก ํ ์ ์์ต๋๊น? ์ธ๋ฆฌ์ผ ์์ง ๋ฐ ๊ธฐํ ์๋ฎฌ๋ ์ด์ /์ํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด์ ์๋๋ ฅ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํนํ ์ผ๋ง๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ถ์ดํ๋์ง๊ฐ ์๋๋๋ค. ํ์ง๋ง ๋๊ฐ ์๊ฒ ์ด์.
Chrome์ด --js-flags="--harmony-simd"๋ฅผ ์ฌ์ฉํ์ฌ js simd ํด๋ฆฌํ์ ๋ก๋ํ๋ ์ด์ ๋ฅผ ์์ํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ํ ์คํธ๋ฅผ ์์ํ ์ ์๋๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ๊ดํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ์ด๊ฒ์ด WASM์ด ์ฒ์์ ๋ธ๋ผ์ฐ์ ์ ๋์ ๋๋ ๋ฐฉ์์ ๋๋ค.
๋ฐฑ๋ถ์ฅ์ด ํ์ํ๋ค๋ ๋ถ๊ฐํผ์ฑ์ ๋ท๋ฐ์นจํ๋ ๋ชจ๋ ์ฃผ์ฅ. ๊ธฐ๋ฅ์ ํ์ฑํ ๋๋ ๋นํ์ฑํํ๊ณ ์ต์ ์ ์ฑ๋ฅ์ ๊ฒฐ์ ํ ์ ์๋ ์ฑ๋ฅ์ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง. ๋ฐ๋ผ์ ๊ทธ๋ฆผ์ ๋งต ๋ฐ๋๋ ์นด๋ฉ๋ผ ๊ฑฐ๋ฆฌ ๋ฑ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋์ด์ผ ํฉ๋๋ค. ์ด์จ๋ ์ ๋ ์ด๊ฒ์ด ํ์ํ์ง ์์ ํ์ฌ ๋๊ตฌ๊ฐ ๋ ๊ฒ์ด๋ผ๋ ํฉ์๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋๋ ์ ์ฌ์์์ ์๋๋๋ผ๋ ๊ทธ ์ ์ ์์ ์์ ๊ฐ์งํ๊ณ ์ถ์ต๋๋ค.
์๋ง๋ Pollyfill์ ํ์ธํ๊ณ SIMD๋ฅผ ๋นํ์ฑํํ์ง๋ง ๋ค์ FPS๊ฐ ๋ชจ๋ ๊ฒ์ ์๋ ค์ค๋๋ค. ํ์ฑํ ๋๋ ๋นํ์ฑํํ ํญ๋ชฉ์ ์ฐ์ ์์๋ ์ฌ์ฉ์/์ฑ๋ณ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ๊ฐ์ฅ ์ข์ต๋๋ค. ๋ฃ๊ธฐ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค! ๊ฐ๊น์ด ์ฅ๋์ ๋ ๋น ๋ฅธ GL์ ๊ธฐ๋ํฉ๋๋ค. ๋๋จธ์ง๋ฅผ ๋ฅ๊ฐํ ์ค๋น๋ฅผ ํฉ์๋ค.
SIMD์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ํ๋ก์ธ์ค๋ Nightly์์ SIMD๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ๋ฌด์ํ๋ ์ค๋ฒํค๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. Chrome์ ์ฑ๋ฅ์ด ๋งค์ฐ ๊ถ๊ธํ์ง๋ง ์ค์ SIMD๊ฐ ์๋ ์ต์ Chromium์ ์ฌ๊ธฐ์ ์์ต๋๋ค. http://peterjensen.github.io/idf2014-simd/
๊ทธ๊ฒ์ ๋ก์๋ค.
์
๋ฐ์ดํธ:
์ด์ SIMD๋ Edge์์๋ ์๋ํฉ๋๋ค. about:flags ๋ก ์ด๋ํ์ฌ "์คํ์ JavaScript ๊ธฐ๋ฅ ํ์ฑํ"(Edge ๋ค์ ์์)๋ฅผ ์ ํํ์ฌ ํ์ฑํํ ์ ์์ต๋๋ค
์ด๊ฒ์ด ์ค์ SIMD์ธ์ง ํด๋ฆฌํ์ธ์ง ํ์คํ์ง ์์ต๋๋ค. ์ด ํ
์คํธ๋ ๋ด ์ปดํจํฐ์์ ~40% ๋ ๋๋ฆฐ SIMD๋ฅผ ๋ ๋๋งํฉ๋๋ค./ https://jsfiddle.net/tk6zx5dm/6/
Matrix4 ๊ฐ์ฒด์ ์บ์๋ SIMD ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ํ
์คํธ ๋ณํ, ์ด๊ฒ์ด ์ ์ฉํ ์ง ํ์คํ์ง ์์
https://jsfiddle.net/tk6zx5dm/15/
ํฅ๋ฏธ๋ก์ด ์ ์ ์บ์๋ SIMD ๊ฐ์ฒด๊ฐ ์๋ ์ฝ๋๊ฐ polyfill SIMD(...? ์ด์ํ)๋ฅผ ์ฌ์ฉํ๋ Chrome์์๋ _๋๋๋ก_ ๋ ๋น ๋ฆ
๋๋ค.
THREE.Matrix4.prototype.multiplyMatrices = function(a, b) {
var i = 4;
while(i--) {
SIMD.Float32x4.store(this.elements, i * 4,
SIMD.Float32x4.add(
SIMD.Float32x4.add(
SIMD.Float32x4.mul(
a.cacheSIMDRow1,
b.cacheSIMDSplat[i * 4]
),
SIMD.Float32x4.mul(
a.cacheSIMDRow2,
b.cacheSIMDSplat[i * 4 + 1]
)
),
SIMD.Float32x4.add(
SIMD.Float32x4.mul(
a.cacheSIMDRow3,
b.cacheSIMDSplat[i * 4 + 2]
),
SIMD.Float32x4.mul(
a.cacheSIMDRow4,
b.cacheSIMDSplat[i * 4 + 3]
)
)
)
);
}
}
์บ์ฑ - ๊ฒฐ๊ตญ์๋ ์ ์ฒด ์๋ฃจ์ ์ ๋๋ฆฌ๊ฒ ๋ ๋๋งํ ์ ์๋ ๋ชจ๋ updateMatrix()์์ ์คํ๋์ด์ผ ํฉ๋๋ค.
THREE.Matrix4.prototype.updateSIMDCache = function() {
this.cacheSIMDRow1 = SIMD.Float32x4.load(this.elements, 0);
this.cacheSIMDRow2 = SIMD.Float32x4.load(this.elements, 4);
this.cacheSIMDRow3 = SIMD.Float32x4.load(this.elements, 8);
this.cacheSIMDRow4 = SIMD.Float32x4.load(this.elements, 12);
if(!this.cacheSIMDSplat) {
this.cacheSIMDSplat = [];
}
for(var i = 0; i < 16; i++) {
this.cacheSIMDSplat.push(SIMD.Float32x4.splat(this.elements[i]));
}
};
ES6 ์คํ์ผ์ด ์ฌ๊ฒํ ๋์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ ์ฒด ์ฝ๋๋ ์ฐ๊ฒฐ๊ธฐ๋ฅผ ์คํํ์ง ์๊ณ ๋ ๋ผ์ด๋ธ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก babel๋ ์คํํ๊ณ ์ ์ ํ ๊ณณ์์ ES6 ํญ๋ชฉ์ ์ฌ์ฉํ๊ธฐ ์์ํ์ง ์๊ฒ ์ต๋๊น?
์ ์ฒด ์ฝ๋๋ ์ฐ๊ฒฐ๊ธฐ๋ฅผ ์คํํ์ง ์๊ณ ๋ ๋ผ์ด๋ธ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก babel๋ ์คํํ๊ณ ์ ์ ํ ๊ณณ์์ ES6 ํญ๋ชฉ์ ์ฌ์ฉํ๊ธฐ ์์ํ์ง ์๊ฒ ์ต๋๊น?
์ฃผ๋ก babel ์์ฑ ์ฝ๋์ ์ฑ๋ฅ ์ํฅ์ ๋ํ ํ ์คํธ๊ฐ ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ let/const ๋์ var๋ฅผ ์ฌ์ฉํ ๋ V8์ด ๋ ๋น ๋ฅธ ์ฝ๋๋ฅผ ์์ฑํ๋ค๊ณ ๋ค์์ต๋๋ค.
์ฐธ๊ณ : ์ ๋ ์ต๊ทผ์ "์ปดํฉํธํ๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ES5๋ก ์ปดํ์ผํ ์ ์๋ ES ๊ธฐ๋ฅ์ผ๋ก ์ ํ๋๋" bublรฉ ๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์ต๋๋ค.
์ด ๋งํฌ์ ํ๋จ์ var ๋ let in ๋ฃจํ๋ฅผ ์ค๋ช
ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
http://stackoverflow.com/questions/21467642/is-there-a-performance-difference-between-let-and-var
๊ฐ์ธ์ ์ผ๋ก ๋๋ ํธ๋์คํ์ผ๋ฌ๊ฐ ์๋ ์๋ฃจ์
์ด ๋ธ๋ผ์ฐ์ ์ ๋๋ฌํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. 'await'๋ ๋น ๋ฅผ์๋ก ์ข์ง๋ง ์ง๊ธ์ ๊ทธ๋ฐ ์์ผ๋ก ์์ฑ๋๊ณ ํธ๋์คํ์ผ๋ฌ๋ฅผ ํตํด ์คํ๋์ด์ผ ํฉ๋๋ค(๋์ฐํ๊ฒ ์์๋จ). ํ์ง๋ง Chrome์์ ์๋ํ๋ค๋ฉด?! ๊ทธ๋์ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ ๋ํ ํ
์คํธ? ๋๋ '์ผ์ดํฌ๋ฅผ ๋จน๊ฒ ํ๊ฑฐ๋ ํฌ๋กฌ์ ์ฌ์ฉํ๊ฒ ํ๋ผ'๊ณ ๋งํ๋ค. (๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ํํ).
'let'์ ํ
์คํธ๋ฅผ ํตํด ๋ ๋์ ๊ฒ์ผ๋ก ์
์ฆ๋ ์ํฉ์์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฒ์ ์ง์ ์ ํผํ๊ธฐ ์ํด 'var'๊ฐ ํธ์ด์คํธ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ํ๋ ๊ฒฝ์ฐ 'let'์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ํน์ ์ํฉ์์๋ 'let'์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ ์๊ฒ ์ ์งํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํธ๋์คํ์ผ๋ ์ฝ๋๋ ์์ผ๋ก ์ต์ ํํ๋ ๊ฒ๋งํผ ๋น ๋ฅด์ง ์์ต๋๋ค. JSPerf๊ฐ ๋ค์ด๋ ๊ฒ์ ์ ๊ฐ์
๋๋ค. ์ ๋ ๊ตฌ๊ธ๋ณด๋ค ๋ ์์ฃผ ๋ฐฉ๋ฌธํ๊ณค ํ์ต๋๋ค.
ํธ์ง: JSPerf.com์ ๋ค์ด๋์ง ์์์ต๋๋ค! 1๋
๋์ ์๋ํ์ง ์์ผ๋ฉด ์์ํ ์ฃฝ์ ์ค ์์์ด
let
๋ด Chrome Canary์์ var
๋ณด๋ค 3๋ฐฐ ๋๋ฆผ: https://jsperf.com/let-vs-var-performance/14
Firefox์ Edge์์๋ ์๋ ์ฐจ์ด๊ฐ ์์ง๋ง Chrome์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
๋๊ตฐ๊ฐ Safari์์ ํ
์คํธํ ์ ์์ต๋๊น?
์์ ์ ํ๋ฅญํ๊ณ ํ๋์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค! ์ด๊ฒ์ด ์ด๋ฏธ ์ผ์ ์ ์๋์ง ์๋ ์ฌ๋์ด ์์ต๋๊น?
@ Rubinhuang9239 ๋๋ ๊ทธ๊ฒ์ ์๋ํ๋ ์ฌ๋์ ๋ณด์ง ๋ชปํ์ต๋๋ค.
๋ด Chrome Canary์์ var๋ณด๋ค 3๋ฐฐ ๋ ๋๋ฆฝ๋๋ค: https://jsperf.com/let-vs-var-performance/14
๊ทธ๋งํ ๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ ํด๋น ํ
์คํธ๋ฅผ ์ฌ์ฉํ์ฌ Chrome 66, Firefox 59 ๋ฐ Edge 42์์ let
๋ฐ const
๊ฐ ์ด์ var
๋ณด๋ค ์ฝ๊ฐ ๋น ๋ฆ
๋๋ค.
ํด๋์ค ์ ํ์ ๋งค์ฐ ๊ฐ๋จํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ถ๋ถ์ ์์ ์ ๊ฝค ์ค๋ ์ ์ ์ํ๋ ๋กค์ ์ ์ฑํ์ด์์ต๋๋ค. ์์ ์ด ThreeJS์์ ๋ช ์๊ฐ ๋ง์ ํด๋์ค๋ฅผ ๊ตฌํํ ์ ์๋ค๋ ์ฌ์ค์ ๋๋ผ์ง ์์ ๊ฒ์ ๋๋ค.
๊ธ์, ์์ ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ํ๋ค๋ฉด ์๋ง 8์๊ฐ ์ ๋ ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค.
์๊ท๋ชจ๋ก ์์ํ์ฌ ์ํ ์์ ์ ๋จผ์ ๋ณํํ๊ณ ํ๋ณด๋ฅผ ํ ์๋ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ํจ๊ณผ๊ฐ ์๋ค๋ฉด, ๋ค๋ฅธ ์ฌ๋๋ค๋ก ๋์ด๊ฐ์ญ์์ค.
@looeee 1๋ ์ด ๋์์ผ๋ฏ๋ก ES6์ด ์ฑ๋ฅ์ ๋ฐ๋ผ์ก์ ์ ์์๋ ๊ฒ์ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค.
2019๋ ์ ๋ง์นจ๋ด ์์ /๋ฌธ์์์ ์ผ๋ถ ES6 ์ฝ๋๋ฅผ ์ฑํํ๊ธฐ ์์ํ๋ ํด์ ๋๋ค. @mrdoob? ๐
ES6์ ๊ฝค ์ค๋ซ๋์ ํ์ค์ด์์ผ๋ฉฐ ์๋ก์ด ๊ฐ๋ฐ์๋ ES6์ ๋ฐฐ์๋๋ค. ๋ํ #16220์์ ๋ ผ์ํ ๋๋ก ์์ ์์ IE11 ์ง์์ ์ค๋จํ ์ ์์ต๋๋ค. ์ด๋ค ๊ฐ๋ฐ์๊ฐ IE11์ ์ฌ์ฉํ์ฌ three.js ์์ ๋ฅผ ๋ณด๋์? ๐
์ ์ฌ์ฉ์๋ฅผ ์ํ ์ฝ๋๋ฅผ ๋จ์ํํ๊ธฐ ์ํด ๊ฐ์ฅ ํ์ํ ๊ธฐ๋ฅ์ ํด๋์ค์ ํ ํ๋ฆฟ ๋ฌธ์์ด์ด๋ฉฐ ํ์ฌ ๊ธฐ๋ณธ const/let์ ์์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์์ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ฉด ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
๋จ๊ณ๋ณ๋ก. ์ง๊ธ์ three.module.js
๋ฅผ ์ฌ์ฉํ๋๋ก ์์ ๋ฅผ ์
๋ฐ์ดํธํ์ฌ ์์ํ๊ฒ ์ต๋๋ค.
๋จ๊ณ๋ณ๋ก. ์ง๊ธ์ three.module.js๋ฅผ ์ฌ์ฉํ๋๋ก ์์ ๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ์์ํ๊ฒ ์ต๋๋ค.
์ด ๋จ๊ณ๋ ์ ์ ๋์ ์๋ฃ๋์์ต๋๋ค. ์ด์ ๊ณต์์ ์ผ๋ก ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ ๋๊ฐ ๋์์ต๋๊น?
๋ ๋ช ์ ํ๋ณด์:
ํด๋์ค๋ ์ด๋ฏธ ์์ ์ง์ค๋ฉํธ๋ฆฌ์์ ์ผ๋ง ๋์ ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ์ ๋จผ์ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ํฌํํฉ๋๋ค. ๋๋ ๋์์ ๋ ๋ค ํ ์ ์์ต๋๋ค.
๊ด๋ จ: #11552, #18863
๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ๋ฌธ์ ๋ ์์ ์ ์ํด ํ์ฅ๋ ๊ฒฝ์ฐ ์์ ๋ ๋ณํ๋ ๋๊น์ง ES6 ํด๋์ค๋ก ์๋ฌด ๊ฒ๋ ๋ณํํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ examples/js
์ด ์ฌ๋ผ์ง ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ์๋ฏธํ ์ ์์ต๋๊น? modularize
์คํฌ๋ฆฝํธ๊ฐ ํด๋์ค๋ฅผ ์ง์ํ๋์ง ํ์ธํ ์ ์๋ค๋ฉด examples/js
ํ์ผ์ ์์ ํด๋์ค์ ๋์์ ๋ณํํฉ๋๋ค.
๋ด๊ฐ ์ดํดํ๋ ๋ฐ์ ๋ฐ๋ฅด๋ฉด examples/js
๋ ์ด์จ๋ ๋ฉ์ง ๋ชจ๋ ์ด๊ณผ ๊ธฐ๋ฅ์ด์ง๋ง ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๊ธฐ๋ณธ src/...
๋๋ฉด ๋น์จ์ด ์ด๊ณผ๋ ๊ฒ์
๋๋ค. ๋ณธ์ง์ ์ผ๋ก '์ผ๋ฐ์ ์ผ๋ก ์์ฑ๋๋ x, y, z์ ์์ /์คํฌ๋ฆฝํธ๋ฅผ ์ ๊ณตํฉ๋๊น?'๋ผ๋ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์
๋๋ค. ๋๋ three.js์ ๋๋ต์ด ๋๋ถ๋ถ ์์ด์ง๋ง ์น ์ฌ์ดํธ ๋ด์ ๊ต์ก ์๋ฃ๋ผ๊ณ ์ถ์ธกํ ์ํ์ด ์์ต๋๋ค. examples/js
์ ๊ฑฐํ๋ ๊ฒ์ ๊ทธ ์์ ์์ ๋ฌธ์ ๊ฐ ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. examples/js
๊ฐ ์ด๋ป๊ฒ ์ฐธ์กฐ/์ฌ์ฉ๋๋์ง ์ ๊ฐ ์๋ชป ์ดํดํ์ ์๋ ์์ง๋ง ๐ค ์๋ ค์ฃผ์ธ์.
examples/js
๋ฅผ ์น ์ฌ์ดํธ/๊ต์ก์ฉ์ผ๋ก๋ง ๋จ๊ฒจ๋๋ฉด ํด๋น ํด๋๊ฐ ์ปค๋ฎค๋ํฐ ์คํฌ๋ฆฝํธ/์ปจํ
์ธ /ํ๋ก์ ํธ/๊ธฐํ๊ฐ ๋ ์ ์๋ ์์ ์ ์ผ๋ถ๋ฅผ ๋์น๊ณ ์ฌ๋๋ค์ด ๊ณต์ ํ๊ณ ์ถ์ดํ์ง๋ง ๊ทธ ์๊ฐ ๋ ๋ฐฐ๋ก ์ค์ด๋ค๊ณ ์๋์ง ์์ง ๋ชปํฉ๋๋ค. ์ ๊ฒ.
๋๋ ํ์ ํ๋ค.
์์ ๋ ๋ณํ๋ ๋๊น์ง.
๋๋ ์ฐ๋ฆฌ์ ์ฐจ์ ์ฑ ์ผ๋ก ์ด ์๋ฆฌ๋ฅผ ์ข์ํ๋ค.
@DefinitelyMaybe ์ฐ๋ฆฌ๋ examples/js
์ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ์ง ์์ ๊ฒ์ด๋ฉฐ ์ฃผ๋ชฉํ ๋งํ ๋ ๊ฐ์ ๋๋ ํ ๋ฆฌ๊ฐ ์์ต๋๋ค:
examples/js/*
examples/jsm/*
์ฒซ ๋ฒ์งธ๋ ๋ ๊ฑฐ์ ํ์ผ์ ํฌํจํ๊ณ ํ์๋ ๋์ผํ ๊ธฐ๋ฅ์ ๊ฐ์ง ํด๋น ํ์ผ์์ ์์ฑ๋ ES ๋ชจ๋์ ํฌํจํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ฒฐ๊ตญ ์ฒซ ๋ฒ์งธ๋ฅผ ์ ๊ฑฐํ ๊ฒ์
๋๋ค. ๋ณํ์ ์ํํ๋ ์คํฌ๋ฆฝํธ๋ ํ์ฌ ES ํด๋์ค๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ๊ฑฐ๋ ๋๊น์ง examples/js
์๋ ํ์ผ์ ES ํด๋์ค๋ก ๋ณํํ ์ ์์ต๋๋ค. ๊ทธ๋ค ์ค ์ผ๋ถ๋ src/
ํ์ผ์ ํ์ฅํ๊ณ ES ํด๋์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ES ํด๋์ค๋ฅผ ํ์ฅํ ์ ์์ผ๋ฏ๋ก ์ด๊ฒ์ด ์ฐจ๋จ ์ข
์์ฑ์
๋๋ค.
์, ์ด์ ๋๊ธ์ด ํท๊ฐ๋ ธ๋ค์
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ examples/js๊ฐ ์ฌ๋ผ์ง ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ์๋ฏธํ ์ ์์ต๋๊น?
์ด์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
moduleize.js๋ ๋๋ฅผ ์ฌ๊ธฐ๋ก ๋ฐ๋ ค์จ ์ด๊ธฐ ํ๋ก์ ํธ๋ฅผ ์๊ฐ๋๊ฒ ํฉ๋๋ค. ๋ณํ๊ธฐ . ์ฌ๊ธฐ์์ ES6 ์์ ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ๋ํ ๋๊ธ์ ๋ณด์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ๋ก ๋์ด๊ฐ๊ธฐ๋ก ํ์ต๋๋ค.
๋ฐ๋ผ์ examples/js
๊ฐ ์ด๋ค ์์ผ๋ก๋ src
๋ฅผ ํ์ฅํ๋ฉด ๋ ๋ค ๋์์ ES6 ํด๋์ค๋ก ๋ณํ๋์ด์ผ ํฉ๋๋ค.
๋๋...
ํด๋์ค/es6์ ์์ฑํ ๋๊น์ง ๋ชจ๋ํ ์์
์ ํ์๊ฒ ์ต๋๊น?
์์ ๋ก ํ์ฅ๋ ๊ฒฝ์ฐ ES6 ํด๋์ค๋ก ๋ณํํ ์ ์์ต๋๋ค.
์์ ์์ ํ์ฅ๋์ง ์์ ์ฝ์ด์ ์ฌ์ ํ ๋ง์ ๊ฒ๋ค์ด ์์ต๋๋ค. ๋จผ์ ์์ํ์ง ์๊ฒ ์ต๋๊น?
๊ทธ๊ฒ์ ๋์๊ฒ ์ ๋ค๋ฆฐ๋ค.
@Mugen87 ES ํด๋์ค ๋ณ๊ฒฝ์ ๋ฐฉํดํ๋ ๋ค๋ฅธ ๊ฒ์ด ์์์ต๋๊น? ์๋๋ฉด
์์ ์์ ํ์ฅ๋์ง ์์ ์ฝ์ด์ ์ฌ์ ํ ๋ง์ ๊ฒ๋ค์ด ์์ต๋๋ค. ๋จผ์ ์์ํ์ง ์๊ฒ ์ต๋๊น?
์์ ์์ ํ์ฅ๋์ง ์์ ์คํฌ๋ฆฝํธ ๋ชฉ๋ก์ ๋๋ค .
ํธ์ง: ๋ชฉ๋ก์ด ์ ๋ฐ์ดํธ๋์์ต๋๋ค!
์ฐจ๋จ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ ์น์ ์ ๋๋ค.
THREE.<class>.call
๋ฐ Object.create( THREE.<class>
์ด ๊ฐ์ฅ ๊ฐ๋ฅ์ฑ ์๋ ํจํด์
๋๋ค. ์ด๋ Loader, EventDispatcher ๋ฐ PerspectiveCamera(์๋ง๋ ๋ง์ ๋ค๋ฅธ ๊ฒ๋ค ์ค)๋ฅผ ์์ง ํด๋์ค๋ก ๋ณํํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
https://github.com/mrdoob/three.js/commit/1017a5432eede4487436d6d34807fda24b506088
์ข์ต๋๋ค. let
๋ฐ const
์์ src/
์์ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@DefinitelyMaybe ์ด๊ฒ์ด ๋น์ ์ด ๋์์ฃผ๊ณ ์ถ์ ๊ฒ์ ๋๊น?
๐ ๐ฏ ์ ์ฅ ์!
ํซ ์ฝ๋๋ฅผ ๋ก๋ํ๋ ๊ฒฝ์ฐ const๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ๊ฒ์ด๋ผ๋ ์ฐ๋ ค๋ฅผ ์ ๊ธฐํ๊ณ ์ถ์์ต๋๋ค. ๋ชจ๋ JavaScript์์ ๊ฐ์ฒด๊ฐ const๋ฅผ ์์ ํ ๋ฎ์ด์ฐ๋ ๊ฒ์ด ์ฌ์ค์ด๋ผ๋ฉด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์์, ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ชจ๋ const๋ฅผ ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค. ์ ๋ ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ํด๋น ๊ฐ์ฒด ํธ๋ฆฌ(๊ตฌ์กฐ์ฒด์ ๊ฐ์)์ ํค์ ํ ๋น๋ ์ฝ๋ ๊ธฐ๋ฅ๊ณผ ๋ณํฉํ๊ธฐ๋ง ํ๋ฉด ๋๋ถ๋ถ์ ๊ฒฝ์ฐ let ๋๋ const๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
์ด์จ๋ ๊ทธ๊ฒ์ ์๊ฐํด๋ณผ ๋ฌธ์ ์ด๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก const๋ ์ ๋ ์ฌ์ฉ๋์ด์๋ ์ ๋๋ฉฐ ์ ๋ง ๋ถํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฃผ๋ก ํซ์ฝ๋ ๋ก๋ฉ์ ๋ํ ์ฐ๋ ค ๋๋ฌธ์
๋๋ค.
์ฌ์ ํ ๋๋ ๊ทธ๊ฒ๋ค์ด ๋น์ ์ด ์๊ฐํ๋ ๊ฒ๋งํผ ์ผ์ ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋์ ์๋ง๋ ๋ ๋ง์ ๊ฒ์ ์ดํดํ๋ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ด import reloading ๋๋ ๋ฌด์์ด๋ ์ ๋ํ ๋ฌด์๋ฏธํ ๊ด์ฌ์ฌ๋ผ๊ณ ์ค๋ช
ํ ์ ์์ ๊ฒ์
๋๋ค. ๊ณ ๋ คํ๊ณ ์
๋ ฅํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
'ํ์'๊ฐ ๋์! ๋ง์นจ๋ด.
Crockford๋ var๊ฐ ํฐ ์ค์์์ง๋ง ๋ณ๊ฒฝํ ์ ์์๊ธฐ ๋๋ฌธ์ 'let'์ด ์์ฑ๋์์ง๋ง var๋ ๊ฒฐํจ์ด ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ณ 'let'์ ์ฝ๋๋ var์ ๋ํ ์์ ์ฌํญ์ด์ด์ผ ํ์ง๋ง ์๋ชป ์ฝ๋ฉ๋ ๋ช ๊ฐ์ง ์ฃ์ง ์ผ์ด์ค๋ฅผ ๋จ๊ฒผ์ ๊ฒ์ด๋ผ๊ณ ๋งํ์ต๋๋ค. ์ผ์์ ์จ์ด. ์๊ฒฉํ ๋ชจ๋์ ํธ์ด์คํ ์ ์ด ์ฃผ์ ์ ๊ด๋ จ๋ ๋ฌธ์ ์ ๋๋ค.
@MasterJames const๋ฅผ ์ฌ์ฉํ ๋ ํซ ๋ฆฌ๋ก๋ฉ์๋ ์ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ ๋ React ํ๊ฒฝ์์ ์ผํ๋ฉฐ ํซ ๋ฆฌ๋ก๋ฉ์ด ํ์ค์ด๋ฉฐ ์ค๋๋ ํ์ค์ธ const์ let์ด ์์ต๋๋ค.
๋์ํฉ๋๋ค. ์ด๊ฒ์ ํซ ๋ฆฌ๋ก๋ฉ์ ๋ฐฉํดํ์ง ์์ต๋๋ค. ์๋ง๋ const
๋ฅผ Object.freeze
๊ฐ์ฒด๋ฅผ ๋ถ๋ณ์ผ๋ก ๋ง๋๋ ๊ฒ์ผ๋ก ์ฐฉ๊ฐํ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ ๊ฒ ํ ๊ณํ์ด ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
https://github.com/mrdoob/three.js/commit/1017a5432eede4487436d6d34807fda24b506088
์ข์ต๋๋ค.
let
๋ฐconst
์์src/
์์ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.@DefinitelyMaybe ์ด๊ฒ์ด ๋น์ ์ด ๋์์ฃผ๊ณ ์ถ์ ๊ฒ์ ๋๊น?