SlideShare a Scribd company logo
1 of 34
JSX 速さの秘密
〜高速なJavaScriptを書く方法〜
DeNA Co., Ltd.
Kazuho Oku

1
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
JSXをご存知ですか?
 Javaっぽいプログラミング言語です
 JavaScriptにコンパイルされます
 JavaScriptよりJSXで書いたほうが高速に動作します

JSX 速さの秘密 - 高速なJavaScriptを書く方法

2
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Q. 高速な JavaScript を書く方法を教えてください

JSX 速さの秘密 - 高速なJavaScriptを書く方法

3
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
A. JSX を使いましょう

JSX 速さの秘密 - 高速なJavaScriptを書く方法

4
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
…

JSX 速さの秘密 - 高速なJavaScriptを書く方法

5
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
これだけでは芸がないので、JSX が行っている様々な
JavaScript 最適化技法を紹介します。

JSX 速さの秘密 - 高速なJavaScriptを書く方法

6
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
※これから説明することは、JSXを使って
いれば気にする必要のないことです
(自動で最適化されますから)

JSX 速さの秘密 - 高速なJavaScriptを書く方法

7
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
目次
 高速なJavaScriptを書くための3原則
 更なる高速化のために 〜 JSXの最適化コンパイラの仕
事

JSX 速さの秘密 - 高速なJavaScriptを書く方法

8
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
高速なJavaScriptを書くための3原則

JSX 速さの秘密 - 高速なJavaScriptを書く方法

9
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
高速なJavaScriptを書くための3原則
 オブジェクトを避ける
⁃ 例: arguments を使わない
 Hidden Classを意識したコードを書く

⁃ Inline Cache / 配列の要素の型
 組み込み関数が速いとは限らない
⁃ 遅くなることがある
•

例: Function#apply, Array#forEach

JSX 速さの秘密 - 高速なJavaScriptを書く方法

10
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
オブジェクト生成を最小限に
 オブジェクト生成を避ける理由
⁃ メモリ確保に時間がかかる
⁃ GCの原因になる

 オブジェクトが生成されるパターン
⁃ new, {...}, [...]
⁃ arguments の使用
•

使った瞬間にオブジェクトが生成されます

 オブジェクトが生成されそうで、されないパターン
⁃ ”abc”.foo()
•

foo 内での this は string? (ES5以降)

JSX 速さの秘密 - 高速なJavaScriptを書く方法

11
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Unboxing in JSX
 オブジェクトへのアクセスを、複数のローカル変数への
アクセスに変換する最適化
 最適化前:
var pt = new Point(x, y);
…

 最適化後:
var pt$x = x;
var pt$y = y;
…

 注意点:
⁃ オブジェクトを return したり他クラスのオブジェ
クトのプロパティにセットしている場合は使えない
JSX 速さの秘密 - 高速なJavaScriptを書く方法

12
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
プロパティアクセスを最小限に
 プロパティアクセス=オブジェクトの要素へのアクセス
⁃ 変数の要素へのアクセスなので、変数へのアクセス
より遅い

 最適化前:
Foo.bar
foo.func()

 最適化後:
Foo$bar

// プロパティアクセス → 変数アクセス

Foo$func(foo) // メソッド呼出 → 関数呼出
// (呼び出されるメソッドも変換)

JSX 速さの秘密 - 高速なJavaScriptを書く方法

13
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
newの呼出を避ける
 new Type(...) より { ... } の方が高速
⁃ Safari で有効な最適化。V8 だと遅くなる
 最適化前:
var pt = new Point(x, y);

 最適化後:
var pt = { x: x, y: y };

 注意点:
⁃ メソッド呼出や instanceof が不可能になる
•

メソッド呼出については、全頁のメソッドから関数への
変換を適用

JSX 速さの秘密 - 高速なJavaScriptを書く方法

14
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
argumentsを使わない
 遅いJavaScriptの例:
Point.prototype.set = function (a1, a2) {
if (arguments.length == 1) {
this.x = a1.x;

this.y = a1.y;
} else {
this.x = a1;
this.y = a2;
}
};

 高速に書くには、Point型を引数にとる setByPoint メ
ソッドと、座標の組を引数にとる setByXY メソッドを
別個に用意すべき
JSX 速さの秘密 - 高速なJavaScriptを書く方法

15
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
argumentsを使わない – JSXの場合
 そもそも arguments がない
 関数のオーバーロードが可能
⁃ コンパイル時に別名になる
// コンパイル後の名前: set$Lpoint
function set(pt : Point) : void {
this.x = pt.x;
this.y = pt.y;

}
// コンパイル後の名前: set$NN
function set(x : number, y : number) : void {
this.x = x;
this.y = y;
}

JSX 速さの秘密 - 高速なJavaScriptを書く方法

16
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
コンストラクタのオーバーロード
 通常の関数は名前を変えることでオーバーロード可能
 Q. コンストラクタの場合、どうするか?
 A. こんなコードを書く (JSXの内部実装より抜粋)
function $__jsx_extend(derivations, base) {
var ctor = function () {};
ctor.prototype = base.prototype;
var proto = new ctor();
for (var i in derivations)
derivations[i].prototype = proto;
}
function Point1(pt) { this.x = pt.x; this.y = pt.y; }
function Point2(x, y) { this.x = x; this.y = y; }
// new Point1 しても new Point2 しても同じ型のオブジェクトが生成するおまじない
$__jsx_extend([ Point1, Point2 ], Object);

JSX 速さの秘密 - 高速なJavaScriptを書く方法

17
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Hidden Classを意識したコードを書く

http://v8-io12.appspot.com/

JSX 速さの秘密 - 高速なJavaScriptを書く方法

18
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Hidden Classを意識したコードを書く (2)
 プロパティのセット順を一意に
⁃ JSXではプロパティ初期化時は条件分岐不可能
•

→ セット順が一意になる

•

Java と同様

 配列の要素型を一定に
⁃ JSXでは要素型毎に配列型を用意
•

number[], string[], Object[], Point[], …

 配列の要素をdeleteしない
⁃ JSXでは禁止
•

nullを代入することで対処(こちらのほうが高速)

JSX 速さの秘密 - 高速なJavaScriptを書く方法

19
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Hidden Classを意識したコードを書く (3)
 未初期化の要素にアクセスしない
⁃ JSXでは未初期化の要素にアクセスするとエラー
•

注: デバッグビルドのみ
⁃ リリースビルドではエラーチェック省略

 Polymorphicなコードを書かない
⁃ JSXではpolymorphicなコードは書けない
•

クラスベースの型指定が「必須」な処理系だから

•

テンプレートを使った場合は、引数の型ごとに個別にコ
ード生成

JSX 速さの秘密 - 高速なJavaScriptを書く方法

20
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
組み込み関数が速いとは限らない
 JavaScript VMの仕事
⁃ JavaScriptを機械語にJust-In-Time compile
•

使われるテクニック:
⁃ Inline Caching
⁃ インライン展開

 JavaScriptからC++コードを呼ぶのは遅い(逆も同様)

⁃ C++側で様々なチェックが必要
•

引数の数や型の確認等

•

言語をまたいだInline Cachingやインライン展開は無理

⁃ C++コードは静的にコンパイルされているため

JSX 速さの秘密 - 高速なJavaScriptを書く方法

21
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
組み込み関数が速いとは限らない (2)
 汎用的なAPIとして定義されているため遅いケースも
⁃ 数十倍遅いケースも
 避けるべき組み込み関数の代表例:

⁃ Function.prototype.call
⁃ Function.prototype.apply
⁃ Function.prototype.bind

⁃ Array.prototype.forEach
 ベンチマーク:

⁃ http://jsperf.com/f-p-bind-vs-closure
⁃ http://d.hatena.ne.jp/kazuhooku/20120612/133948
9758
JSX 速さの秘密 - 高速なJavaScriptを書く方法

22
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
組み込み関数が速いとは限らない (3)
 JSXの場合:
⁃ Function.prototype 系は存在しない
⁃ クロージャがthisを引き継げるような言語仕様
•

→ bindの必要性が低い

•

JSXのソースコード:
var f = function () : void {
this.n++;
};

•

コンパイル結果 (JavaScript):
var $this = this;

var f = function (){
$this.n++;
};

JSX 速さの秘密 - 高速なJavaScriptを書く方法

23
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
組み込み関数が速いとは限らない (4)
 JSXの場合:
⁃ Array#forEachは独自に実装
⁃ 言語仕様が硬い分、JavaScriptよりも処理が単純に

⁃ 参照:
http://d.hatena.ne.jp/kazuhooku/20120612/133948
9758

JSX 速さの秘密 - 高速なJavaScriptを書く方法

24
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
更なる高速化のために 〜 JSXの最適化コンパイラの仕事

JSX 速さの秘密 - 高速なJavaScriptを書く方法

25
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
インライン展開
 JavaScript VMは、インライン展開を行う
⁃ だが、最速ではない
•

理由: 毎回、呼び出される関数が差し替えられていない
か確認する必要があるため

⁃ JSXの場合:
•

コンパイル後に関数の差し替え不可能

•

最適化コンパイル時に、あらかじめインライン展開され
たJavaScriptを生成
⁃ → JavaScript VMによるインライン展開より高速
⁃ → 他の最適化も適用可能に

JSX 速さの秘密 - 高速なJavaScriptを書く方法

26
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
事前計算
 定数畳み込み
⁃ JSXのソースコード:
const name = ”John”;
…
console.log(”Hello, ” + N);

⁃ コンパイル結果 (JavaScript):
console.log(”Hello, John”);

JSX 速さの秘密 - 高速なJavaScriptを書く方法

27
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
事前計算 (その2)
 Dead-code Elimination
⁃ JSXのソースコード:
const DEBUG = 0;
…
if (DEBUG) console.log(”in debug mode”);

⁃ コンパイル結果 (JavaScript):
// からっぽ

JSX 速さの秘密 - 高速なJavaScriptを書く方法

28
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
LTO (リンク時最適化)
 以下のコードで、mの型は何?
function transform(m: Matrix, pt : Point) : Point {
return m.rotate(pt);
}

 mの型はMatrix型かもしれないし、Matrixの派生型かも
⁃ これでは、rotateの実装を特定できない
•

→ rotateをインライン展開できない

 そこでLTO!
⁃ LTO: プログラムが使用する全てのコードに関する情
報を使って(つまり、リンク時に)最適化
⁃ Matrixを継承した型がなければ、mの型はMatrix型

JSX 速さの秘密 - 高速なJavaScriptを書く方法

29
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
アフィン変換 (クラス定義)
class Matrix {

var m11 : number; var m21 : number; var m31 : number;
var m12 : number; var m22 : number; var m32 : number;
...
function transform(pt : Point): Point {

return new Point(
this.m11 * pt.x + this.m21 * pt.y + this.m31,
this.m12 * pt.x + this.m22 * pt.y + this.m32);
}

}
class Point {
var x : number; var y : number;
function constructor(x : number, y : number) {

this.x = x;
this.y = y;
}
...
JSX 速さの秘密 - 高速なJavaScriptを書く方法

30
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
アフィン変換 (コンパイル例)
 JSXのソースコード:
var pt = new Matrix(1, 0, 0, 0, 2, 0).transform(new Point(x, y));
x = pt.x;
y = pt.y;

 最適化コンパイル後 (JavaScript):
var pt$x = x + 0 * y;
y = 0 * x + 2 * y;
x = pt$x;

 適用された最適化手法:
⁃ LTO (transformの実装を確定)
⁃ インライン展開
⁃ Unboxing
⁃ 定数畳み込みとDCE
JSX 速さの秘密 - 高速なJavaScriptを書く方法

31
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
まとめ

JSX 速さの秘密 - 高速なJavaScriptを書く方法

32
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
高速なJavaScriptを書ける自信はありますか?
 JavaScriptには速度が遅くなる罠が色々
⁃ 速くできるところが速くなった結果、罠に落ちた時
の速度の落ち込みが大きくなった

 モジュールをまたぐ最適化で高速になるケースも
⁃ 例: アフィン変換
 高速かつメンテナンスが容易なJavaScriptコードを書く
のは難しすぎる
⁃ グループ開発では教育コストが大きくなりすぎる
⁃ 問題が顕在化してから対処するのでは間に合わない

JSX 速さの秘密 - 高速なJavaScriptを書く方法

33
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
JSXを使えば問題解決するよ!!!

JSX 速さの秘密 - 高速なJavaScriptを書く方法

34
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

More Related Content

What's hot

大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化DeNA
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~torisoup
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Satoshi Kubo
 
Spring Fest 2018 Spring Bootで作るRESTful Web Service
Spring Fest 2018 Spring Bootで作るRESTful Web ServiceSpring Fest 2018 Spring Bootで作るRESTful Web Service
Spring Fest 2018 Spring Bootで作るRESTful Web ServiceWataruOhno
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツpospome
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き土岐 孝平
 
Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解都元ダイスケ Miyamoto
 
What's new in Spring Batch 5
What's new in Spring Batch 5What's new in Spring Batch 5
What's new in Spring Batch 5ikeyat
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと心 谷本
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜aha_oretama
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~NTT Communications Technology Development
 
日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会Yushiro Furukawa
 
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメSatoshi Takami
 
今さら聞けないDiとspring
今さら聞けないDiとspring今さら聞けないDiとspring
今さら聞けないDiとspring土岐 孝平
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~UnityTechnologiesJapan002
 

What's hot (20)

大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
 
Spring Fest 2018 Spring Bootで作るRESTful Web Service
Spring Fest 2018 Spring Bootで作るRESTful Web ServiceSpring Fest 2018 Spring Bootで作るRESTful Web Service
Spring Fest 2018 Spring Bootで作るRESTful Web Service
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
 
Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解
 
What's new in Spring Batch 5
What's new in Spring Batch 5What's new in Spring Batch 5
What's new in Spring Batch 5
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
 
日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会
 
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
 
【Unity道場】使って覚えるTileMap
【Unity道場】使って覚えるTileMap【Unity道場】使って覚えるTileMap
【Unity道場】使って覚えるTileMap
 
今さら聞けないDiとspring
今さら聞けないDiとspring今さら聞けないDiとspring
今さら聞けないDiとspring
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
Marp入門
Marp入門Marp入門
Marp入門
 

Viewers also liked

HTTP/2の課題と将来
HTTP/2の課題と将来HTTP/2の課題と将来
HTTP/2の課題と将来Kazuho Oku
 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondKazuho Oku
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP betterKazuho Oku
 
Developing the fastest HTTP/2 server
Developing the fastest HTTP/2 serverDeveloping the fastest HTTP/2 server
Developing the fastest HTTP/2 serverKazuho Oku
 
H2O - the optimized HTTP server
H2O - the optimized HTTP serverH2O - the optimized HTTP server
H2O - the optimized HTTP serverKazuho Oku
 
Unix Programming with Perl
Unix Programming with PerlUnix Programming with Perl
Unix Programming with PerlKazuho Oku
 
HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向Kazuho Oku
 
illumos day 2014 SMB2
illumos day 2014 SMB2illumos day 2014 SMB2
illumos day 2014 SMB2gordonross
 
Mobile deviceperfoptimization jtpa_release
Mobile deviceperfoptimization jtpa_releaseMobile deviceperfoptimization jtpa_release
Mobile deviceperfoptimization jtpa_releaseHakuro Matsuda
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!Yuji Nojima
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話Yoshinori Matsunobu
 
Story Telling By Eddie Choi
Story Telling By Eddie ChoiStory Telling By Eddie Choi
Story Telling By Eddie ChoiEddie Choi
 
Phoenix Habitat For Humanity Leed Presentation
Phoenix   Habitat For Humanity Leed  PresentationPhoenix   Habitat For Humanity Leed  Presentation
Phoenix Habitat For Humanity Leed PresentationICF_HCD
 
Raccoon by Charles
Raccoon by CharlesRaccoon by Charles
Raccoon by Charlesvebrya
 
Unmanned Eyes In The Commercial Skies Presentation
Unmanned Eyes In The Commercial Skies PresentationUnmanned Eyes In The Commercial Skies Presentation
Unmanned Eyes In The Commercial Skies Presentationmseraj
 
How Stupid Can We Get
How Stupid Can We GetHow Stupid Can We Get
How Stupid Can We Getguest7cdf23
 
Persuasion Engineering - Training handout المادة التدريبية لدورة هندسة الإقناع
Persuasion Engineering - Training handout المادة التدريبية لدورة هندسة الإقناعPersuasion Engineering - Training handout المادة التدريبية لدورة هندسة الإقناع
Persuasion Engineering - Training handout المادة التدريبية لدورة هندسة الإقناعHani Al-Menaii
 
Language learning and teaching through social media
Language learning and teaching through social mediaLanguage learning and teaching through social media
Language learning and teaching through social mediaLis Parcell
 

Viewers also liked (20)

HTTP/2の課題と将来
HTTP/2の課題と将来HTTP/2の課題と将来
HTTP/2の課題と将来
 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and Beyond
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP better
 
Developing the fastest HTTP/2 server
Developing the fastest HTTP/2 serverDeveloping the fastest HTTP/2 server
Developing the fastest HTTP/2 server
 
H2O - the optimized HTTP server
H2O - the optimized HTTP serverH2O - the optimized HTTP server
H2O - the optimized HTTP server
 
Unix Programming with Perl
Unix Programming with PerlUnix Programming with Perl
Unix Programming with Perl
 
HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向
 
illumos day 2014 SMB2
illumos day 2014 SMB2illumos day 2014 SMB2
illumos day 2014 SMB2
 
Mobile deviceperfoptimization jtpa_release
Mobile deviceperfoptimization jtpa_releaseMobile deviceperfoptimization jtpa_release
Mobile deviceperfoptimization jtpa_release
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 
Story Telling By Eddie Choi
Story Telling By Eddie ChoiStory Telling By Eddie Choi
Story Telling By Eddie Choi
 
Phoenix Habitat For Humanity Leed Presentation
Phoenix   Habitat For Humanity Leed  PresentationPhoenix   Habitat For Humanity Leed  Presentation
Phoenix Habitat For Humanity Leed Presentation
 
Raccoon by Charles
Raccoon by CharlesRaccoon by Charles
Raccoon by Charles
 
Unmanned Eyes In The Commercial Skies Presentation
Unmanned Eyes In The Commercial Skies PresentationUnmanned Eyes In The Commercial Skies Presentation
Unmanned Eyes In The Commercial Skies Presentation
 
How Stupid Can We Get
How Stupid Can We GetHow Stupid Can We Get
How Stupid Can We Get
 
Not A Spy
Not A SpyNot A Spy
Not A Spy
 
Persuasion Engineering - Training handout المادة التدريبية لدورة هندسة الإقناع
Persuasion Engineering - Training handout المادة التدريبية لدورة هندسة الإقناعPersuasion Engineering - Training handout المادة التدريبية لدورة هندسة الإقناع
Persuasion Engineering - Training handout المادة التدريبية لدورة هندسة الإقناع
 
M02 un05 p01
M02 un05 p01M02 un05 p01
M02 un05 p01
 
Language learning and teaching through social media
Language learning and teaching through social mediaLanguage learning and teaching through social media
Language learning and teaching through social media
 

Similar to JSX 速さの秘密 - 高速なJavaScriptを書く方法

大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話terurou
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へonozaty
 
JSX の現在と未来 - Oct 26 2013
JSX の現在と未来 - Oct 26 2013JSX の現在と未来 - Oct 26 2013
JSX の現在と未来 - Oct 26 2013Kazuho Oku
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016kyoto university
 
TypeScript0.9
TypeScript0.9TypeScript0.9
TypeScript0.9ukayare
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Akira Inoue
 
2008-07-12 / WCAN 2008 Summer Ligntning Talks #2
2008-07-12 / WCAN 2008 Summer Ligntning Talks #22008-07-12 / WCAN 2008 Summer Ligntning Talks #2
2008-07-12 / WCAN 2008 Summer Ligntning Talks #2IWATA Susumu
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_publicKazuaki Ishizaki
 
TypeScript + Express
TypeScript + ExpressTypeScript + Express
TypeScript + Expresskamiyam .
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたItaru Kitagawa
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOneAdvancedTechNight
 

Similar to JSX 速さの秘密 - 高速なJavaScriptを書く方法 (20)

ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へ
 
JSX の現在と未来 - Oct 26 2013
JSX の現在と未来 - Oct 26 2013JSX の現在と未来 - Oct 26 2013
JSX の現在と未来 - Oct 26 2013
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
TypeScript0.9
TypeScript0.9TypeScript0.9
TypeScript0.9
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
マーブル図で怖くないRxJS
マーブル図で怖くないRxJSマーブル図で怖くないRxJS
マーブル図で怖くないRxJS
 
2008-07-12 / WCAN 2008 Summer Ligntning Talks #2
2008-07-12 / WCAN 2008 Summer Ligntning Talks #22008-07-12 / WCAN 2008 Summer Ligntning Talks #2
2008-07-12 / WCAN 2008 Summer Ligntning Talks #2
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
 
TypeScript + Express
TypeScript + ExpressTypeScript + Express
TypeScript + Express
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 

More from Kazuho Oku

HTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないときHTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないときKazuho Oku
 
QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7Kazuho Oku
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話Kazuho Oku
 
Recent Advances in HTTP, controlling them using ruby
Recent Advances in HTTP, controlling them using rubyRecent Advances in HTTP, controlling them using ruby
Recent Advances in HTTP, controlling them using rubyKazuho Oku
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsivenessKazuho Oku
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsivenessKazuho Oku
 
TLS & LURK @ IETF 95
TLS & LURK @ IETF 95TLS & LURK @ IETF 95
TLS & LURK @ IETF 95Kazuho Oku
 
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先Kazuho Oku
 
Cache aware-server-push in H2O version 1.5
Cache aware-server-push in H2O version 1.5Cache aware-server-push in H2O version 1.5
Cache aware-server-push in H2O version 1.5Kazuho Oku
 
HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計Kazuho Oku
 
H2O - making the Web faster
H2O - making the Web fasterH2O - making the Web faster
H2O - making the Web fasterKazuho Oku
 
JSON SQL Injection and the Lessons Learned
JSON SQL Injection and the Lessons LearnedJSON SQL Injection and the Lessons Learned
JSON SQL Injection and the Lessons LearnedKazuho Oku
 
Using the Power to Prove
Using the Power to ProveUsing the Power to Prove
Using the Power to ProveKazuho Oku
 
JSX - 公開から1年を迎えて
JSX - 公開から1年を迎えてJSX - 公開から1年を迎えて
JSX - 公開から1年を迎えてKazuho Oku
 
JSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the WebJSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the WebKazuho Oku
 
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜Kazuho Oku
 
JSX Design Overview (日本語)
JSX Design Overview (日本語)JSX Design Overview (日本語)
JSX Design Overview (日本語)Kazuho Oku
 

More from Kazuho Oku (20)

HTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないときHTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないとき
 
QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
Recent Advances in HTTP, controlling them using ruby
Recent Advances in HTTP, controlling them using rubyRecent Advances in HTTP, controlling them using ruby
Recent Advances in HTTP, controlling them using ruby
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsiveness
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsiveness
 
TLS & LURK @ IETF 95
TLS & LURK @ IETF 95TLS & LURK @ IETF 95
TLS & LURK @ IETF 95
 
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
 
Cache aware-server-push in H2O version 1.5
Cache aware-server-push in H2O version 1.5Cache aware-server-push in H2O version 1.5
Cache aware-server-push in H2O version 1.5
 
HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計
 
H2O - making the Web faster
H2O - making the Web fasterH2O - making the Web faster
H2O - making the Web faster
 
JSON SQL Injection and the Lessons Learned
JSON SQL Injection and the Lessons LearnedJSON SQL Injection and the Lessons Learned
JSON SQL Injection and the Lessons Learned
 
Using the Power to Prove
Using the Power to ProveUsing the Power to Prove
Using the Power to Prove
 
JSX - 公開から1年を迎えて
JSX - 公開から1年を迎えてJSX - 公開から1年を迎えて
JSX - 公開から1年を迎えて
 
JSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the WebJSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the Web
 
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜
 
JSX
JSXJSX
JSX
 
JSX Optimizer
JSX OptimizerJSX Optimizer
JSX Optimizer
 
JSX Design Overview (日本語)
JSX Design Overview (日本語)JSX Design Overview (日本語)
JSX Design Overview (日本語)
 
JSX
JSXJSX
JSX
 

JSX 速さの秘密 - 高速なJavaScriptを書く方法