Chrome DevTools Digest 2016/04と2016/08～2016/10の確認メモ

# 概要

Chrome DevToolsの2016年4月と2016年8月から2016年10月までのアップデート内容の要約を確認したときのメモです。
確認は2016年10月31日から11月1日にかけて行いました。Chromeのバージョンは下記の環境に記載の通りです。

**環境**

* Windows10 Professional
* Chrome 54.0.2840.71 m (64-bit)
* Chrome Canary 56.0.2905.0 canary (64-bit)


# [DevTools Digest, October 2016] (https://developers.google.com/web/updates/2016/10/devtools-digest)

## Consoleに新しい機能を追加

Chrome 56よりDevToolsのConsoleにCodeMirrorが使われるようになります。これにより下記の機能が追加されます。

**CodeMirrorについて**

* [CodeMirror] (https://codemirror.net/)
* [Qiita - CodeMirrorでブラウザ上で動作するコードエディタを作る] (http://qiita.com/qmotas/items/90dbe1f8f60136cf39bf)


### Syntax highlight

入力中のコードでもSyntax highlightされます。
Chrome 54では評価後にSyntax highlightされます。

#### Canary 56

![syntax_hl_56.png](https://qiita-image-store.s3.amazonaws.com/0/22772/29e50750-9de6-2af7-459f-7ac55c3628cb.png)

#### Chrome 54  

入力中のコードはSyntax highlightされません。

![syntax_hl_54.png](https://qiita-image-store.s3.amazonaws.com/0/22772/87d0441c-dd5c-2060-df0b-cb3ee5f3b1a6.png)

コード評価後であればSyntax highlightされます。

![syntax_hl_54_2.png](https://qiita-image-store.s3.amazonaws.com/0/22772/b090682f-1d8d-c0ad-c1be-b89a759519a9.png)


### Matching parenthesis() / bracket[] / brace{} highlighting

余分なパレンセシース(パーレン)、ブラケット、ブレースが入力されると赤い下線が表示されます。

#### Canary 56

![syntax_red_56.png](https://qiita-image-store.s3.amazonaws.com/0/22772/9dbc9e6b-2e94-9b65-8110-bd091d1e3a2e.png)

![syntax_red_56_2.png](https://qiita-image-store.s3.amazonaws.com/0/22772/ee3871ac-8536-c508-62c8-ced3a140ac7b.png)

#### Chrome 54  

![syntax_red_54.png](https://qiita-image-store.s3.amazonaws.com/0/22772/d9e60588-ef2c-e504-1827-5a7bd6dc01c2.png)


### Smart return

コードブロックを入力すると<kbd>enter</kbd>を押す度にコードを実行するかどうか自動的に判断してくれます。
Chrome 54では複数行のコードブロックを入力したい場合<kbd>shift</kbd>+<kbd>enter</kbd>で改行する必要がありました。

#### Canary 56

下図ではわかりませんが、ブレースで改行していてカーソルは2行目にあります。
改行してもコードブロックの途中と判断されたのでコードは実行されません。

![syntax_mb_56.png](https://qiita-image-store.s3.amazonaws.com/0/22772/30846ae2-4e84-679b-c81b-16011f0cf85f.png)

#### Chrome 54  

改行するとコードが実行されてしまいますが、コードが完全ではないためSyntaxErrorになっています。

![syntax_mb_54.png](https://qiita-image-store.s3.amazonaws.com/0/22772/c05b448b-07a0-2f09-aa7e-6aa48288e9a4.png)


### Multiple cursors

いままではElementsパネルやSourcesパネルでも使えていましたが、Consoleでも使用できるようになります。

**Multiple cursorsについて**

* [Tip: Chrome DevTools supports multiple cursors & selections in the ...] (https://plus.google.com/+AddyOsmani/posts/dygXp9muRtn)
* [Chrome DevTools: DevTools - Command click to add multiple cursors in the Sources Panel] (https://umaar.com/dev-tips/12-multiple-cursors/)


## Canary now highlights non-top contexts red

Consoleパネルでcontext selectorに`top`以外を選択すると赤色で強調表示します。

* [Selecting execution context] (https://developers.google.com/web/tools/chrome-devtools/console/#execution-context)


## 指定できるユーザーエージェントにUC Browserが追加

### Canary 56

drawerでNetwork conditionsを開きます。

![uc_browser_1.png](https://qiita-image-store.s3.amazonaws.com/0/22772/60434739-fef3-ba2b-3749-e6801a33e773.png)

選択できるユーザーエージェントにUC Browserがあります。

![uc_browser_2.png](https://qiita-image-store.s3.amazonaws.com/0/22772/8e22b076-238a-24df-a1cc-b69743bea0cd.png)


**UC Browserについて**

* [Google Play - UCブラウザ－それを高速にサーフィン] (https://play.google.com/store/apps/details?id=com.UCMobile.intl&hl=ja)
* [Qiita - インドネシアの特殊なブラウザ事情(Opera Mini,UC Browser Mini)] (http://qiita.com/takanamito/items/8c2b6bc24ea01381f1b5)
* [Webプッシュ対応の中国発ブラウザ「UC Browser」について調べてみました] (https://pushnate.com/labs/webpush/ucbrowser-webpush)


# [DevTools Digest, September 2016] (https://developers.google.com/web/updates/2016/09/devtools-digest)

## CPU throttling for a mobile-first world

TimelineパネルにCPU throttlingが追加されました。
開発用PCにハンデを付けて実行環境をスマホの実機に近づけることができます。

![cpu_throttling.png](https://qiita-image-store.s3.amazonaws.com/0/22772/d8d3661d-45dc-f76f-f6be-2f023ae00465.png)


## Network view in timeline recordings

TimelineパネルにNetworkを計測するチェックボックスが追加されました。

![timeline_network.png](https://qiita-image-store.s3.amazonaws.com/0/22772/2bd4097e-a5a4-5508-df5f-779f7bd0f76b.png)


## Passive event listeners

ElementsパネルのEvent listenersペインで簡単にPassive listenerが確認できます。
下図は[Scroll jank due to touch/wheel handlers demo] (https://rbyers.github.io/scroll-latency.html)というデモページで確認したものです。

**Ancestors All**

![passive_all.png](https://qiita-image-store.s3.amazonaws.com/0/22772/b3c4f690-5fb2-4d55-3df0-c1ef3d1d5e3a.png)

**Ancestors Passive**

リストからPassiveを選ぶとPassive listenerでフィルタリングできます。

![passive_passive.png](https://qiita-image-store.s3.amazonaws.com/0/22772/9058b3bc-ce3b-f669-353b-a201c503d2d1.png)

カーソルをあわせると"Toggle Passive"というボタンが表示されます。クリックするとpassiveの切り替えができます。

![passive_passive_toggle.png](https://qiita-image-store.s3.amazonaws.com/0/22772/bab1c85b-82db-26a3-fc76-8de96f7e84c9.png)


### スクロールのパフォーマンスに影響を与えそうな箇所を確認

drawerでRenderingを開き"Scrolling Performance Issues"をチェックします。

![passive_rendering.png](https://qiita-image-store.s3.amazonaws.com/0/22772/43298909-eba4-2a1b-689f-ed32a0842df7.png)

`{passive:true}`ではないevent listenerが貼られている箇所が視覚化されます。

![passive_scroll_performance_issue.png](https://qiita-image-store.s3.amazonaws.com/0/22772/5f97ac55-0e85-bdd7-e711-e2853c5e1c0c.png)

### preventDefault

`{passive:true}`であるevent listenerのリスナー（コールバック関数）内では`preventDefault`を実行しないことが期待されますが、もし実行した場合はコンソールに下記のエラーメッセージが表示されます。

```js
var ele = document.getElementById('foo');
ele.addEventListener('touchstart',
  function(event) {
    event.preventDefault();  //←実行するとエラーメッセージが表示される
    alert('foo touchstart');
  },
  {passive: true}
);
```

```text:エラーメッセージ
Unable to preventDefault inside passive event listener invocation.
```


**Passive event listenersについて**

* [Improving Scroll Performance with Passive Event Listeners] (https://developers.google.com/web/updates/2016/06/passive-event-listeners)
* [ウェブのスクロール パフォーマンスを改善する新しい API のご紹介] (https://googledevjp.blogspot.jp/2016/06/api.html)
* [WICG/EventListenerOptions] (https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md)
* [Passive Event Listeners によるスクロールの改善] (https://blog.jxck.io/entries/2016-06-09/passive-event-listeners.html)


### addEventListener

**構文**

```
target.addEventListener(type, listener[, options]);
```


**addEventListenerについて**

* [MDN > 開発者向けのWeb技術 > Web API インターフェイス > EventTarget > EventTarget.addEventListener] (https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener)


## Activityでグルーピングする

TimelineパネルのCall Treeペインで、Activityでグルーピングできるようになりました。

![call_tree_activity.png](https://qiita-image-store.s3.amazonaws.com/0/22772/a8e12b94-7797-3a20-78ac-9681ccdd5d1a.png)

**Group by Categoryの場合**

![call_tree_category.png](https://qiita-image-store.s3.amazonaws.com/0/22772/406e0284-81b1-f9c3-92f0-50b72d300850.png)


## javascriptの関数の実行時間を確認する

Canaryに実装されていた機能がChromeにも反映されました。


# [DevTools Digest, August 2016] (https://developers.google.com/web/updates/2016/08/devtools-digest)

## Applicationパネル

ResourcesパネルはApplicationパネルに名前が変わりました。


## ChromeLens

ChromeLensというDevToolsの拡張機能があります。
Google Playよりインストールでき、インストールするとChromeLensというパネルが追加されます。

### ChromeLensの設定画面

![ChromeLens_1.png](https://qiita-image-store.s3.amazonaws.com/0/22772/9876dd05-e44b-b291-f5cc-ea35bb2152ab.png)

### 通常の見え方

![ChromeLens_2.png](https://qiita-image-store.s3.amazonaws.com/0/22772/6ba024ff-424d-598c-1515-17a0f5bb4eb5.png)

### ChromeLensを有効にしたときのページの見え方

下図は"Protanopia (red-blind)" (赤色覚異常)を設定した場合

![ChromeLens_3.png](https://qiita-image-store.s3.amazonaws.com/0/22772/0356acab-9679-427c-fadb-276641af68f1.png)


**ChromeLensについて**

* [ChromeLens - 視覚障害者向け開発のためのChrome DevToolsエクステンション] (http://chromelens.xyz/)
* [Github - chromelens] (https://github.com/chromelens/chromelens)


## New features now in Canary

Canary(Canary is currently Chrome 54)の新機能という見出しですが、現在のChromeのバージョンがこの時のCanaryのバージョンに追い付いているので、下記の機能はChromeでも使用できます。


### Sourcesパネルでカラーピッカーが使える

Sourcesパネルでもカラーピッカーが使えます。

![color_picker.png](https://qiita-image-store.s3.amazonaws.com/0/22772/3da1c989-0804-a46c-d8f3-1e87515733bb.png)


### リソースファイルをcURLで取得する

NetworkパネルのResourcesペインを右クリックしてCopy → Copy All as cURLで、ダウンロードしたリソースファイルをcURLで取得するコマンドをクリップボードに出力します。

![curl.png](https://qiita-image-store.s3.amazonaws.com/0/22772/e3f197b9-5d26-c663-5fbe-66759da6ee07.png)

```bat:例(一部抜粋)
curl "http://cdn.qiita.com/assets/public-925aa84e5d9c4e0bb836b5c13f4d5360.min.css" -H "If-None-Match: ^\^"184e21d6efed5ffb39eee6f04e7e970e^\^"" -H "Accept-Encoding: gzip, deflate, sdch" -H "Accept-Language: ja,en-US;q=0.8,en;q=0.6,en-GB;q=0.4" -H "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1" -H "Accept: text/css,*/*;q=0.1" -H "Referer: http://qiita.com/rubytomato^@github/items/4eff1ae1bcb6af1c8732" -H "Cookie: optimizelyEndUserId=oeu1396137852251r0.08233228186145425; mp_93e2889f9f1b2dadad8a0c788c0fd02f_mixpanel=^%^7B^%^22distinct_id^%^22^%^3A^%^20^%^2215674d7dbb3f5-017aca0e175fb6-47b1937-1fa400-15674d7dbb440d^%^22^%^2C^%^22^%^24search_engine^%^22^%^3A^%^20^%^22google^%^22^%^2C^%^22^%^24initial_referrer^%^22^%^3A^%^20^%^22https^%^3A^%^2F^%^2Fwww.google.co.jp^%^2F^%^22^%^2C^%^22^%^24initial_referring_domain^%^22^%^3A^%^20^%^22www.google.co.jp^%^22^%^7D; user_session_key=VRT3diNTrIFFZPO1eZZcNe0-bp3w_rKopIoKV3wqENM; mp_be87616606b0e26a87689099aab2c4e5_mixpanel=^%^7B^%^22distinct_id^%^22^%^3A^%^20^%^2222772^%^22^%^2C^%^22^%^24initial_referrer^%^22^%^3A^%^20^%^22http^%^3A^%^2F^%^2Fqiita.com^%^2Fdrafts^%^2F3e5653f077f7daf764fb^%^2Fedit^%^22^%^2C^%^22^%^24initial_referring_domain^%^22^%^3A^%^20^%^22qiita.com^%^22^%^2C^%^22^%^24search_engine^%^22^%^3A^%^20^%^22google^%^22^%^7D; optimizelySegments=^%^7B^%^22297528811^%^22^%^3A^%^22search^%^22^%^2C^%^22297722770^%^22^%^3A^%^22safari^%^22^%^2C^%^22298433371^%^22^%^3A^%^22true^%^22^%^7D; optimizelyBuckets=^%^7B^%^226814271724^%^22^%^3A^%^226776632712^%^22^%^7D; __utmt=1; __utma=115427846.1658762209.1468082992.1477916304.1477923241.422; __utmb=115427846.35.10.1477923241; __utmc=115427846; __utmz=115427846.1477869787.420.23.utmcsr=google^|utmccn=(organic)^|utmcmd=organic^|utmctr=(not^%^20provided); _ga=GA1.2.22772; _gat_user=1; _qiita_login_session=a1lvSVhZY1pwM2VHSFlMcTMwcm5pWktsQnB5WEJVeVExZGJBU3RLMTFLOTUrdmhVaXc0QTU1VTRWZWFyY1k0WisrR3k1K1ZtcDJKQ2JSa3ZZN2pFcURYTjM4Rld1azR4MG92OUhCUDArcW4rYzBpTDVySWEzSUREYjdxeVRySVE3Z2ZOc1VhNnArcXFOWWxzUmpXSkZZbTRCWHlWSzZMNzJtMFlqR2ZERzB3cGNNNWZRQk4rbWo0Vk9QTWU3R2JLLS0yaUdBd2hSZ2t2eVZqM1JDTXBZOGF3PT0^%^3D--def1d1cd7be7480924121fa8166192fb9072186e" -H "Connection: keep-alive" -H "If-Modified-Since: Mon, 31 Oct 2016 02:50:32 GMT" -H "Cache-Control: max-age=0" --compressed
```

### コマンドメニューからJavascriptの有効／無効を切り替える

Javascriptの有効／無効の切り替えは、いままではSettingsページでしかできませんでしたが、これからはコマンドメニューでも切り替えができます。

![javascript_command_menu.png](https://qiita-image-store.s3.amazonaws.com/0/22772/d219f5b4-5d46-0476-b009-5a4643db526f.png)


### console.warnにスタックトレース

console.warnにスタックトレースが含まれます。

```js:main.js
$(function() {
  sub2();
});
```

```js:sub2.js
function sub2() {
  sub3();
}
```

```js:sub3.js
function sub3() {
  console.warn("stack trace");
}
```

![stack_trace.png](https://qiita-image-store.s3.amazonaws.com/0/22772/49806c16-d429-a7e6-0267-5e39f1032fa1.png)


### javascriptの関数の実行時間を確認する

TimelineパネルでJS Profileを有効にしてページを読み込むと、Sourcesパネルで関数の実行時間を確認することができます。

![js_profile_1.png](https://qiita-image-store.s3.amazonaws.com/0/22772/08bf123e-8479-e8bd-1e2d-4b9c048760a5.png)

![js_profile_2.png](https://qiita-image-store.s3.amazonaws.com/0/22772/2f0c0364-6602-84a3-d756-94c9183388e7.png)



# [DevTools Digest: More Power with the New Command Menu] (https://developers.google.com/web/updates/2016/04/devtools-digest-command-menu)

## コマンドメニュー

<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>p</kbd>を押すとコマンドメニューが表示されます。
（Atom(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>p</kbd>)やVisual Studio Code(<kbd>F12</kbd>)のコマンドパレットと同じような機能です。）

![command_menu_1.png](https://qiita-image-store.s3.amazonaws.com/0/22772/79621a8c-0f2b-aa34-a8bd-e3adb703f273.png)

インクリメンタルサーチでメニューの絞り込みができます。
下図はconsoleでヒットするメニューを絞り込んだ状態です。

![command_menu_2.png](https://qiita-image-store.s3.amazonaws.com/0/22772/0bd7f040-9bd1-adb5-5e61-a5aa8777852e.png)


## HTMLのPretty Print

SourcesパネルでhtmlもPretty Printできるようになりました。

![pretty_print_1.png](https://qiita-image-store.s3.amazonaws.com/0/22772/5a66c88c-adab-df4e-0744-03745b8fdd6d.png)

↓ 整形後

![pretty_print_2.png](https://qiita-image-store.s3.amazonaws.com/0/22772/2b9b9b77-909c-702a-f804-8d6c9e2cf729.png)