Frontrend Vol.4 アウトラインメモ
Frontrend Vol.4 に参加してきたのでその時のメモです。
CA Frontrend v04
- Frontrend Vol.4 powered by CyberAgent, Inc. : ATND
- 場所: サイバーエージェント本社 13F セミナールーム (東京都渋谷区道玄坂一丁目12番1号渋谷マークシティ ウエスト13階)
Frontrend Vol.4 powered by CyberAgent, Inc. に回答するとスライドがある
JavaScript Development Tools – JavaScript開発の効率アップ – Layzie
- JavaScript開発に役立つGUI
- JavaScript開発に役立つCUI
Chrome Developer Tools
- ショートカット
- ブレークポイント
- DOMの属性が変更
- Throw Error
- XHRでURLに通信した時にbreak
- etc…
- Timeline
- Profile
chorme://net-internals
- SPDYなどの通信を見られる
Charles
- デバッグ用Proxy
- Fiddler
- MapLocal
- URL先のファイルとローカルファイルをすり替えられる
- AutoResponder的な機能
- Throttle
- 回線のエミューレート
- 3G相当の通信の遅さをサイト
Dochub
- JS/CSS APIの検索サイト
- MDNのコンテンツの検索
jsFiddle
- jsbin/jsdot.it 系のサイト
- Debug on Mobile
- モバイル用のデバッグURLがある
jsPref
- JavaScriptのベンチマークを見るサイト
browsering
- substack
- ブラウザのテスト
- $20/month
- ci.testing.com
JSHint
- JavaScriptのLintをかけるツール
jq
- jsonのsed
- jsonをqueryでいじれる
- jsonを整形表示される
Doctor JS
- ctag的なJavaScriptのタグファイルを作成するツール
- 静的解析したファイルを作ってエディタ
Yeoman
- パッケージ管理
- 土台作るCLI
- scaffold
- grunt server
Nodefront という類似なCLIもある
jQuery Performance Tips – jQueryにおける高速化 – @pocotan001
マシンの仕事を少なくすることが、高速なプログラムになる
jQueryライクを保ってパフォーマンスチューニング
- ファイルサイズ
- セレクタ
- リフロー影響
ファイルサイズ
- jQuery 1.9と 2.0をIEの条件コメントで読み込むものを分ける
- スタート時には最小構成で始めるほうがいい
jquery migrate plugin
- jQuery 1.9で削除されたAPIを補完するプラグイン
- 非推奨のことについても警告してくれる
- 警告の詳しい内容はGithubに
jQuery セレクタ
$("#target p");
$("#target").find("p")
$('#tareget).find('p:first');
- QuerySelectorAll -> 失敗
- getElementTagName
- jQueryパース
次のように分けるか、:first-child
を使う
$('#tareget).find('p').first();
リフロー
HTML – DOM – レンダーツリー – CSSOM – CSS
描画のフローは一度ではなく、段階的に描画していってる
- CSS Reflow
- Chrome Devloper Tools – Timelimeで可視化できる
DOMツリーとレンダーツリー
- DOMツリーにはあって、レンダーツリーにはないものも
- display : noneなどされてる要素はレンダーツリーには出てこない
- display : blockにして見えるようになった時、レンダーツリーに出現する
- これがリフローに関係する
同じリフローが起きる処理を2回呼んだ場合は、ブラウザがクッションを挟んで1度に済ませたりする
$('p').css('margin' , '5px');
リフローのトリガー
- ユーザー入力
- positionの変更
リフローを減らす
- hideにしてから変更すればリペイントはまとまる
- $.cssはオブジェクトで指定したほうがいい。
- offset()等の計算は変数に入れて使いまわす
の中にscriptがある場合
表示 -> JS -> 変更
でdocument.readyで動かす
JS -> 表示 ->
ボトルネックを解消をする
- 描画コストの高いCSS
- アニメーション
- ループ
Chrome Cannaryを使う
- cannaryにしかない機能もある
- Timelimeで表示する内容のしきい値を指定できる(ALl , 15ms)
- 10ms以内でするのがモバイルだとちょうどいい
- Timelineの山がコストの大きさ
- 設定 -> Rendering
- レンダリングの可視化
- FPSの表示
- 連続的なレンダリングの可視化
jQueryアニメーションとCSS3
- CSSのほうがネイティブに近いので基本的には早い
- requestAnimationFrame
まびく
処理を間引いて行う
- throttle
- debounce
その他
- スタイルの変更を末端要素で影響範囲を抑える
- アニメーションはfixedにしておく
- Tableレイアウトをしない
- テーブルは特別的な感じなので
Javascript – テストしやすいJavaScriptとテストについて – CSSRADAR
- テストしやすいJavaScriptとは
- ユニットテストツールとは
テストしやすいJavaScriptとは
ベストプラクティス
- オブジェクト指向JavaScript
- デザインパターン
- MV*構造
- ユニットテスト
リファクタリングを前提に考える
- リファクタリングをする前提で書く
- テストはリファクタリングを補助する
- ロジックにもデザインがある
テストしずらいコードを見ていく
- テストしにくいコードからテストしやすいコードを学ぶ
- QOF
untestable code
- 50行の中に5つの役割がある
- jQueryのready
- clickイベント
- フォームのインプット内容を取得
- appendでDOM捜査
- appendするHTML生成
- // XHR
- コードの役割分担が複雑だとテストしにくいコードなる
- コード間で密接な関係を持つとテストしにくくなる
- これをリファクタリングしていく
テスト駆動リファクタリング
- テストはデザイン
- パターンはよくある問題の解決する
リファクタリング
- まずは、テストコードからアプリケーションコードへアクセスできるようにする
- init にとりあえず、以前のreadyの中身を突っ込む
QUnitを使ってテストコードを書いていく
- 名前空間があるか
- getDataでユーザーが入力したデータを取得できてかをテストを書く
- 単一責任の原則 -> それぞれのユニットが正しいかを確認していく
- setupで、ユーザーの入力を入れて、teardownでユーザーの入力を消す
テストツール
Jasmine
- BDD
- descript 何が it どうなる
Qunit
- jQueryが元々
- 安定している
- test 振る舞い
Mocha
- Node.jsが元々
- assertion libraryを持ってない
- chai , expect.js
PahntomJS
- ヘッドレスブラウザ – test runnerとして使う
Grunt.js
- ビルドツールで自動化
Koans
- テストで学ぶJavaScript
Q&A
- チームの他の人がテストしたがらない場合に何から始めるか?
- テストは何を行うものが体験してもらう
- Koansみたいな動かしてみるところからやってみる
jQuery to Backbone – アーキテクチャを意識したJavaScript入門 – ahomu
- jQueryについて
- Backbone.jsについて
- jQuery to Backbone.js
jQuery replace backboneではなく、フォーカスを移すイメージ
Backbone.js
- 軽量で短く
- jQuery/Unserscore.jsに依存してる
jQuery
- DOM APIを隠蔽して簡潔に記述する
- クロスブラウザ対応の諸問題を対処
- プラグインが豊富
jQueryが解決しない問題
- アプリケーションコードの肥大化
- スパゲティコード
- テストしにくいコード
これをBackboneを使いつつ上手く解決していく
MV*
- TodoMVC
- JavaScriptのMV*ライブラリを作ってサンプルのTodoアプリを作ってサイト
- 30個以上ある
Backbone.js
- やさしい構造をサポート
- Model/View/Router
デザインパターン
- デザインパターンから一般的なパターンを学ぶ
facade
Singleton
- オブジェクトが1個にあって欲しい
FlyWeight
- 動的にインスタンスを生成し、同一のものは使いまわすパターン
Observer
- イベントをつけて監視して発火する
- 1 vs 1
Mediator
- イベントの仲介をするパターン
- Pub/Sub – 3者
jQuery to Backbone.js
View
- 見た目入力
- DOM要素の管理
- イベント制御
Backbone.View.extend
Model
- 取り扱うデータの単位
- ストレージとの通信・動機
- APIや情報のレコードを表現
Backbone.Model.extend
Collection
- Modelが集合したリスト
- リスト操作など
- Modelとの通信、同期
Backbone.Collection.extend
Router
- URLによるルーティング
- hisotyr.pushState
DEMO
- Backbone.Viewを作成
- renderメソッドを中執
- テンプレートの分離
モジューラーJavaScript
- 依存性の低さによる変更のひしゃすさ
- 継続的なメンテナンス性がアップする
ModelとCollection
- CollectionはModelsを束ねるもの
- new Model()
Collectionのソート
- collectionのcomparatorにソート条件を書く
sort
にイベントをつけておいて、sortされたらrenderメソッドを呼ぶようにする
アーキテクチャを考えるためのBackbone.js
- アーキテクチャを実際の実装から学べる
その他
- Marionette
- Backboneをラップしてlistなどを追加してるフレームワーク
- Chaplin
- Thorax
Q&A
- Backbone.js 使ってよかったどうか?
- Viewが多いけどRequire.jsで分けて読んでる
- Backbone.jsでjQuery/Zepto.jsの選択肢、スマートフォンだとどっちを使う?
- プロジェクトでバラバラ
- Zepto.js のほうがファイルサイズは小さい
- jQueryはベンチマークテストだと有利
- モバイルでCanvas使い物になる?
- Androidとかに苦しめられる
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。