Ember.js: Ember 2.4둜 μ—…κ·Έλ ˆμ΄λ“œ ν›„ 였λ₯˜

에 λ§Œλ“  2016λ…„ 03μ›” 09일  Β·  79μ½”λ©˜νŠΈ  Β·  좜처: emberjs/ember.js

이 였λ₯˜λŠ” 앱이 ν™œμ„±ν™”λ˜μ–΄ μž μ‹œ λ™μ•ˆ μ‹€ν–‰ 된 후에 만 β€‹β€‹λ°œμƒν•˜μ—¬ μ‚¬μš©μžκ°€ μ—¬λŸ¬ 경둜λ₯Ό 탐색 ν•  μˆ˜μžˆλŠ” 기회λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μž¬ν˜„ν•˜κΈ°κ°€ 맀우 μ–΄λ ΅κ³  μž μ‹œ 후에 "κ·Έλƒ₯ μΌμ–΄λ‚œ"κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. ν”„λ‘œλ•μ…˜ λΉŒλ“œ (ember.min.js)λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ‡ 번 μž¬ν˜„ ν•  수 μžˆμ—ˆμ§€λ§Œ 디버그 λΉŒλ“œ (ember.debug.js)λŠ” μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ μŠ€νƒμž…λ‹ˆλ‹€.

 "Cannot read property '_lookupFactory' of undefined"

TypeError: Cannot read property '_lookupFactory' of undefined
    at i (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:7:2712)
    at o (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:7:2833)
    at Object.a [as default] (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:7:2888)
    at Object.i [as subexpr] (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:6:4717)
    at a (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:16476)
    at i (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:16302)
    at n (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:16189)
    at Object.r [as acceptHash] (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:16075)
    at n (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:26102)
    at Object.a.inline (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:26664)

그것은 lookup-helper λ₯Ό κ°€λ¦¬ν‚€λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 쀑단 μ μ—μ„œ 이것을 μž‘μ„λ§ŒνΌ 운이 μ’‹μ•˜λ˜ 적은 λͺ‡ 번이고 μΆ•μ†Œ 된 owner 맀개 λ³€μˆ˜κ°€ μ •μ˜λ˜μ§€ μ•ŠλŠ” 것을 λͺ©κ²©ν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ env 은 μ •ν™• ν•΄ λ³΄μž…λ‹ˆλ‹€. 보닀:

image
image

λ‚˜λŠ” 그것이 계속 될 것이 거의 μ—†λ‹€λŠ” 것을 μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€. 이것을 μž¬ν˜„ν•˜λŠ” μ‰¬μš΄ 방법을 찾지 λͺ»ν–ˆμ§€λ§Œ, 이것을 λ””λ²„κΉ…ν•˜λŠ” 데 도움이 될 μŠ€νƒμ— λŒ€ν•œ μΆ”κ°€ 정보가 μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

v2.4.3은 https://github.com/emberjs/ember.js/pull/13118 에 μΆ”κ°€ 된 ν•΄κ²° λ°©λ²•μœΌλ‘œ λ¦΄λ¦¬μŠ€λ˜μ—ˆμŠ΅λ‹ˆλ‹€

λͺ¨λ“  79 λŒ“κΈ€

더 μ΄μƒν•œ 점은 λ§ˆμ§€λ§‰ 슀크린 μƒ·μ—μ„œ λ³Ό 수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 8786 행에 var s = "helper:" + e; κ°€ μžˆμŠ΅λ‹ˆλ‹€ ...ν•˜μ§€λ§Œ λ°”λ‘œ λ‹€μŒ 행에 s κ°€ μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. : confused : 마치 μŠ€νƒμ΄ 지루해 μ§€κ±°λ‚˜ ... λ˜λŠ” 크둬 디버거가 ν‹€λ¦° κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

λ‚˜λ„ 이런 κ±Έ λ³Έ μ μ΄μžˆλ‹€. λ“œλ¬Όκ²Œ λ°œμƒν•˜λ©° λ²ˆμ‹ν•˜λŠ” 방법을 λͺ¨λ¦…λ‹ˆλ‹€. λ˜ν•œ λ‚΄ μ•±μ˜ λ¬Έμ œμΈμ§€ λ‹€λ₯Έ 것인지 ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@raido λŠ” λ‚΄ μŠ€νƒκ³Ό 동일 _lookupFactory )? Ember 2.4.1을 μ‚¬μš©ν•˜κ³  κ³„μ‹­λ‹ˆκΉŒ? 이전 λ²„μ „μ˜ emberμ—μ„œμ΄ 문제λ₯Ό λ³Έ 적이 μžˆμŠ΅λ‹ˆκΉŒ?

μš°λ¦¬λŠ” Ember 2.2 => Ember 2.4μ—μ„œ μ—…κ·Έλ ˆμ΄λ“œν–ˆκ³  λ©°μΉ  이내에 μ„œλ²„ λ‘œκ·Έμ—μ„œμ΄ 문제λ₯Ό μƒλ‹Ήνžˆ 많이보기 μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

: +1 : 이것을 직접 λ³΄μ•˜κ³ , 버그 μŠ€λ‚΄κ·Έ λ‘œκ·Έμ—μ„œ μ €λ₯Ό ν˜Όλž€μŠ€λŸ½κ²Œν–ˆμŠ΅λ‹ˆλ‹€ :

11779      if (validateLazyHelperName(name, owner, env.hooks.keywords)) {
11780        var helperName = 'helper:' + name;
11781        if (owner.hasRegistration(helperName, options)) {
11782          helper = owner._lookupFactory(helperName, options);
11783        }
11784      }
11785    }

당신이 λ§ν•˜λŠ” κ²ƒμ²˜λŸΌ, μ–΄λ–»κ²Œ owner 수 undefined 라인에 11782 κ°€ κ³Όκ±° κ°€μ§€κ³ μžˆλŠ” 경우 owner.hasRegistration 전에 라인?

λ§ˆμ°¬κ°€μ§€λ‘œ μΆ•μ†Œ 된 κ²½μš°μ—λ§Œ ν”„λ‘œλ•μ…˜μ—μ„œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€ (μœ„λŠ” μ†ŒμŠ€ λ§΅μ—μ„œ κ°€μ Έμ˜¨ κ²ƒμž„).

λ‘œκ·Έμ— λ”°λ₯΄λ©΄ μ§€κΈˆκΉŒμ§€ Chromeμ—μ„œλ§Œ λ³Έ 적이 μžˆμŠ΅λ‹ˆλ‹€.

@workmanw 예, λ‚΄ 였λ₯˜λ„ _lookupFactory와 관련이 있으며 stacktraceμ—μ„œ lookupHelperλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

ν”„λ‘œλ•μ…˜ λΉŒλ“œμ˜ 둜그, 방금 v2.3.0μ—μ„œ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

TypeError: Cannot read property '_lookupFactory' of undefined
    at o (vendor-6292d0672068025de3c6d57c1fb505d0.js:7)
    at Object.a [as default] (vendor-6292d0672068025de3c6d57c1fb505d0.js:7)
    at Object.r [as lookupHelper] (vendor-6292d0672068025de3c6d57c1fb505d0.js:6)
    at Object.D [as inline] (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)
    at Object.i.inline (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)
    at l.populateNodes (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)
    at l.render (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)
    at i (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)
    at vendor-6292d0672068025de3c6d57c1fb505d0.js:16
    at s (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)

2.4.2μ—μ„œμ΄ 문제λ₯Ό 확인할 수 μžˆλŠ”λ°, 아직 κ°œλ°œμ—μ„œλŠ” λ³Ό μˆ˜μ—†λŠ” κ²½μš°λ„ μžˆμ§€λ§Œ ν”„λ‘œλ•μ…˜μ—μ„œλŠ” λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 이것은 λΆˆμ”¨ κ²€μ‚¬μžμ— μ˜ν•΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

μžμ„Έν•œ 정보 : 2.3.xμ—μ„œλŠ”μ΄ κΈ°λŠ₯이 μ—†μ—ˆμœΌλ©° μŠ€νƒμ€ λ™μΌν•©λ‹ˆλ‹€ (_lookupFactory).

νŽΈμ§‘ : 이것이 λΆˆμ”¨ κ²€μ‚¬μž λ¬Έμ œκ°€ μ•„λ‹ˆλΌλŠ” 것을 확인할 수 있으며 κ²€μ‚¬μžκ°€ λΉ„ν™œμ„±ν™” 된 λ™μ•ˆ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

2.4.1 및 2.4.2μ—μ„œ 버그λ₯Ό ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. μΆ•μ†Œ 된 jsμ—μ„œλ§Œ λ°œμƒν•©λ‹ˆλ‹€.

@jcbvm @ gdub22 λ‘˜ λ‹€ μΌκ΄€λ˜κ²Œ μž¬ν˜„ ν•  수 μžˆμ—ˆμŠ΅λ‹ˆκΉŒ? λΆˆμ”¨ νšŒμ „μ„ λ§Œλ“€κΈ° μœ„ν•΄ μ•±μ—μ„œ 적어도 μΌκ΄€λœ 단계λ₯Ό 찾으렀고 λ…Έλ ₯ν–ˆμ§€λ§Œ 운이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

이것은 μ™„μ „νžˆ 일화 적이며 μ•„λ§ˆλ„ 뢉은 μ²­μ–΄ 일 μˆ˜λ„ μžˆμ§€λ§Œ, μ»΄ν¬λ„ŒνŠΈ 헬퍼 ( {{component componentName}} )둜 λ Œλ”λ§ 된 쑰상 μ»΄ν¬λ„ŒνŠΈκ°€μžˆλŠ” 헬퍼λ₯Ό λ Œλ”λ§ν•˜λ €κ³  ν•  λ•Œ λ°œμƒν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

@workmanw λ§ˆμ°¬κ°€μ§€λ‘œ μΌκ΄€λ˜κ²Œ μž¬ν˜„ ν•  수 μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μ•± μ „μ²΄μ—μ„œ {{component}} λ„μš°λ―Έλ₯Ό 많이 μ‚¬μš©ν•©λ‹ˆλ‹€.

@workmanw λŠ” 100 % μΌκ΄€λ˜μ§€ μ•Šμ§€λ§Œ 자체 ν…œν”Œλ¦Ώμ—μ„œ ꡬ성 μš”μ†Œ λ„μš°λ―Έλ₯Ό μ‚¬μš©ν•˜λŠ” νŠΉμ • ꡬ성 μš”μ†Œλ‘œ λ²”μœ„λ₯Ό μ’ν˜”λ‹€ κ³  μƒκ°ν•©λ‹ˆλ‹€.

UglifyλŠ” μœ„μ˜ ν•¨μˆ˜λ₯Ό λ‹€μŒκ³Ό 같이 λ³€ν™˜ν•©λ‹ˆλ‹€.

function n(e,t,r,n){
  var i=r.helpers[e];
  if(!i){
    var o=r.owner;
    if (a(e,o,r.hooks.keywords)){
      var s="helper:"+e;
      o.hasRegistration(s,n) && (i=o._lookupFactory(s,n));
    }
  }
  return i;
}

owner 에 λŒ€ν•œ 두 속성 μ•‘μ„ΈμŠ€κ°€ λͺ¨λ‘ 단일 ν–‰μœΌλ‘œ μ»΄νŒŒμΌλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 제 μƒκ°μ—λŠ” 좩돌이 μ‹€μ œλ‘œ 첫 λ²ˆμ§Έμ—μ„œ λ°œμƒν•˜κ³  μ†ŒμŠ€ 맡 좩싀도가 μ˜¬λ°”λ₯΄κ²Œ κ΅¬λ³„ν•˜κΈ°μ— μΆ©λΆ„ν•˜μ§€ μ•Šλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μΆ”κ°€ νŽΈμ§‘ : μ•„,ν•˜μ§€λ§Œ μΆ©λŒμ€ ν™•μ‹€νžˆ _lookupFactory property 에 λŒ€ν•œ κ²ƒμ΄λ―€λ‘œ λ‚΄ 좔츑이 잘λͺ»λ˜μ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€. ν˜ΈκΈ°μ‹¬ 많고 ν˜ΈκΈ°μ‹¬ λ§Žμ€.

@ ef4 μ•„λ§ˆλ„ ...ν•˜μ§€λ§Œ 디버거 μ—μ„œμ΄ μ˜ˆμ™Έλ₯Ό λͺ‡ 번 λ°œκ²¬ν–ˆμ§€λ§Œ o (슀 λ‹ˆνŽ«μ—μ„œ)λŠ” μ •μ˜λ˜μ§€ μ•Šμ•˜μ§€λ§Œ r.owner 은 μœ νš¨ν•œ μ†Œμœ μžμž…λ‹ˆλ‹€. 사싀, μ €λŠ” r.owner.hasRegistration(s,n) && (r.owner._lookupFactory(s,n)); ν•˜κ³  μˆ˜μ—…μ„λ°›μ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” Chrome이 μ˜ˆμ™Έλ₯Ό ν¬μ°©ν•˜μ—¬ 쀑단 된 μ΄ν›„μ΄λ―€λ‘œ 디버거가 μ˜€ν•΄μ˜ μ†Œμ§€κ°€μžˆλŠ” μƒνƒœ 일 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

@ ef4 예, ν™•μ‹€νžˆ μ΄μƒν•œ κ²ƒμž…λ‹ˆλ‹€.

μ–΄λ–€ 이유둜 V8이이λ₯Ό μ΅œμ ν™” ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? V8, @stefanpenner 의 닀크 μ•„νŠΈμ— λŒ€ν•΄ κ°€μž₯ 잘 μ•„λŠ” μ‚¬λžŒμ€ λˆ„κ΅¬μΌκΉŒμš”?

μΆ©λŒν•˜λŠ” 라인 μ½”λ“œκ°€ λ‹€μŒκ³Ό 같은 경우 :

o.hasRegistration(s,n) && (i=o._lookupFactory(s,n));

κ·Έλ•Œ:

  1. o.hasRegistration(s,n) 은 (λŠ”) 이미 진싀 값을 λ°˜ν™˜ν–ˆμŠ΅λ‹ˆλ‹€. 이것은 의미
  2. o λŠ” null λ˜λŠ” undefined κ°€ μ•„λ‹™λ‹ˆλ‹€. λ”°λΌμ„œ
  3. Cannot read property '_lookupFactory' of undefined κ°€ 잘λͺ»λ˜μ—ˆκ±°λ‚˜ v8의 λ²„κ·Έμž…λ‹ˆλ‹€.

λ‚˜λŠ” λͺ…λ°±ν•œ 것을 λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

이 문제λ₯Ό μž¬ν˜„ ν•œ μ‚¬λžŒλ“€μ„ μœ„ν•΄ μ–΄λ–€ λ²„μ „μ˜ Chrome을 μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? Firefox, IE λ˜λŠ” Safariμ—μ„œ μž¬ν˜„ ν–ˆμŠ΅λ‹ˆκΉŒ?

@wycats λ‚˜λŠ” 당신이 λ†“μΉœ λͺ…λ°±ν•œ 것을 보지 λͺ»ν•©λ‹ˆλ‹€. 이것듀은 λ‚΄κ°€ 도달 ν•œ 것과 같은 κ²°λ‘ μž…λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” Chrome μ΅œμ‹  버전 (48)μ—μ„œλ§Œ κΈ°λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μž¬μƒμ‚° ν…ŒμŠ€νŠΈμ—μ„œ 48.0.2564.116을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. 개인적으둜 Firefox, IE λ˜λŠ” SafariλŠ” μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ λ‹€μ‹œ μ‹œλ„ν•΄λ³΄κ³ λ³΄κ³ ν•˜κ² μŠ΅λ‹ˆλ‹€.

νŽΈμ§‘ : λ‚˜λŠ” νŠΈμœ„λ“€μ„ μƒμ„±ν•˜λŠ” μ§€μ κΉŒμ§€ 문제λ₯Ό λ‹¨μˆœν™” ν•  수 μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ„μ›€μ΄λœλ‹€λ©΄ 쀑단 μ μ—μ„œ μΌμ‹œ 쀑지 된 ν•˜λ‚˜ μ΄μƒμ˜ 였λ₯˜λ₯Ό λŒ€κΈ°μ—΄μ— μΆ”κ°€ν•˜κ³  λˆ„κ΅°κ°€ 크둬 디버거λ₯Ό λ‘˜λŸ¬λ³΄κ³  μ‹Άλ‹€λ©΄ 슀크린 νžˆμ–΄λ‘œλ‘œ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€. λ•Œλ‘œλŠ” 1 뢄에 3 번 μž¬ν˜„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ•Œλ‘œλŠ” 20 λΆ„ 이상 μ†Œμš”λ©λ‹ˆλ‹€.

@wycats μ•Œκ² μŠ΅λ‹ˆλ‹€. μ§€λ‚œ 1 μ‹œκ°„ λ™μ•ˆ Chrome, Safari 및 Firefoxλ₯Ό μ‚¬μš©ν•΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€. Chromeμ—μ„œλŠ” μ—¬λŸ¬ 번 μž¬ν˜„ ν•  수 μžˆμ—ˆμ§€λ§Œ Safari와 Firefoxμ—μ„œλŠ” μ „ν˜€ μž¬ν˜„ ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. 이것이 결정적인지 ν™•μ‹  ν•  수 μ—†μ§€λ§Œ Chrome νŠΉμ • 문제λ₯Ό 점점 더 많이 가리킀고 μžˆμŠ΅λ‹ˆλ‹€.

이 λͺ¨λ“  것이 http://yehudakatz.com/2010/01/02/the-craziest-fing-bug-ive-ever-seen/을 μƒκΈ°μ‹œν‚΅λ‹ˆλ‹€.

λ‚˜λ„ μž¬ν˜„ ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. μ €μ—κ²ŒλŠ” 일반적으둜 앱이 λΆ€νŒ… 될 λ•Œ λ°œμƒν•©λ‹ˆλ‹€. 앱을 μ—¬λŸ¬ 번 λ‹€μ‹œλ‘œλ“œν•˜λ©΄ 좩돌이 λ°œμƒν•  수 μžˆμ§€λ§Œ 일관성이 μ—†μŠ΅λ‹ˆλ‹€. 단 λͺ‡ λΆ„λ§Œμ— 5 번 μΆ©λŒν•˜κ±°λ‚˜ 30 λΆ„ 정도 걸릴 수 μžˆμŠ΅λ‹ˆλ‹€. μ΅œμ‹  Chromeμ—μ„œ ν…ŒμŠ€νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

@workmanw ν•΄λ‹Ή κΈ°λŠ₯을 νŠΉμ • λͺ¨λ“œλ‘œ μœ μ§€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 그러면 λ¬Έμ œμ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ‹œμ μ—μ„œ μš°λ¦¬λŠ” v8 μΉœκ΅¬λ“€λ„ ν•‘ν•΄μ•Όν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜μ΄λ₯Ό μœ„ν•΄μ„œλŠ” 볡제 (심지어 전체 μ•±)κ°€ ν•„μš”ν•  κ²ƒμž…λ‹ˆλ‹€.

νŠΉμ • λͺ¨λ“œμ—μ„œ κΈ°λŠ₯을 μœ μ§€ν•˜λ €λ©΄ v8의 일뢀λ₯Ό 천천히 λΉ„ν™œμ„±ν™”ν•˜κ³  버그가 μ€‘μ§€λ˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 그러면 κ·Όλ³Έ 원인에 더 κ°€κΉŒμ΄ λ‹€κ°€ 갈 수 μžˆμŠ΅λ‹ˆλ‹€.

λ¨Όμ € 크둬 v8을 λΉ„ν™œμ„±ν™” ν•œ μƒνƒœλ‘œ μ‹€ν–‰ν•˜μ—¬ 인라인을 λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€. --nouse_inlining (λ‚΄ 생각 μ—” μ΄κ²ƒμœΌλ‘œ μΆ©λΆ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€)

/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --js-flags="--nouse_inlining" --user-data-dir=/tmp/foobar

λ°˜λŒ€λ‘œ 크랭크 μƒ€ν”„νŠΈλ₯Ό λͺ¨λ‘ ν•¨κ»˜ λΉ„ν™œμ„±ν™”ν•˜μ‹­μ‹œμ˜€ --crankshaft=false

/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --js-flags="--crankshaft=false" --user-data-dir=/tmp/foobar

μ•ˆλ…•ν•˜μ„Έμš”.

μΉ΄λ‚˜λ¦¬μ•„κ°€ μ•„λ‹Œ Chrome 48을 μ‚¬μš©ν•˜μ—¬ ν…ŒμŠ€νŠΈν–ˆμŠ΅λ‹ˆλ‹€. μΉ΄λ‚˜λ¦¬μ•„μ™€ ν•¨κ»˜ ν•΄λ³΄μ‹œκΈΈ λ°”λΌμ‹œλ©΄ 기꺼이 도와 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

ν•¨κ»˜ --nouse_inlining λ‚˜λŠ”μ΄ 문제λ₯Ό μž¬ν˜„ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
ν•¨κ»˜ --crankshaft=false λ‚˜λŠ”μ΄ 문제λ₯Ό μž¬ν˜„ ν•  수 μžˆμ—ˆλ‹€.

이 μ‹œμ μ—μ„œ μš°λ¦¬λŠ” v8 μΉœκ΅¬λ“€λ„ ν•‘ν•΄μ•Όν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜μ΄λ₯Ό μœ„ν•΄μ„œλŠ” 볡제 (심지어 전체 μ•±)κ°€ ν•„μš”ν•  κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” μ™„μ „νžˆ μ΄ν•΄ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ•½ 4 μ‹œκ°„μ„ "전진"ν•˜κ³  이것을 μž¬ν˜„ν•˜λŠ” Ember-twiddle을 λ§Œλ“€κΈ° μœ„ν•΄ λ…Έλ ₯ν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것을 μœ„ν•΄ 무슨 일이 λ²Œμ–΄μ§€κ³  μžˆλŠ”μ§€ μΆ©λΆ„νžˆ μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. μ΄μ œλŠ” 볡제 단계λ₯Ό 쀄이고 κ°€λŠ₯ν•œ ν•œ 많이 μ•±μ—μ„œ μΆ”μΆœν•˜μ—¬ 볡제λ₯Ό λ‹¨μˆœν™”ν•˜κΈ° μœ„ν•΄ 앱을 μ‚¬μš©ν•˜μ—¬ "거꾸둜 μž‘μ—…"을 μ‹œμž‘ν•˜κ² μŠ΅λ‹ˆλ‹€.

--nouse_inlining으둜이 문제λ₯Ό μž¬ν˜„ ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμƒλ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λ―€λ‘œ 인라인 버그와 κ΄€λ ¨μ΄μžˆμ„ κ°€λŠ₯성이 κ°€μž₯ λ†’μŠ΅λ‹ˆλ‹€.

--crankshaft = falseλ₯Ό μ‚¬μš©ν•˜λ©΄μ΄ 문제λ₯Ό μž¬ν˜„ ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

이것은 잘λͺ»λœ ν”Œλž˜κ·Έ 일 수 μžˆμŠ΅λ‹ˆλ‹€. 기얡이 λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” μ™„μ „νžˆ μ΄ν•΄ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ•½ 4 μ‹œκ°„μ„ "전진"ν•˜κ³  이것을 μž¬ν˜„ν•˜λŠ” Ember-twiddle을 λ§Œλ“€κΈ° μœ„ν•΄ λ…Έλ ₯ν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것을 μœ„ν•΄ 무슨 일이 λ²Œμ–΄μ§€κ³  μžˆλŠ”μ§€ μΆ©λΆ„νžˆ μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. μ΄μ œλŠ” 볡제 단계λ₯Ό 쀄이고 κ°€λŠ₯ν•œ ν•œ 많이 μ•±μ—μ„œ μΆ”μΆœν•˜μ—¬ 볡제λ₯Ό λ‹¨μˆœν™”ν•˜κΈ° μœ„ν•΄ 앱을 μ‚¬μš©ν•˜μ—¬ "거꾸둜 μž‘μ—…"을 μ‹œμž‘ν•˜κ² μŠ΅λ‹ˆλ‹€.

@workmanw μž¬ν˜„ λ‹¨κ³„μ—μ„œμžˆλŠ” κ·ΈλŒ€λ‘œ μ•± (λ˜λŠ” μ•±μ˜ URL)을 곡유 ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?
ν˜„μ‹€μ μœΌλ‘œ 이것을 λΆ„λ¦¬ν•˜μ—¬ μž¬ν˜„ν•˜λŠ” 것은 κΉŒλ‹€λ‘œμšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.

A : sadpanda : ν•΄κ²° 방법은 ν•¨μˆ˜κ°€ 인라인 될 μˆ˜μžˆλŠ” μ΅œλŒ€ ASTλ₯Ό μ΄ˆκ³Όν•˜λ„λ‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λ ‡κ²Œν•˜λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•΄λ‹Ή ν•¨μˆ˜ 의 본문에 λ‹€μŒ λ¬Έμžμ—΄μ„ λ„£μœΌλ©΄ νŠΈλ¦­μ„ μˆ˜ν–‰ν•΄μ•Όν•©λ‹ˆλ‹€ (ν˜„μž¬ μ΄λŸ¬ν•œ μ œν•œ / νœ΄λ¦¬μŠ€ν‹±μ€ 초과 근무 μ‹œκ°„μ— 변경됨).

"Pork chop porchetta rump, bacon turducken filet mignon tri-tip drumstick picanha beef ribs sausage salami. Leberkas beef landjaeger bresaola, sausage meatloaf pastrami frankfurter ribeye jowl turducken drumstick flank. Pork loin shank tongue leberkas ham strip steak salami swine short ribs cupim. Strip steak sausage turkey tenderloin, alcatra turducken porchetta ribeye brisket spare ribs rump salami ground round tail frankfurter. Kielbasa cow porchetta, hamburger jowl salami turducken capicola beef. Corned beef meatloaf ball tip landjaeger shank pork belly. Short loin kielbasa pig tail, brisket cupim salami andouille hamburger sausage short ribs."

@workmanw 도 μΉ΄λ‚˜λ¦¬μ•„λ₯Ό 확인할 수 μžˆλ‹€λ©΄ νŽΈλ¦¬ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”.

κ·Έ ν•¨μˆ˜μ— λ‹€μŒ λ¬Έμžμ—΄μ„ λ„£μœΌλ©΄ νŠΈλ¦­μ„ μˆ˜ν–‰ν•΄μ•Όν•©λ‹ˆλ‹€ (μ§€κΈˆ λ‹Ήμž₯은 초과 근무λ₯Ό λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€)

내뢀에 λŒ€ν•œ λ‹Ήμ‹ μ˜ 지식은 λ‚˜λ₯Ό λ†€λΌκ²Œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@workmanw μž¬ν˜„ λ‹¨κ³„λ‘œ μ•±μ„μžˆλŠ” κ·ΈλŒ€λ‘œ 곡유 ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

λ„€, κ·Έλ ‡κ²Œ ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€. 쑰금만 μ£Όλ©΄ 사전 ν”„λ‘œλ•μ…˜ ν™˜κ²½ 쀑 ν•˜λ‚˜μ— λͺ‡ 가지 자격 증λͺ…을 ν”„λ‘œλΉ„μ €λ‹ν•˜κ³  데이터λ₯Ό μ€€λΉ„ν•©λ‹ˆλ‹€. ν•„μš”ν•œ 경우 μ†ŒμŠ€λ₯Ό κ³΅μœ ν•΄λ„λ˜μ§€λ§Œ 개인적으둜 κ³΅μœ ν•΄μ•Όν•©λ‹ˆλ‹€.

@workmanw 도 μΉ΄λ‚˜λ¦¬μ•„λ₯Ό 확인할 수 μžˆλ‹€λ©΄ νŽΈλ¦¬ν•©λ‹ˆλ‹€.

λλ‚œ. ν”Œλž˜κ·Έμ—†μ΄ μΉ΄λ‚˜λ¦¬μ•„ "버전 51.0.2673.0 μΉ΄λ‚˜λ¦¬μ•„ (64 λΉ„νŠΈ)"λ₯Ό ν™•μΈν–ˆμ§€λ§Œ μ•ˆνƒ€κΉκ²Œλ„ μ—¬μ „νžˆ μž¬ν˜„ ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

ν•„μš”ν•œ 경우 μ†ŒμŠ€λ₯Ό κ³΅μœ ν•΄λ„λ˜μ§€λ§Œ 개인적으둜 κ³΅μœ ν•΄μ•Όν•©λ‹ˆλ‹€.

보μž₯은 μ—†μ§€λ§Œ 개인적으둜 문제λ₯Ό 더 쀄이고 μ€„μ΄λŠ” 데 도움이 될 κ²ƒμž…λ‹ˆλ‹€. μ €λŠ” λ‹€μŒκ³Ό 같은 μΌμ„ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

  • V8 μ‚¬λžŒλ“€μ„μœ„ν•œ 볡제 μ€€λΉ„
  • μž„μ‹œ [BUGFIX] μ†”λ£¨μ…˜ 탐색
  • (였늘 / 이번 주말)에 V8 λ³΄κ³ μ„œ λ°›κΈ°

λ‚΄ μ•žμ—μžˆλŠ” μ•± (μ½”λ“œλ₯Ό λ³€κ²½ν•˜κ³  탐색 ν•  μˆ˜μžˆλŠ” κ³³)을 μ‚¬μš©ν•˜λ©΄ μ μ ˆν•œ ν•΄κ²° 방법 / μž¬μƒμ‚°μ΄ κ°€λŠ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŽΈμ§‘ : μ•„λž˜ 링크 된 μ‘μš© ν”„λ‘œκ·Έλž¨μ€ PR # 13118의 ν•΄κ²° 방법이 포함 된 ember λΉŒλ“œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 문제의 λ³΅μ œμ—λŠ” 더 이상 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 우리 앱을 μ‚¬μš©ν•˜μ—¬μ΄ 문제λ₯Ό μž¬ν˜„ν•˜λŠ” 데 κ΄€μ‹¬μ΄μžˆλŠ” μ‚¬λžŒμ΄ 있으면 μ €μ—κ²Œ μ—°λ½ν•˜λ©΄ μ•„λ§ˆλ„ κ·Έλ ‡κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


@stefanpenner κ·Έλž˜μ„œ νŽ˜μ΄μ§€μ— 일뢀 μ½”λ“œλ₯Ό μ‚½μž…ν•˜μ—¬ 볡제 μž‘μ—…μ„ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. μ €λ₯Ό λ―ΏμœΌμ‹­μ‹œμ˜€. 그렇지 μ•ŠμœΌλ©΄ μ•…λͺ½μ΄μ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€.

이것은 μ—¬μ „νžˆ ​​100 % μž¬ν˜„ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

1)이 URL 방문 : https://qa-integration.batterii.com/#/community/MTpDb21tdW5pdHksOTAwMQ/room/MTpSb29tLDE5NzQ2MzAwMQ/wall/MTpSb29tLDE5NzQ2MzAwMSxXYWxsLDEwMDAx

2) μ΄λ©”μΌλ‘œ 둜그인 : [email protected] 및 λΉ„λ°€λ²ˆν˜Έ : tomster1 . 그러면 λ‹€μŒκ³Ό 같은 νŽ˜μ΄μ§€λ‘œ λ”₯ λ§ν¬λ©λ‹ˆλ‹€.

image

3) λ‘œκ·ΈμΈν•˜μ—¬ μœ„ νŽ˜μ΄μ§€μ— λ°©λ¬Έν•œ ν›„ μƒˆλ‘œ κ³ μΉ¨ν•΄μ•Όν•©λ‹ˆλ‹€ (ν•΄λ‹Ή νŽ˜μ΄μ§€μ—μ„œ 정리λ₯Ό μ‹œμž‘ν•  수 μžˆλ„λ‘).

4) 크둬 디버거λ₯Ό μ—΄κ³  μ½˜μ†”μ—μ„œ λ‹€μŒμ„ μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

(function() {
var room = 'MTpSb29tLDE5NzQ2MzAwMQ',
    wall = 'MTpSb29tLDE5NzQ2MzAwMSxXYWxsLDEwMDAx',
    wallitem = 'MTpXYWxsSXRlbSwxOTg0NjMwMDQ';

function promiseTimer(ms) {
  return new Ember.RSVP.Promise(function(resolve) {
    Ember.run.later(resolve, ms);
  });
}

function timedTransition() {
  return BC.router.transitionTo.apply(BC.router, arguments).then(function() {
    return promiseTimer(800);
  });
}

function takeActions() {
  var downloadUrl = window.wallitemRecord.get('downloadUrl');
  window.open(downloadUrl);
  promiseTimer(1400).then(function() {
    return timedTransition('wall.wallitem', room, wall, wallitem);
  }).then(function() {
    return timedTransition('wall', room, wall);
  }).then(function() {
    return timedTransition('wall.wallitem', room, wall, wallitem);
  }).then(function() {
    return timedTransition('wall', room, wall);
  }).then(function() {
    return timedTransition('wall.wallitem', room, wall, wallitem);
  }).then(function() {
    return timedTransition('wall', room, wall);
  }).then(function() {
    return timedTransition('wall.wallitem', room, wall, wallitem);
  }).then(function() {
    return timedTransition('wall', room, wall);
  }).then(function() {
    return timedTransition('wall.wallitem', room, wall, wallitem);
  }).then(function() {
    return timedTransition('wall', room, wall);
  });
}

BC.store.findRecord('wallitem', wallitem).then(function(wallitem) { window.wallitemRecord = wallitem; });
$('<button id="crash-reproduce">Crash Reproduce</button>').appendTo('.top-right-nav');
$('#crash-reproduce').on('click', takeActions);
})();

5) Chrome 디버거λ₯Ό "μ˜ˆμ™Έ λ°œμƒμ‹œ μΌμ‹œ 쀑지"둜 μ„€μ •ν•©λ‹ˆλ‹€.

6) μ‚½μž… 된 μ½”λ“œλŠ” 였λ₯Έμͺ½ 상단에 λ²„νŠΌμ„ μΆ”κ°€ν•΄μ•Όν•©λ‹ˆλ‹€. κ·Έ λ²„νŠΌμ„ ν΄λ¦­ν•˜μ‹­μ‹œμ˜€. λ¨Όμ € μƒˆ 탭이 열리고 λ‹€μš΄λ‘œλ“œ ν•  파일이 트리거 된 λ‹€μŒ λͺ¨λ‹¬ λŒ€ν™” μƒμžκ°€ μ—¬λŸ¬ 번 열리고 λ‹«νž™λ‹ˆλ‹€. 이 λͺ¨λ‹¬μ€ μ‹€μ œλ‘œ "λΌμš°νŒ… κ°€λŠ₯"ν•˜λ―€λ‘œ 경둜 변경도 κ΄€μ°°ν•΄μ•Όν•©λ‹ˆλ‹€. λͺ¨λ‹¬μ„ 두 번째 λ˜λŠ” μ„Έ 번째둜 μ—΄ λ•Œ μ˜ˆμ™Έκ°€ λ°œμƒν•΄μ•Όν•©λ‹ˆλ‹€. 이 λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠμœΌλ©΄ λΈŒλΌμš°μ €λ₯Ό μƒˆλ‘œ 고치고 λ‹€μ‹œ μ‹œλ„ν•˜μ‹­μ‹œμ˜€ (4 단계뢀터 μ‹œμž‘).

image


κ·Έλ™μ•ˆ μ†ŒμŠ€ μ½”λ“œλ₯Ό 얻을 수 μžˆλ„λ‘ λ…Έλ ₯ν•˜κ² μŠ΅λ‹ˆλ‹€. Google App Engineμ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ μ—¬μ „νžˆ ν΄λΌμš°λ“œ μ„œλ²„μ— μ—°κ²°ν•΄μ•Όν•˜μ§€λ§Œ ν΄λΌμ΄μ–ΈνŠΈ 앱을 λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•  수 μžˆλ„λ‘ μ •λ ¬ ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€ (ν΄λΌμš°λ“œ μ„œλ²„μ— ν”„λ‘μ‹œ).

λ§ˆμ§€λ§‰μœΌλ‘œ μ €λŠ” μ§€κΈˆ μ—¬μœ λ₯Ό 가지고 있으며 동뢀 ν‘œμ€€μ‹œ κΈ°μ€€ μ˜€ν›„ 4 μ‹œκΉŒ μ§€μž…λ‹ˆλ‹€. ν•„μš”ν•œ 경우 슀크린 νžˆμ–΄λ‘œμ—κ²Œ 기뻐할 κ²ƒμž…λ‹ˆλ‹€. 내일도 ν•˜λ£¨ 쒅일 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

멋진 μž¬ν˜„ 단계!

λ‚˜λŠ” ν˜„μž¬ μ§‘μ•ˆμΌμ„ν•˜κ³  μžˆμ§€λ§Œ 였늘 늦게 (λ˜λŠ” 내일 μ•„μΉ¨) μ‘°μ‚¬ν•˜λ €κ³  λ…Έλ ₯ν•  κ²ƒμž…λ‹ˆλ‹€.

@stefanpenner κ°μ‚¬ν•©λ‹ˆλ‹€! 내일 ν•˜λ£¨ 쒅일 온라인 μƒνƒœκ°€λ˜λ©° ν•„μš”ν•œ 경우 기꺼이 도와 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. emberjs μŠ¬λž™μ—μ„œ λ‚˜λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ†ŒμŠ€ μ½”λ“œμ— μ•‘μ„ΈμŠ€ν•˜λŠ” 방법에 λŒ€ν•œ 이메일을 λ³΄λƒˆμŠ΅λ‹ˆλ‹€ (github 계정에 λ‚˜μ—΄λœ @gmail 둜 이메일을 보냄).

@stefanpenner 참고둜 단계λ₯Ό μ•½κ°„ μ‘°μ •ν–ˆμŠ΅λ‹ˆλ‹€. 우리 μ•±μ˜ "벽돌 λͺ¨λ“œ"λͺ©λ‘μ„ μ‚¬μš©ν•˜λ©΄ 문제λ₯Ό μž¬ν˜„ ν•  κ°€λŠ₯성이 훨씬 더 λ†’λ‹€λŠ” 것을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. λ³€κ²½λœ 것은 1 λ‹¨κ³„μ˜ URL, 2 단계 μ•„λž˜μ˜ 슀크린 μƒ·, 4 λ‹¨κ³„μ˜ μ½”λ“œ 슀 λ‹ˆνŽ«λΏμž…λ‹ˆλ‹€.

_ μœ„ μ§ˆλ¬Έμ— λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ 이것이 v8 / Chrome μ „μš© 인 경우 : _ 둜그λ₯Ό ν™•μΈν•˜κ³  8 건을 λ°œκ²¬ν–ˆμœΌλ©° Windows (7 및 10)μ—μ„œ λͺ¨λ“  Chrome (49/48)을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. λΆˆν–‰νžˆλ„ 더 λ§Žμ€ 데이터 ν¬μΈνŠΈκ°€ μ—†μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것을 μž¬ν˜„ν•˜λ €κ³  λ…Έλ ₯ν–ˆμ§€λ§Œ Twiddleκ³Ό λ‘œμ»¬μ—μ„œ 운이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ„μš°λ―Έκ°€μ—†λŠ” λ‹€λ₯Έ 앱이 ν”„λ‘œλ•μ…˜μ— 있고 μΆ©λŒν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ„μš°λ―Έμ—κ²Œλ§Œ ν•΄λ‹Ήλ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ 경둜 사이λ₯Ό μ•žλ’€λ‘œ νƒμƒ‰ν•˜λ„λ‘ κ°•μ œν•˜μ—¬ 무차별 λŒ€μž… ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν–ˆμœΌλ©° λ•Œλ‘œλŠ” 3 번의 μ „ν™˜ ν›„ 였λ₯˜κ°€ λ°œμƒν•˜κ³  였λ₯˜λ₯Ό λ˜μ§€κ³  λ‹€μŒ μ „ν™˜μœΌλ‘œ λ³΅κ΅¬ν•˜κ³  볡ꡬ ν›„ λ‹€μ‹œ μΆ©λŒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ³΄μ˜€μŠ΅λ‹ˆλ‹€.

νŽΈμ§‘ : λ‚˜λŠ” 그것이 μ „ν™˜ 사이에 50ms의 지연과 ν•¨κ»˜ μ€‘λ‹¨λ˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. κ·Έ ν›„ 5 번의 μˆ˜λ™ μž¬λ‘œλ“œλ₯Ό μˆ˜ν–‰ν–ˆκ³  ν…œν”Œλ¦Ώμ— 일뢀 λ„μš°λ―Έκ°€μžˆλŠ” 초기 "인덱슀 경둜"λ Œλ”λ§μ„ μˆ˜ν–‰ ν•  λ•Œ λΆ€νŒ…μ‹œ 좩돌이 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ 경둜 사이λ₯Ό μ•žλ’€λ‘œ νƒμƒ‰ν•˜λ„λ‘ κ°•μ œν•˜μ—¬ 무차별 λŒ€μž… ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν–ˆμœΌλ©° λ•Œλ‘œλŠ” 3 번의 μ „ν™˜ ν›„ 였λ₯˜κ°€ λ°œμƒν•˜κ³  였λ₯˜λ₯Ό λ˜μ§€κ³  λ‹€μŒ μ „ν™˜μœΌλ‘œ λ³΅κ΅¬ν•˜κ³  볡ꡬ ν›„ λ‹€μ‹œ μΆ©λŒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ³΄μ˜€μŠ΅λ‹ˆλ‹€.

이것은 λ‚΄ κ²½ν—˜μ„ μ ˆλŒ€μ μœΌλ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€.

우리의 경우 window.open λ₯Ό μ‚¬μš©ν•˜μ—¬ 파일 λ‹€μš΄λ‘œλ“œλ₯Ό νŠΈλ¦¬κ±°ν•˜κ³ μ΄ μž‘μ—…μ€μ΄ λ¬Έμ œκ°€ λ°œμƒν•  κ°€λŠ₯성을 λ†’μ΄λŠ” 데 λ„μ›€μ΄λ©λ‹ˆλ‹€ (ν•˜μ§€λ§Œ λ ˆλ“œ μ²­μ–΄ 일 수 있음). λ‚˜λ₯Ό μœ„ν•΄, λ•Œλ•Œλ‘œ λ‚˜λŠ” ꡴러 κ°€κ³  그것은 3 번째 λ˜λŠ” 4 번째 μ „ν™˜ 후에 10 번 쀑 10 번 λ°œμƒν•©λ‹ˆλ‹€. λ‹€λ₯Έ κ²½μš°μ—λŠ” 30 뢄에 ν•œ 번 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@workmanw λ‚˜λŠ” 그것을 μž¬ν˜„ν•˜λŠ” 데 λ„μ›€μ΄λ˜λŠ” "κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ”"μœ ν˜•μ˜ "κ°€λŠ₯성이 높은"μœ ν˜•μ˜ 것듀을 많이 가지고 μžˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” λ‚˜μ—κ²Œ 주어진 "힌트"μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ”°λ₯Ό 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. μ™„μ „νžˆ λ¬΄μž‘μœ„λ‘œ λ³΄μž…λ‹ˆλ‹€.

여기에 제곡된 볡제 단계에 따라 μ‘μš© ν”„λ‘œκ·Έλž¨λ„ μΆ©λŒν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ λ°œμƒν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@stefanpenner κΈ°λŠ₯ 본문에 "돼지 κ³ κΈ°"λ₯Ό μΆ”κ°€ν•˜λ €κ³ ν–ˆμ§€λ§Œ λ„μ›€μ΄λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ λ­”κ°€ 잘λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

μ–΄μ¨Œλ“ , λ‚˜λŠ” 이것을 더 자주 ν•  방법이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ‚˜λŠ” 이제 항상 λ™μΌν•œ λ„μš°λ―Έμž„μ„ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.λ‚΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μΆ©λŒν•©λ‹ˆλ‹€. λ‚˜λŠ” 계속 νŒŒλ‚Ό 것이닀.

μ§€κΈˆκΉŒμ§€ μ½˜μ†”μ΄ 좩돌 ν•  λ•Œ 일뢀 μ½˜μ†” 둜그 아웃을 κ΄€λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€. μ†Œμœ μž *κ°€ μ •μ˜λ˜μ§€ μ•Šμ•˜μ„λΏλ§Œ μ•„λ‹ˆλΌ helperName 도 μ •μ˜λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ ν•˜λ‚˜ μ΄μƒμ˜ 것이 λˆ„λ½λ©λ‹ˆλ‹€.

@workmanw λ‚΄ 앱이 더 많이 μΆ©λŒν•˜λ„λ‘ λ„μ™€μ£ΌλŠ” λͺ‡ 가지 단계 :

  • CLIλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‘œμ»¬μ—μ„œ 앱을 μ‹€ν–‰ν•˜κ³  bower_components / ember / ember.prod.jsλ₯Ό μˆ˜μ •ν•©λ‹ˆλ‹€.
  • hasRegistration μ•žκ³Ό 뒀에 λ‹€μŒκ³Ό 같이 μ½˜μ†” 둜그λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
if (validateLazyHelperName(name, owner, env.hooks.keywords)) {
        var helperName = 'helper:' + name;
        console.log("Before", helperName, owner !== undefined, owner._lookupFactory !== undefined);
        if (owner.hasRegistration(helperName, options)) {
          console.log("After", helperName, owner !== undefined);
          console.log("After _lookupFactory", owner._lookupFactory !== undefined);
          helper = owner._lookupFactory(helperName, options);
        }
      }

ember s --prod
이 κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

Before helper:t true true
After undefined false
TypeError: Cannot read property '_lookupFactory' of undefined

두 번째 μ½˜μ†” λ‘œκ·Έκ°€ μ‹€ν–‰λ˜λ©΄ helperNameκ³Ό ownerλŠ” 이미 "μ •μ˜λ˜μ§€ μ•Šμ€"μƒνƒœμ΄λ©° "After _lookupFactory"console.logμ—μ„œ 좩돌이 λ°œμƒν•©λ‹ˆλ‹€.

νŽΈμ§‘ :이 λ„μš°λ―Έ : t λŠ” ember-i18n이 μ•„λ‹Œ 맞좀 μ œμž‘ 된 κ²ƒμž„μ„ λͺ…μ‹¬ν•˜μ‹­μ‹œμ˜€.

+1ν•΄μ„œ μ£„μ†‘ν•©λ‹ˆλ‹€. "μ’‹μ•„μš” 이λͺ¨ν‹°μ½˜"만으둜 μ—…λ°μ΄νŠΈλ₯Ό κ΅¬λ…ν•˜λŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν”„λ‘œλ•μ…˜ λΉŒλ“œμ—μ„œλ§Œ μ •ν™•νžˆ λ™μΌν•œ 였λ₯˜μž…λ‹ˆλ‹€.

크둬 : 48.0.2564.116, 49.0.2623.87
MacOS : 10.9.5

@stefanpenner 와 --nouse_inlining λ°œμƒν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” nouse_inlining을 μ‚¬μš©ν•˜κ±°λ‚˜ μ‚¬μš©ν•˜μ§€ μ•Šκ³  λͺ‡ 번 싀행을 μ‹œλ„ν–ˆμ§€λ§Œ 인라인이 λΉ„ν™œμ„±ν™”λ˜μ—ˆμ„ λ•Œ μΆ©λŒν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. ν”Œλž˜κ·Έμ—†μ΄ Chrome을 μ‹€ν–‰ν•˜λ©΄ 이전 λŒ“κΈ€μ—μ„œ ν•΄λ‹Ή console.logs와 μΆ©λŒν•˜κΈ° μœ„ν•΄ 7 개 쀑 5 개λ₯Ό λ‹€μ‹œλ‘œλ“œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ—¬μ „νžˆ Twiddle λ˜λŠ” 데λͺ¨ μ•±μ—μ„œ 이것을 μž¬ν˜„ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” 방법을 μ•Œμ•„ λ‚΄μ•Όν•©λ‹ˆλ‹€.

λ‚˜λŠ” 2 μ›” 초 (2.3, 2.4), OSX와 Windows, Chromeμ—μ„œλ§Œ μ΄κ²ƒμ„λ³΄κ³ μžˆλ‹€. λͺ¨λ“  μ‚¬μš©μž μ •μ˜ Em.Helper.helpers 및 ember-truth-helpersλ₯Ό μ œκ±°ν•˜λ©΄ (λ¬Όλ‘ ) 였λ₯˜κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

은박지 λͺ¨μžλ₯Ό ν„Έμ–΄ λ²„λ¦¬λŠ” 버그λ₯Ό λ§Œλ‚œ 지 μ˜€λž˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
_ 당신은 ν˜Όμžκ°€ μ•„λ‹™λ‹ˆλ‹€. 진싀은 μ € λ„ˆλ¨Έμ—μžˆλ‹€._

EmberObserver.com의 였λ₯˜ λ‘œκ·Έμ—μ„œλ„μ΄λ₯Ό ν™•μΈν•˜μ‹­μ‹œμ˜€. μ˜€ν”ˆ μ†ŒμŠ€ https://github.com/emberobserver/client 이기 λ•Œλ¬Έμ— 유용 ν•  수 있기 λ•Œλ¬Έμ— μ°¨μž„

λ˜ν•œ Ember 2.4.1μ—μ„œ μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“  경둜, Windows 7, 8.1, 10, OS X 및 Ubuntu의 Chrome λ˜λŠ” Chromium 48μ—μ„œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

@typeoneerror fwiw μ €λŠ” 개인적으둜 μ‚¬λžŒλ“€μ΄ ν™˜κ²½μ— λŒ€ν•œ μ„ΈλΆ€ 정보λ₯Ό μ œκ³΅ν•˜λ©΄μ„œ λ™μΌν•œ 버그λ₯Ό κ²½ν—˜ν–ˆλ‹€κ³ λ³΄κ³ ν•˜κ²Œλ˜μ–΄ 맀우 κΈ°μ©λ‹ˆλ‹€.

λ‚˜λŠ” κ·ΈλŸ¬ν•œ λ³΄κ³ μ„œλ‘œ 인해 λˆ„κ°€ μ •ν™•νžˆ ν•΄λ₯Ό μž…μ„ 것인지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

방금 V8 버그 https://bugs.chromium.org/p/v8/issues/detail?id=4839λ₯Ό μ—΄μ—ˆμŠ΅λ‹ˆλ‹€

λ―Έμ•ˆν•˜μ§€λ§Œ μ‘°λ§Œκ°„ 더 μžμ„Ένžˆ μ‚΄νŽ΄λ³Ό μˆ˜μžˆλŠ”μ£ΌκΈ°κ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

μ„€λͺ… 된 것보닀 μž¬ν˜„ν•˜κΈ°κ°€ 더 μ–΄λ €μ› μ§€λ§Œ μ΅œμ‹  Mac OS Chromium λΉŒλ“œ 버전 51.0.2671.4 (64 λΉ„νŠΈ)μ—μ„œ μž¬ν˜„ ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

방금 ember.prod.js λΉŒλ“œκ°€μžˆλŠ” Twiddleμ—μ„œ 이런 일이 λ°œμƒν•˜λŠ” 것을 λ³΄μ•˜μŠ΅λ‹ˆλ‹€. Chrome 49.0.2623.87 (64 λΉ„νŠΈ), OS X 10.11.3

Uncaught TypeError: Cannot read property '_lookupFactory' of undefined VM3158 ember.prod.js:11783

λ³΅μ œλŠ” 아직 λΆˆλΆ„λͺ…ν•©λ‹ˆλ‹€. 일단 볡제 단계가 있으면 μ—¬κΈ°μ„œ Twiddle을 κ³΅μœ ν•˜κ² μŠ΅λ‹ˆλ‹€.

@raido --js-flags = "-predictable"을 μ‚¬μš©ν•˜μ—¬ Chrome을 μ‹€ν–‰ν•˜λŠ” 것이 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμ™€ κ΄€λ ¨λœ λͺ¨λ“  것과 같은 λΉ„κ²° 정성을 μœ λ°œν•˜λŠ” κ²ƒμœΌλ‘œ μ•Œλ €μ§„ λ‹€μ–‘ν•œ κΈ°λŠ₯을 ν•΄μ œν•©λ‹ˆλ‹€. 쒋은 μž¬ν˜„μ„ 찾으면 μ•Œλ €μ£Όμ„Έμš”!

: tada : 예이! λ‘œκ·Έμ—μ„œ 6 개 μ •λ„μ˜ μ‚¬λžŒλ“€μ΄ 51 개λ₯Ό ν¬ν•¨ν•œ λ‹€μ–‘ν•œ λ²„μ „μ˜ ν¬λ‘¬μ—μ„œ 이것을 μž¬ν˜„ ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

@krisselden μ£„μ†‘ν•©λ‹ˆλ‹€. λ‚˜λŠ” 이전 λ‹΅λ³€μ—μ„œ 항상 μž¬ν˜„ ν•  μˆ˜μžˆλŠ” 것은 μ•„λ‹ˆλΌλŠ” 것을 μ•”μ‹œν–ˆλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ, μž¬ν˜„ 단계에 λŒ€ν•œ μ˜κ²¬μ— λͺ…μ‹œ 적 μ΄μ—ˆμ–΄ μ•Όν–ˆμŠ΅λ‹ˆλ‹€. λ•Œλ•Œλ‘œ 그것은 μΌμ–΄λ‚˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. 여기에 μ—¬μ „νžˆ λ³€μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. 2 ~ 3 회 μ‹œλ„ 후에도 μ‰½κ²Œ λ°œμƒν•˜μ§€ μ•ŠλŠ” 경우 Chrome을 λ‹€μ‹œ μ‹œμž‘ν•˜λ©΄ 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

@stefanpenner μ§€κΈˆ λͺ‡ 가지주기가 있으며 6-8 μ‹œκ°„ λ™μ•ˆ λ°˜λ³΅ν•΄μ„œ μž¬ν˜„ν•˜λ €κ³ ν–ˆμŠ΅λ‹ˆλ‹€. μƒκ°μ΄λ‚˜ 예감이 μžˆμœΌμ‹œλ©΄ 기꺼이 νƒκ΅¬ν•˜κ² μŠ΅λ‹ˆλ‹€. 이 λ¬Έμ œμ— λŒ€ν•œ 도메인 지식이 μΆ©λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@workmanw @stefanpenner μ—¬κΈ°μ—μ„œ μ§„ν–‰λ˜λŠ” 전체 λ¬Έμ œμ— λŒ€ν•œ 지식과 λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 자주 μΆ©λŒν•˜λŠ” λ‚΄ νŠΈμœ„λ“€μ€ 이제 거의 μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° Chrome을 λͺ‡ 번 λ‹«κ³  μ—΄μ—ˆλ‹€λŠ” 것 μ™Έμ—λŠ” 아무것도 λ³€κ²½λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€ (μ•„λ§ˆ 관련이 μ—†μŒ). 정말 μ§œμ¦λ‚©λ‹ˆλ‹€.

@jakobkummerow --predictable ν”Œλž˜κ·Έλ‘œ λ‚΄ 앱을 μΆ©λŒμ‹œν‚¬ 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

https://github.com/runspired/bug-13071 μ—μ„œ μ‹€νŒ¨ν•œ 수락 ν…ŒμŠ€νŠΈλ₯Ό λ§Œλ“€λ €κ³ ν–ˆμŠ΅λ‹ˆλ‹€.

bower_components ember.debug.js 이 ember.prod.js 둜 κ΅μ²΄λ˜μ—ˆμœΌλ―€λ‘œ bower_components κ°€ μ»€λ°‹λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ μž¬ν˜„μ— μžˆμ–΄μ„œλŠ” 운이 쒋지 μ•Šμ•˜μ§€λ§Œ, λ‚˜λŠ” μ–΄λ–€ 버그 λ³΄κ³ μ„œμ—λ„ μœ„μ— λ‚˜νƒ€λ‚˜μ§€ μ•Šμ€ Chrome 47을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

@runspired λ‚˜λŠ”

λ‚΄κ°€ 가지고 λ†€μ•˜ 던 Twiddle https://ember-twiddle.com/7fdf923d89ea37095cf3

_lookupFactory λ©”μ‹œμ§€λ‘œ 각 μ „ν™˜μ΄ λλ‚œ κ²ƒμ²˜λŸΌ μ—°μ†μœΌλ‘œ μ„Έ 번 좩돌이 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

νŽΈμ§‘ : λ‚˜λŠ” 슀크린 μΊμŠ€νŠΈμ—μ„œ Twiddleμ—μ„œ 3 개의 μΆ©λŒμ— λŒ€ν•œ stackstracesλ₯Ό μž‘μ•˜μŠ΅λ‹ˆλ‹€. κ·Έ 쀑 2 κ°œλŠ” λ™μΌν•˜κ³  ν•˜λ‚˜λŠ” λ‹€λ¦…λ‹ˆλ‹€. https://www.dropbox.com/s/51uwx6zo1scs7il/bug-13071.mp4?dl=1

이 문제λ₯Ό μ•ˆμ •μ μœΌλ‘œ μž¬ν˜„ν•˜λŠ” 것은 λ„ˆλ¬΄ μ–΄λ ΅μ§€λ§Œ ν˜„μž¬ μš©μ˜μžλŠ” https://github.com/emberjs/ember.js/blob/cfed40154285501c19a60aef3c0f51c645c9d44d/packages/ember-runtime/lib/mixins/container_proxy.js#L115 -L119 λˆ„κ΅¬λ“ μ§€ μ‰½κ²Œ μž¬ν˜„ ν•  수 μžˆλ‹€λ©΄ 별칭을 직접 μž‘μ„±ν•˜κ³  ν”„λ‘μ‹œ λŒ€μƒμ„ 닫지 μ•ŠμŠ΅λ‹ˆλ‹€.

@workmanw λ‚΄κ°€ 문제라고 μƒκ°ν•˜λŠ” 것을 ν”Όν•˜κΈ° μœ„ν•΄ PR을 μˆ˜ν–‰ν•˜λ©΄ ν…ŒμŠ€νŠΈ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” λ˜ν•œ 처음으둜 이것을 μ³€λ‹€ (그리고 νŠΈμœ„ν„°μ—μ„œμ΄ 토둠을 λ³Έ 기얡이 λ‚œλ‹€). Chrome 48.0.2564.116 및 Ember 2.3.

Slackμ—μ„œ @krisselden κ³Ό μ±„νŒ…ν–ˆμŠ΅λ‹ˆλ‹€. 예, PR을 μ‹œλ„ν•΄ λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. λ‚΄ λ²ˆμ‹λ₯ μ€ μ‹œκ°„μ˜ μ•½ 33 % (λ„ˆλ¬΄ 자주)μž…λ‹ˆλ‹€.

@workmanw ember repoλ₯Ό λ³΅μ œν•˜κ³  curl https://github.com/emberjs/ember.js/pull/13116.patch | git am λ₯Ό μ‚¬μš©ν•˜κ³  npm run build ν•˜κ³  distλ₯Ό bower_components / ember둜 μ‚¬μš©ν•˜μ—¬ μœ„μ˜ μž‘μ—…μ„ μ‹œλ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@krisselden λΆˆν–‰νžˆλ„, 그것은 차이λ₯Ό λ§Œλ“€μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€ :(

v2.4.2 체크 μ•„μ›ƒν•˜κ³  패치λ₯Ό μ μš©ν•˜κ³  λΉŒλ“œλ₯Όν–ˆμŠ΅λ‹ˆλ‹€. ember.min.js 을 λ‚΄ app/bower_components/ember/ember.debug.js λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€. tmp/ 디렉토리λ₯Ό μ œκ±°ν•˜κ³  μ„œλ²„λ₯Ό μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. μ†ŒμŠ€ νƒ­μ—μ„œ νŒ¨μΉ˜κ°€ μ μš©λ˜μ—ˆμŒμ„ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

λˆ„κ΅°κ°€κ°€ λ‹€μ‹œ ν™•μΈν•˜κ³  μ‹Άλ‹€λ©΄ μ—¬κΈ° λ‚΄ νŒ¨μΉ˜μ™€ λΉŒλ“œ ν›„μ˜ ν•΄μ‹œκ°€ μžˆμŠ΅λ‹ˆλ‹€ : MD5 (dist/ember.min.js) = 23ab1021bebdf170d21338fecf347937

당신이 가지고 μžˆμ„μ§€λ„ λͺ¨λ₯΄λŠ” 아이디어λ₯Ό 계속 μ‹œλ„ν•˜κ²Œλ˜μ–΄ κΈ°μ©λ‹ˆλ‹€.

@workmanw https://bugs.chromium.org/p/v8/issues/detail?id=4839#c7 의 λ§ˆμ§€λ§‰ λŒ“κΈ€μ„ 기반으둜 μ½”λ“œλ₯Ό 보면 둜컬 λ„μš°λ―Έ 쑰회λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? _findHelper κ°€ 여기에 인라인되고 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€ https://github.com/emberjs/ember.js/blob/master/packages/ember-htmlbars/lib/system/lookup-helper.js#L62 이 κ²½μš°κ°€ 참인 것을 λ³Έ 적이 μ—†μœΌλ©° μ°Έμ΄λ˜λŠ” 경둜둜 이동할 λ•Œ hasRegistration 인라인 μ½”λ“œμ— deopt에 λŒ€ν•œ μ†Œμœ μžκ°€ μ—†μŠ΅λ‹ˆλ‹€.

λ‚΄ ν˜„μž¬ 생각은 https://github.com/emberjs/ember.js/commit/8af7da67c4b1eab94a6adfc82c91af98dc3ee532 κ°€ v8μ—μ„œ 버그λ₯Ό νŠΈλ¦¬κ±°ν•˜κ³  _findHelperκ°€ 둜컬 λ„μš°λ―Έλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ„κΈ°λ₯Ό μΈλΌμΈν•˜κ±°λ‚˜ λ”°λœ»ν•˜κ²Œν•˜λŠ” 것을 λ°©μ§€ν•˜λ©΄ 버그가 μˆ˜μ • 될 λ•ŒκΉŒμ§€ ν•΄κ²°λ©λ‹ˆλ‹€. v8.

@krisselden ν…ŒμŠ€νŠΈ ν•  μ€€λΉ„κ°€ 된 것이 있으면 μ‹œλ„ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚΄ μž¬μƒλ₯ μ€ @workmanw 와 거의 κ°™μŠ΅λ‹ˆλ‹€.

@workmanw https://bugs.chromium.org/p/v8/issues/detail?id=4839#c9 주석을 기반으둜 λ‚΄κ°€ λ§Œλ“  PR을 ν…ŒμŠ€νŠΈ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

홍보 https://github.com/emberjs/ember.js/pull/13118

이 λ³€κ²½μœΌλ‘œ λ‚΄ 앱을 μΆ©λŒμ‹œν‚¬ 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. λ³€κ²½ 사항을 되 돌리면 거의 μ¦‰μ‹œ 좩돌이 μ‹œμž‘λ©λ‹ˆλ‹€.

: confetti_ball : : tada : ν–ˆλŠ”λ° 문제λ₯Ό μž¬ν˜„ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 즉 μ„±κ³΅μ μœΌλ‘œ ν•΄κ²° 될 κ²ƒμ²˜λŸΌ 보인닀. :λ―Έμ†Œ:

νŽΈμ§‘ : Chrome 49 및 Chrome 51둜 ν…ŒμŠ€νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

보고 된 μ‹œλ‚˜λ¦¬μ˜€λ₯Ό λ©΄λ°€νžˆ λ”°λ₯΄λ €κ³  λ…Έλ ₯ν–ˆμ§€λ§Œμ΄ μ½”λ“œκ°€ Ember 2.3에도 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. Ember 2.3도이 문제λ₯Ό κ²ͺλ‚˜μš”?

예, Ember v2.3도 μ΄κ²ƒμ˜ 영ν–₯μ„λ°›λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ’‹μ•„, https://github.com/emberjs/ember.js/issues/13118 을 베타, 릴리슀 및 릴리슀 -2-3 브랜치둜 κ°€μ Έ μ™”μŠ΅λ‹ˆλ‹€. 릴리슀 및 베타 채널은 곧 μƒˆ λΉŒλ“œλ₯Ό 얻을 κ²ƒμž…λ‹ˆλ‹€ (Travisλ₯Ό 톡해). μž μ‹œ λ™μ•ˆ λ‘λ“œλ €μ„œ μ‹€μ œλ‘œμ΄ 문제λ₯Ό ν•΄κ²°ν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

@workmanw @raido 이 문제λ₯Ό μ°Ύμ•„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Chromiumκ³Ό ν˜‘λ ₯ν•˜μ—¬ 버그λ₯Ό μž¬ν˜„ν•˜λŠ” 데 λ§Žμ€ μ‹œκ°„μ„ 보내 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ .
μ±…μž„κ°μžˆλŠ” OSS μ‚¬μš©μžκ°€ 되렀고 λ…Έλ ₯ν•˜λ©΄μ„œ μ•ˆμ •μ μΈ μš”μ  / νŠΈμœ„λ“€ / 빈 / 등을 λ§Œλ“€ 수 μ—†μ–΄μ„œ ν•œ 달 λ„˜κ²Œ 문제 μ œμΆœμ„ κΈ°λ‹€λ¦° Heisenbugs 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. λ„ˆλ¬΄ λ§Žμ€ 논리λ₯Ό λ¬΄μ‹œν•˜κ³  λ‚΄ 잘λͺ»μ΄λΌκ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ λ²ˆμ—λŠ” 더 적극적으둜 λ™λ£Œ ν”Όν•΄μžλ₯Ό μœ„ν•΄ μŠ¬λž™ 룸을 ν•‘ν•  κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ‘ 잘 ν–ˆμ–΄μš”!

@ 2468ben λ‚˜λŠ” μš°λ¦¬κ°€ hesienbug / maybe vmbug λ ˆμ΄λΈ”μ„ 가져야할지 κΆκΈˆν•©λ‹ˆλ‹€.

[# 13118에 μ˜ν•΄ μˆ˜μ • 됨]

:)

@rwjblue μ§€κΈˆ "ember": "components/ember#9c3e5820" λ₯Ό μ‚¬μš©ν•˜λ„λ‘ bower.json을 μ—…λ°μ΄νŠΈν–ˆμœΌλ©° QAμ£ΌκΈ°λ₯Ό 톡해 λ³΄λ‚΄κ² μŠ΅λ‹ˆλ‹€. λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ μ•Œλ € λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

λŒ€λ‹¨νžˆ κ°μ‚¬ν•©λ‹ˆλ‹€!

λ˜ν•œμ΄ λ¬Έμ œκ°€ λ°œμƒν–ˆμœΌλ©° 이둜 인해 ν•΄κ²° 된 κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ ν•œ μ‹œκ°„ 이상 ember#9c3e5820 λΉŒλ“œμ— λŒ€ν•΄ μ‚¬μ΄νŠΈλ₯Ό 망치고 μžˆλŠ”λ° μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

v2.4.3은 https://github.com/emberjs/ember.js/pull/13118 에 μΆ”κ°€ 된 ν•΄κ²° λ°©λ²•μœΌλ‘œ λ¦΄λ¦¬μŠ€λ˜μ—ˆμŠ΅λ‹ˆλ‹€

였 이런,이 μŠ€λ ˆλ“œλ₯Ό μ°ΎκΈ° 전에이 버그λ₯Ό μž¬ν˜„ / μˆ˜μ •ν•˜λŠ” 데 μ‹œκ°„μ„ λ³΄λƒˆμŠ΅λ‹ˆλ‹€. 잘 ν–ˆμ–΄!

μš°λ¦¬λŠ” ν˜„μž¬ [email protected] μ—μ„œ 앱을 μ‹€ν–‰ν•˜κ³  있으며 μ½”λ“œμ— https://github.com/emberjs/ember.js/pull/13118에 ν•΄κ²° 방법이 ν¬ν•¨λ˜μ–΄ μžˆλ”λΌλ„ Sentry에 따라 μ •ν™•ν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. 😞

@ Turbo87 이 λ¬Έμ œλŠ” Chromeμ—μ„œλ„ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œμ΄λ₯Ό μ‹€ν–‰ν•  μˆ˜μžˆλŠ” Chrome 버전은 1 개 λ˜λŠ” 2 개만 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

같은 문제라고 ν™•μ‹ ν•©λ‹ˆκΉŒ?

@workmanw 예, λ˜‘κ°™μŠ΅λ‹ˆλ‹€. λΆ„λͺ…νžˆ 일뢀 μ‚¬μš©μžλŠ” μ—¬μ „νžˆ 이전 Chrome 버전을 μ‹€ν–‰ν•˜κ³  있으며 μ‹€μ œλ‘œ 일뢀 νŒŒμƒ λΈŒλΌμš°μ € (Sogou Explorer, Opera, Chromium, Dragon)λŠ” Sentry λ‘œκ·Έμ— 따라 μœ μ‚¬ν•œ λ™μž‘μ„ 보이고 μžˆμŠ΅λ‹ˆλ‹€.

:(. 고톡을 λŠλ‚λ‹ˆλ‹€. 일뢀 고객은 μ‚¬μš©μžλ₯Ό νŠΉμ • λ²„μ „μ˜ Chrome으둜 κ³ μ •ν•˜κ³  μ—…κ·Έλ ˆμ΄λ“œλ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” κΈ°μ—…μž…λ‹ˆλ‹€.

이 λ¬Έμ œκ°€ μ–΄λ–€ 식 μœΌλ‘œλ“  λ‹€μ‹œ λ‚˜νƒ€ 났을 κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€. λ‹Ήμ‹œμ—μ΄ ν•΄κ²° λ°©λ²•μœΌλ‘œ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆλ‹€κ³  100 % ν™•μ‹€ν•˜κ²Œ 말할 수 μžˆμŠ΅λ‹ˆλ‹€ ( v2.4.3 ).

여기도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.

@ Turbo87 νŠΉμ • 버전이 μžˆμŠ΅λ‹ˆκΉŒ?

  • 크둬 49.0.2623
  • 였페라 36.0.2130
  • 크둬 48.0.2564
  • Sogou Explorer 1.0
  • Chrome 48.0.2564
  • 크둬 50.0.2632

Chrome 49λŠ” μ–΄λ–€ 이유둜 λ“  κ°€μž₯ 일반적인 κ²ƒμž…λ‹ˆλ‹€

@ Turbo87 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법을 찾은 적이 μžˆμŠ΅λ‹ˆκΉŒ?

@givanse μš°λ¦¬λŠ” μ§€κΈˆκΉŒμ§€ Ember 2.12둜 μ—…κ·Έλ ˆμ΄λ“œν–ˆμœΌλ©° 더 이상이 λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰