Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Ryo Iinuma
PDF, PPTX
5,058 views
AngularJSとFluxとRiotJSと
http://gotandajs.connpass.com/event/20838/ で話した資料です
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 42
2
/ 42
3
/ 42
4
/ 42
5
/ 42
6
/ 42
7
/ 42
8
/ 42
9
/ 42
10
/ 42
11
/ 42
12
/ 42
13
/ 42
14
/ 42
15
/ 42
16
/ 42
17
/ 42
18
/ 42
19
/ 42
20
/ 42
21
/ 42
22
/ 42
23
/ 42
24
/ 42
25
/ 42
26
/ 42
27
/ 42
28
/ 42
29
/ 42
30
/ 42
31
/ 42
32
/ 42
33
/ 42
34
/ 42
35
/ 42
36
/ 42
37
/ 42
38
/ 42
39
/ 42
40
/ 42
41
/ 42
42
/ 42
More Related Content
PDF
Riot.jsに触れてみた話
by
エンジニア勉強会 エスキュービズム
PDF
イベント駆動AngularJS / 今から書くAngular 2.0
by
Okuno Kentaro
PDF
俺とAngular JS 2
by
Masayuki KaToH
PDF
Angular jsの継続的なバージョンアップ
by
Kazuyoshi Tsuchiya
PDF
Angular2
by
Kenichi Kanai
PDF
Angular 4がやってくる!? 新機能ダイジェスト
by
Masahiko Asai
PDF
開発ライフサイクルから見たAngularJS
by
Mizuho Sakamaki
PPTX
Riotjsハンズオン
by
omi end
Riot.jsに触れてみた話
by
エンジニア勉強会 エスキュービズム
イベント駆動AngularJS / 今から書くAngular 2.0
by
Okuno Kentaro
俺とAngular JS 2
by
Masayuki KaToH
Angular jsの継続的なバージョンアップ
by
Kazuyoshi Tsuchiya
Angular2
by
Kenichi Kanai
Angular 4がやってくる!? 新機能ダイジェスト
by
Masahiko Asai
開発ライフサイクルから見たAngularJS
by
Mizuho Sakamaki
Riotjsハンズオン
by
omi end
What's hot
PDF
Directiveで実現できたこと
by
Kon Yuichi
PPTX
Editorlt
by
Masaki Suzuki
PDF
Enterprise x AngularJS
by
Kenichi Kanai
PPTX
Angular2実践入門
by
Shumpei Shiraishi
PPTX
React meetup 3_eight
by
Hideharu Okuma
PDF
CSS Living StyleGuide
by
Hayashi Yuichi
PDF
クリエイティブの視点から探るAngular 2の可能性
by
Yasunobu Ikeda
PDF
angular1脳で見るangular2
by
Moriyuki Arakawa
PPTX
JavaScript使いのためのTypeScript実践入門
by
Shumpei Shiraishi
PDF
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
by
Mitsuru Ogawa
PPTX
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
by
Shumpei Shiraishi
PDF
noteをAngularJSで構築した話
by
Kon Yuichi
PDF
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
by
Horiguchi Seito
PPTX
Vscodemeetup6
by
Masaki Suzuki
PPTX
Angular js開発事例
by
Shun Takeyama
PDF
One-time Binding & $digest
by
Hayashi Yuichi
PPTX
アプリ開発&チーム管理で役立った拡張機能
by
Masaki Suzuki
PPTX
社内LTネタ ReactNative
by
Oguri Toru
PDF
今後のWeb開発の未来を考えてangularJSにしました
by
Mitsuru Ogawa
PPTX
Our Track to Modern Angular
by
Yuta Shimizu
Directiveで実現できたこと
by
Kon Yuichi
Editorlt
by
Masaki Suzuki
Enterprise x AngularJS
by
Kenichi Kanai
Angular2実践入門
by
Shumpei Shiraishi
React meetup 3_eight
by
Hideharu Okuma
CSS Living StyleGuide
by
Hayashi Yuichi
クリエイティブの視点から探るAngular 2の可能性
by
Yasunobu Ikeda
angular1脳で見るangular2
by
Moriyuki Arakawa
JavaScript使いのためのTypeScript実践入門
by
Shumpei Shiraishi
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
by
Mitsuru Ogawa
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
by
Shumpei Shiraishi
noteをAngularJSで構築した話
by
Kon Yuichi
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
by
Horiguchi Seito
Vscodemeetup6
by
Masaki Suzuki
Angular js開発事例
by
Shun Takeyama
One-time Binding & $digest
by
Hayashi Yuichi
アプリ開発&チーム管理で役立った拡張機能
by
Masaki Suzuki
社内LTネタ ReactNative
by
Oguri Toru
今後のWeb開発の未来を考えてangularJSにしました
by
Mitsuru Ogawa
Our Track to Modern Angular
by
Yuta Shimizu
Viewers also liked
PDF
React + Flux
by
_yukikayuki
PDF
NodeJSでCLI開発を楽しくするライブラリの紹介
by
Ryo Iinuma
PDF
SPAを実現するために必要な通信技術
by
Yusuke Naka
PDF
フロントエンドから見たWebアプリの高速化 #gotandapm
by
Ryo Iinuma
PDF
Riot.jsと仲良くなるための僕的tips
by
Keisuke Imai
PDF
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
by
Ken Muryoi
PDF
Riot.js と戦った話 (8月26日 oRo LT 会)
by
kata shin
PDF
Riot: ver.3 での変更点と、周辺ツールたち
by
Tsutomu Kawamura
PDF
Riotでサーバレスにした話
by
Hiroyuki Hara
PDF
最近のフロントエンドツールの紹介
by
Ryo Iinuma
PPTX
Riot.jsを用いたweb開発 takusuta tech conf #1
by
Keisuke Imai
PDF
FluxのDispatcherとAction周りのことでもやもやしていることを晒してみる
by
Yuta Shimakawa
React + Flux
by
_yukikayuki
NodeJSでCLI開発を楽しくするライブラリの紹介
by
Ryo Iinuma
SPAを実現するために必要な通信技術
by
Yusuke Naka
フロントエンドから見たWebアプリの高速化 #gotandapm
by
Ryo Iinuma
Riot.jsと仲良くなるための僕的tips
by
Keisuke Imai
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
by
Ken Muryoi
Riot.js と戦った話 (8月26日 oRo LT 会)
by
kata shin
Riot: ver.3 での変更点と、周辺ツールたち
by
Tsutomu Kawamura
Riotでサーバレスにした話
by
Hiroyuki Hara
最近のフロントエンドツールの紹介
by
Ryo Iinuma
Riot.jsを用いたweb開発 takusuta tech conf #1
by
Keisuke Imai
FluxのDispatcherとAction周りのことでもやもやしていることを晒してみる
by
Yuta Shimakawa
AngularJSとFluxとRiotJSと
1.
AngularJSとFluxと RiotJSと 2015/10/28 GotandaJS # @mizuki_r
2.
Profile account. twitter: @mizuki_r github: ry_mizuki role. フロントエンドエンジニア tags. AngularJS,
RiotJS, Backbone, hariko, angular-period, etc
3.
Theme • AngularJSで書いたアプリをFlux化した話 • Flux化したAngularJSアプリにRiotJS入れた話
4.
AngularJSで書いたアプリ をFlux化した話
5.
What is Flux?
6.
Flux s architecture https://facebook.github.io/flux/docs/overview.html
7.
Flux s architecture •
Facebookが提唱したアーキテクチャ • データの流れを一方向に限定する • Store, View, Dispatcherの責務がActionという 単位で処理を回す
8.
Flux s architecture https://github.com/facebook/flux/tree/master/examples/flux-todomvc/#structure-and-data-flow
9.
Why Flux
10.
Why Flux? • modelの管理に疲れた •
データ構造と責務分担の分類の考察 • 急なデータの変更、Viewの変更 • controllerでmodelを管理しがち • modelとmodelの連携 • controllerの抽象化が雑に…
11.
所謂MVCの運用には 高度な訓練と 高い意識が必要なのでは?
12.
もっと低意識で運用したい!
13.
I thought…
14.
ぼくのかんがえたさいきょうの… • Dispatcherは自前でObserver定義 • ViewとActionCreator,
Storeは一対 • ドメインの定義はViewにすべて移譲 • ActionCreatorは外部との連絡用 • API通信はngResourceをwrapしてrepository として分離 • actionにする前にデータ整形を行うメソッドを かます
15.
ぼくさいFlux arch
16.
ぼくさいFlux arch
17.
import * as
action_creator from '../action-creators/example' import store from '../stores/example' class ExampleCtrl { constructor ($scope) { this.onReceiveData = this.onReceiveData.bind(this) this.onDestroy = this.onDestroy.bind(this) store.addReceiveDataListener(this.onReceiveData) $scope.$on('$destroy', this.onDestroy) action_creator.init() } select () { action_creator.select() } onReceiveData () { this.data = store.getData() } onDestroy () { store.removeReceiveDataListener(this.onReceiveData) } } angular.module('example').controller('ExampleCtrl', ExampleCtrl)
18.
import dispatcher from
'../dispatcher' import action_types from '../action-types' import injector from '../injector' export function init () { dispatcher.handleViewAction({ type: action_types.INIT_EXAMPLE_VIEW, }) var Repository = injector.get('ExampleRepository') Repository.fetch().then((data) => { dispatcher.handleApiAction({ type: action_types.RECEIVE_EXAMPLE_DATA, data }) }) } export function select () { dispatcher.handleViewAction({ type: action_types.SELECT_EXAMPLE_VIEW, }) var Repository = injector.get('ExampleRepository') Repository.post().then((data) => { dispatcher.handleApiAction({ type: action_types.POST_SELECT_EXAMPLE_DATA, data }) }) }
19.
conclusion • ViewをActionCreatorとStoreに抽象化できた • コードが冗長になり、量が増えた •
初期開発コストは高いが更新の手間などは減っ た
20.
ViewをActionCreatorと Storeに抽象化できた
21.
…あれ?
22.
Angularじゃなくてもよくね?
23.
Flux化したAngularJSアプ リにRiotJS入れた話
24.
What is RiotJS?
25.
RiotJS • Reactライクのユーザインタフェースライブラリ • とっても小さい •
Virtual-DOM • JavaScript in HTML
26.
<todo> <!-- layout --> <h3>{
opts.title }</h3> <ul> <li each={ item, i in items }>{ item }</li> </ul> <form onsubmit={ add }> <input> <button>Add #{ items.length + 1 }</button> </form> <!-- logic --> <script> this.items = [] add(e) { var input = e.target[0] this.items.push(input.value) input.value = '' } </script> </todo> http://riotjs.com/ja/
27.
ファイルサイズ Reactの約1/19!
28.
つまり… • 小さいし必要最小限の機能 • 細かいViewの制御なら十分なAPI •
明示的な更新が可能なI/F • Component系なので最小限の変更範囲 • 書きやすそうなJSX
29.
Why is RiotJS?
30.
AngularJSへの不満… • $applyが重い • 暗黙的な$digestの管理が辛い
31.
$applyが遅い • 式を受け取りViewを更新するかを判定 • 更新する場合は`$scope.$digest()`
を実行 • $http, $timeoutなどのAPIが内部的に利用 • 登録されているすべてのリスナを評価する • 遅い評価式を登録してしまうと更新のたびに…
32.
暗黙的な$digestが辛い • $http, $timeoutなどAPIが暗黙的に発行する •
発行しないAPIもある • 自前で作った機能は$scope.$apply等が必要 • たまたまうまく更新がされるケース • digest中にdigestを発行すると死ぬ
33.
つまり… • 特定のView以下で更新したい • 短いサイクルでの更新 •
毎秒すべてのViewを評価してどうする • 明示的に更新したい • 必要ないところで評価されても • 更新したいタイミングは僕らが決めたい
34.
Angular with Riot
35.
RiotJSの役割 • 末端のViewの更新サイクルの管理 • 毎秒更新が発生するもの •
ホバーなどサイクルが短いもの • ユーザアクションのハンドルと他のViewとの連 携はFluxベースのアーキテクチャで吸収 • RiotからAngularのViewは参照しない
36.
directive angular.module('example', []).directive('todo', function
() { return function () { riot.mount('todo') } }) directive化することで、templateから参照できる。
37.
outside injector exports.get =
function (name) { return angular.element(document).injector().get(name) } injectorをAngularの管理外から参照できるように
38.
入れてみた結果 • 「遅い」と言われてた部分が解消(体感的に) • ぶっちゃけRiotJSが早いわけじゃない •
むしろ状況次第ではAngularより遅い • $digest漏れや$applyの遅延による「遅く見え る」が減少した • RiotJS、以外と書きやすい
39.
Conclusion
40.
Conclusion • FluxによるViewの抽象化事例を紹介 • Viewの単位でコードを管理できるので、追加・更新・削 除が思いの外簡単になった •
でもコード量は増えた • AngularJSとRiotJSの共存事例を紹介 • 目に見えて反応が違った • RiotJSは必要最小限で使う分にはかなり使い勝手良い • 個人的にはRiotJSXはもっと使って行きたい
41.
Next Generation • Fluxでの責務分担のあり方をもうちょっと考え たい •
いずれこれは二層式に集約されていくのだろう なと • ServiceWorker上で扱えるレベルのロジック の抽象化 • メインスレッドを綺麗にしてUIのパフォーマン スあげたい
42.
ご清聴ありがとうございました
Download