Soumettre la recherche
Mettre en ligne
Mithril - 軽量/高速なMVCフレームワーク
•
Télécharger en tant que PPTX, PDF
•
2 j'aime
•
3,193 vues
S
sairoutine
Suivre
[Grand Frontend Osaka2016] DAY2 Frontend Sessions http://kfug.jp/gfo2016/
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 44
Télécharger maintenant
Recommandé
flow による型のある世界入門
flow による型のある世界入門
sairoutine
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
sairoutine
Mithril
Mithril
Yoshiki Shibukawa
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
Manabu Koga
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
SEGADevTech
JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説
賢次 海老原
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
Y Watanabe
Recommandé
flow による型のある世界入門
flow による型のある世界入門
sairoutine
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
sairoutine
Mithril
Mithril
Yoshiki Shibukawa
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
Manabu Koga
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
SEGADevTech
JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説
賢次 海老原
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
Y Watanabe
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)
denatech2016
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
Kentaro Matsumae
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
Yosaku Toyama
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
Narami Kiyokura
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
Miniascape
ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀
Takafumi ONAKA
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
infinite_loop
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
Takuya Kawabe
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
Yoshiki Shibukawa
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
ssuser070fa9
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
Tomoya Kabe
Implementing Domain-Driven Design: Part 1
Implementing Domain-Driven Design: Part 1
Atsushi Kambara
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
Chihiro Ito
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
賢次 海老原
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
光晶 上原
Vue入門
Vue入門
Takeo Noda
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
WESEEKWESEEK
Contenu connexe
Tendances
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)
denatech2016
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
Kentaro Matsumae
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
Yosaku Toyama
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
Narami Kiyokura
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
Miniascape
ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀
Takafumi ONAKA
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
infinite_loop
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
Takuya Kawabe
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
Yoshiki Shibukawa
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
ssuser070fa9
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
Tomoya Kabe
Implementing Domain-Driven Design: Part 1
Implementing Domain-Driven Design: Part 1
Atsushi Kambara
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
Chihiro Ito
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
賢次 海老原
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
光晶 上原
Tendances
(20)
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
Implementing Domain-Driven Design: Part 1
Implementing Domain-Driven Design: Part 1
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
Similaire à Mithril - 軽量/高速なMVCフレームワーク
Vue入門
Vue入門
Takeo Noda
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
WESEEKWESEEK
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Atsushi Kambara
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
Yoshitaka Seo
SimpleModeler
SimpleModeler
Tomoharu ASAMI
ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
jadeで作るclient template
jadeで作るclient template
Ota Tomoaki
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
Yasuhito Yabe
20200304 vuejs
20200304 vuejs
yamamotomsc
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
normalian
クラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチ
Tomoharu ASAMI
[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration
Kazuchika Sekiya
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
Taiji Miyabe
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
yoshikawa_t
Web workers¶llel.js html5勉強会lt大会
Web workers¶llel.js html5勉強会lt大会
Yuta Shimakawa
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
Akira Inoue
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
Masuda Tomoaki
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga
[AC06] クラウド・ネイティブなスケーラブル・アプリ開発のために~12 Factor App on Kubernetes on Azure
[AC06] クラウド・ネイティブなスケーラブル・アプリ開発のために~12 Factor App on Kubernetes on Azure
de:code 2017
Similaire à Mithril - 軽量/高速なMVCフレームワーク
(20)
Vue入門
Vue入門
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
SimpleModeler
SimpleModeler
ScalaMatsuri 2016
ScalaMatsuri 2016
jadeで作るclient template
jadeで作るclient template
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
20200304 vuejs
20200304 vuejs
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
クラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチ
[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
Web workers¶llel.js html5勉強会lt大会
Web workers¶llel.js html5勉強会lt大会
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
[AC06] クラウド・ネイティブなスケーラブル・アプリ開発のために~12 Factor App on Kubernetes on Azure
[AC06] クラウド・ネイティブなスケーラブル・アプリ開発のために~12 Factor App on Kubernetes on Azure
Plus de sairoutine
How to manage parameters for gacha games
How to manage parameters for gacha games
sairoutine
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
sairoutine
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
Dark side of the reflect
Dark side of the reflect
sairoutine
マジック・ザ・ギャザリングの背景世界とストーリー
マジック・ザ・ギャザリングの背景世界とストーリー
sairoutine
em-dosbox
em-dosbox
sairoutine
Touhou Project on JavaScript
Touhou Project on JavaScript
sairoutine
JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話
sairoutine
JS と Canvas で作るシューティングゲーム
JS と Canvas で作るシューティングゲーム
sairoutine
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
sairoutine
Plus de sairoutine
(10)
How to manage parameters for gacha games
How to manage parameters for gacha games
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
Dark side of the reflect
Dark side of the reflect
マジック・ザ・ギャザリングの背景世界とストーリー
マジック・ザ・ギャザリングの背景世界とストーリー
em-dosbox
em-dosbox
Touhou Project on JavaScript
Touhou Project on JavaScript
JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話
JS と Canvas で作るシューティングゲーム
JS と Canvas で作るシューティングゲーム
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Mithril - 軽量/高速なMVCフレームワーク
1.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. Mithril - 軽量・高速な MVCフレームワーク 株式会社 DeNA Games Osaka 技術編成部 人西 聖樹 masaki.hitonishi@dena.com
2.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 自己紹介 人西 聖樹(ひとにし まさき) Twitter: @sairoutine 株式会社 DeNA Games Osaka Webアプリケーションエンジニア 趣味事では、WebGL と Electron を使ってPCゲー ムを作るチャレンジをしています。
3.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. フロントエンド JavaScript フレームワーク
4.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.
5.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.
6.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.
7.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.
8.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. ところで皆さんに質問 JavaScript フレームワーク、 どれ使ったことあります?
9.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.
10.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. Mithril とは
11.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. Mithril フロントエンド MVCフレームワーク 仮想DOM コンポーネントもサポート ファイルサイズが小さい(バージョン0.2.5 時点で、約 20 KB) APIが少ない(約23個。よく使う API は4つくらい) 最小ながらも Mithril だけで SPA が作れる程度には揃ってる 速い
12.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 界隈における Mithril の位置づけ
13.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 今学びたいJSフレームワークは? https://medium.com/@sachagreif/the-state-of-javascript-front-end-frameworks-1a2d8a61510 より引用
14.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. もう一度使いたいJSフレームワークは? https://medium.com/@sachagreif/the-state-of-javascript-front-end-frameworks-1a2d8a61510 より引用
15.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. その他に言及されているJSフレームワーク https://medium.com/@sachagreif/the-state-of-javascript-front-end-frameworks-1a2d8a61510 より引用 Mithril
16.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. MVC
17.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. MVC Model(状態), View(表示), Controller (Model と View を管理する) フレームワークとしてのサポートはないが、 ViewModel を追加して、MVVM (+ Controller) の設計にするとよりよい設計に。
18.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. Model 普通の JavaScript オブジェクト (Mithril フ レームワークにロックインしてない) m.prop を使えば、getter-setter を生成で きる。 Web API から取得/へ保存するデータを主 に担当する
19.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. View 仮想DOM(後述)を返すJavaScriptの関数 Controller の保持する状態を参照できる 再描画が走るたびに呼ばれるので、重い処理 は View で行わず Controller で行う。
20.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. Controller インスタンスを作る JavaScript の関数 各種クラスの初期化など Controller が Model (or ViewModel)を持ち、 View は Controller を通して状態にアクセ スする感じになる
21.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. ViewModel アプリケーションの状態を扱う。 永続化する状態は Model に、永続化しない 状態は ViewModel に直接持たせるような設 計をよく見る。 ここをシングルトンにしておくと、SPAで ページ遷移しても前のページの状態を残して おいたりできる。
22.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. Component JavaScript のオブジェクト。 controller プ ロパティと、 view プロパティを持つ。 SPAにおいては 1ページ 1コンポーネント最 低必要。 コンポーネントの中で別のコンポーネントを 呼び出せる。 よって、 React のように再利用可能なコン ポーネントを作っておくと楽
23.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 仮想DOM
24.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. HTML(実DOM)の変更はコストが高い ツリー構造のDOMデータを走査していく 座標計算のやりなおし、CSSスタイルの再適 用 etc…
25.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. node.querySelector('.foo').innerHTML = ’aaa' しかし、こうしたコードは最終的に どういうHTMLが出力されるのか 追いにくい。 仮想DOMの出番! 今までは jQuery などで差分を 追加/変更/削除するコードを書いて、 極力 DOM の変更を抑えてきた
26.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 仮想DOMだと <div class="modal-body"> <form> <div class="form-group"> <label>イベント名</label> <div class="form-control-static">{ model.name() }</div> </div> <div class="form-group"> <label>日時</label> <div class="form-control-static">{ model.start_date() }</div> </div> </form> </div> DOMのあるべき姿を書くだけで、 フレームワークが 状態の変更前と変更後を比較して 差分だけ書き換えてくれる。
27.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 差分検知の仕組み ソースコードにコメントがある * diff algorithm can be summarized as this: * * 1 - compare `data` and `cached` * 2 - if they are different, copy `data` to `cached` and update the M * based on what the difference is * 3 - recursively apply this algorithm for every array and for the * children of every virtual element
28.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. めっちゃ要約すると 1. 更新前の仮想DOMと更新後の仮想DOMを比 較する 2. 異なる場合は、異なる種類に応じて更新を する 3. 再帰的に子要素を辿っていって、上記のア ルゴリズムを適用していく ↓ めっちゃシンプルなアルゴリズム!
29.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. じゃあなんでこんな速いのか?
30.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 再描画が走るタイミング Mithril は再描画が走るタイミングを絞ることで、 圧倒的なパフォーマンスを発揮している。 m.module() か m.route() を使って コントローラ が初期化されたタイミング イベントハンドラ(onclick等)が発生したタイミン グ m.request(後述する http リクエスト)が完了した タイミング m.redraw() を呼んで、明示的に再描画を呼んだタ イミング
31.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 描画が走るタイミングの調整 1フレーム単位で何回再描画が呼びだされても、1 度しか再描画しない Model が更新された際に view を再描画する仕組 みが Mithril にはない。 よって setInterval などで Model を更新しても、 view が更新されない罠にハマる。 m.redraw() を呼び出すと、次のフレーム更新タイ ミングで再描画する。 あるいは m.startComputation() と m.endComputation() で描画カウンタを増減させ ることで、再描画を行う。
32.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. msx
33.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. msx React でいう jsx 仮想DOMは JS のデータなので、フレーム ワークに沿った書き方をしないといけない いわゆる普通のHTMLで書いて、それを仮想 DOM の書き方に変換する
34.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. これが var todos = ctrl.list.map(function(task, index) { return <li className={task.completed() && 'completed'}> <div className="view"> <input className="toggle" type="checkbox" onclick={m.withAttr('checked', task.completed)} checked={task.completed()} /> <label>{task.title()}</label> <button className="destroy" onclick={ctrl.remove.bind(ctrl, index)}/> </div> <input className="edit"/> </li> })
35.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. こうなる var todos = ctrl.list.map(function(task, index) { return {tag: "li", attrs: {className:task.completed() && 'completed'}, children: [ {tag: "div", attrs: {className:"view"}, children: [ {tag: "input", attrs: { className:"toggle", type:"checkbox", onclick:m.withAttr('checked', task.completed), checked:task.completed()} }, {tag: "label", attrs: {}, children: [task.title()]}, {tag: "button", attrs: {className:"destroy", onclick:ctrl.remove.bind(ctrl, index)}} ]}, {tag: "input", attrs: {className:"edit"}} ]} })
36.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. jsx はキショイ(javascript の中に 生の HTMLが混 ざってくる) と言われがち 個人的には、ejs や jade などのような、新手のテ ンプレートエンジンだと思えばそこまで気になら ない。 フロントエンドエンジニアが Model と Controller を書いて、マークアップエンジニアが View を書 く、みたいな役割分担もしやすい。
37.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. バインディング
38.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. モデルからビューへのバインディング モデルの内容をビューに反映させる 再描画によって差分を検出し、value の中身の部分 のみ更新される 先述のように、setInterval などで Model を更新 した場合、明示的に再描画を呼び出す必要がある。 m("input", {value: ctrl.model.description()})
39.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. ビューからモデルへのバインディング ビューにてユーザーが入力した内容をモデルに反 映する m.withAttr を使う onchange イベントによって ctrl.model.description を更新してくれる やってることは下記と同じ m("input", {onchange: m.withAttr("value", ctrl.model.description)}) m("input", {onchange: function (e) { ctrl.model.description(e.currentTarget.value); })
40.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. http リクエスト m.request を使って行う。 thennable (いわゆる Promise) リクエストが完了するまで、再描画を待たせ てくれる。 User.listEven = function() { return m.request({method: "GET", url: "/user"}).then(function(list) { return list.filter(function(user) {return user.id % 2 == 0}); }) .catch(function(e) { throw e; }); }
41.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. Mithril を選択することが有用な場合 サーバーサイドエンジニア 同じMVCなので学習しやすい Mithril 自体が1000行程度なので 最悪コードを読めばなんとかなる 最終的に捨てる選択肢を取る場合 あと2〜3年もすれば新しいメジャーな FWが登場する。 どうせ捨てるなら学習コストの低いものを
42.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 公式サイト http://mithril-ja.js.org/
43.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 日本語のオライリー本 Mithril――最速クライアントサイドMVC
44.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. ご清聴ありがとう ございました!
Télécharger maintenant