SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
DataGridを自前実装する話
八木照朗 / terurou
2013/09/21
自己紹介
• 無職です。
• 再来週ぐらいには社長になるらしいです。
• 定款の業務内容に飲食業を入れておく予定…
コミュニティ関係
• DSTokai
• 東海地方のメタコミュニティ
• http://go.dstokai.info/
• NGK2013B(2013/12/14開催)
• 毎年恒例のクロスコミュニティ忘年会イベント
• 昼の部:LT大会、夜の部:忘年会
• ここ数年は参加者100人前後
• スポンサー募集してます
• 去年はなぜかCeBITさんもスポンサーに…
技術背景
• クライアント技術が割と得意です。
• Silverlight, WPF, WinRT, HTML5/JavaScript, Android
• 最近はHaxeの人みたいな扱いです。
• 分散システム, 分散KVSとかもできます。
• MSIL, ExpressionTreeをたしなむ程度に。
• 無職期間中にF#でHTTP/WebSocketサーバを
作って遊んでました。
DataGridと私
過去に4回ぐらい実装したことあります。
• HTML4/JavaScript, IE6, 1万行表示
• HTML4/JavaScript, IE6, Drag&Drop
• Silverlight4, 1000列×100万行表示
• HTML5/JavaScript+Ext JS, 1000列×100万行表示
DataGridとは(おさらい
「Excelみたいな操作をしたいなー(はあと」
Excelみたいな機能?
• セル直接入力
• Tabや入力確定で次のセルに飛ぶ
• フィルタ, ソート
• オートフィル
• 条件付き書式
• 列の表示/非表示, 入れ替え
• セル計算式 など
「Excelみたいな操作がしたい」と言われたら
商用コンポーネントを使いましょう!!!
商用コンポーネントのメリット
• 「Excelみたいな」を9割ぐらいはカバー
• どれだけ高くても100万円もあれば買える
• 2人月より安い!!!
商用コンポーネントではダメなケース
• 政治的な理由
• 大本営が商用コンポーネントを使わない方針で確定
• 人月商売
• パフォーマンスの問題
• 1000行×100万行とか、対応できるものは皆無
仕方ないので標準コントロールでどうにかする
• WPF
• 操作系のカスタムは必要だが割と悪くはない
• Silverlight
• パフォーマンスが壊滅的
• HTML/JavaScript
• 標準コントロールってなんですか???
仕方なく自前実装する際のポイント
• マネジメント面
• 超ハイレベルなUIエンジニアを確保する
• 開発期間は半年以上かかることを覚悟する
• 意思決定が変更可能な時点での技術検証が必須
• 実装面
• データとビューは必ず分離する
• 描画時の計算量を可能な限り減らす
• データの遅延ロード・破棄
超ハイレベルなUIエンジニアを確保する
• 「Excelはどのように実装されているか」が
ある程度は想像のつく人
• Observer, MVC(not Web)と言われてピンとくる
• ダブルバッファリングと言われて…
• セルの循環参照の検出と言わ…
• 各プラットフォームの低レベル描画の知識必須
• HTML/JavaScript → DOMが遅い
• XAML → UIの仮想化
• テキストの描画は遅い など
開発期間は半年以上かかることを覚悟する
過去の経験から…
• プロトタイプ+暫定APIの作成→3か月程度
• 安定化+APIの整備→3か月程度
ぐらいが最低ライン(当然、実装者に依存)
意思決定が変更可能な時点での技術検証が必須
• プロジェクトが本格的に走り始めてからの
「やっぱりできません」は悲惨
• 最悪のケースでは人が死ぬ
• 技術的・要員的に不可能だと分かった場合は
何らかの対応を取る
データとビューは必ず分離する
• MVVC, DataBinding
• ビューには低レベルな描画処理のみを記述
描画時の計算量を可能な限り減らす
• 1回だけ計算すればいい処理はキャッシュする
• 各列の幅→全体の幅、各列のオフセット位置
• データ行数→全体の高さ
• 見えてない部分は描画しない
• いわゆるUIの仮想化
• 画面定義情報と表示オフセット計算の嵐…
実際に表示される部分
データの遅延ロード・破棄
• 「100万行を表示しろ」みたいな例
• 1行分のデータが1KByteと仮定 → 1GByte!!
• 転送量・メモリ的にどう考えても無理
• 表示中のデータ+N件のデータだけ保持
• 1行ずつスクロール時は小分けにロード
• 一気にスクロールした時はちょっと待たせる
まとめ
• DataGridの自前実装はできるだけ避ける
• ちょっとでも間違うと人が死ぬ
• OSSのDataGridを解析して勉強する
• 自分はSilverlight Toolkitはかなり参考にした
• HTML/JavaScriptで参考になるものは見たことない
• パフォーマンスに難があるものばっかだし…
• どうしても自前実装しないといけない場合には
覚悟を決めましょう!!!
• やばいときのお仕事の相談、お受けいたします。

Más contenido relacionado

La actualidad más candente

メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 

La actualidad más candente (20)

Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
衝突判定
衝突判定衝突判定
衝突判定
 
ゴルフゲームでUnityの限界を突破する方法
ゴルフゲームでUnityの限界を突破する方法ゴルフゲームでUnityの限界を突破する方法
ゴルフゲームでUnityの限界を突破する方法
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
Devsumi 2018summer
Devsumi 2018summerDevsumi 2018summer
Devsumi 2018summer
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonad
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
GPU最適化入門
GPU最適化入門GPU最適化入門
GPU最適化入門
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 

Similar a DataGridを自前実装する話

高校生がイベントを作るということ
高校生がイベントを作るということ高校生がイベントを作るということ
高校生がイベントを作るということ
Shoot Morii
 
20141120 クラウドが破壊するもの、生み出すもの
20141120 クラウドが破壊するもの、生み出すもの20141120 クラウドが破壊するもの、生み出すもの
20141120 クラウドが破壊するもの、生み出すもの
Seiji Akatsuka
 

Similar a DataGridを自前実装する話 (11)

altJSの選び方
altJSの選び方altJSの選び方
altJSの選び方
 
2014/10/04 四国クラウドお遍路 クラウドでビックデータのスモールスタート
2014/10/04 四国クラウドお遍路 クラウドでビックデータのスモールスタート2014/10/04 四国クラウドお遍路 クラウドでビックデータのスモールスタート
2014/10/04 四国クラウドお遍路 クラウドでビックデータのスモールスタート
 
高校生がイベントを作るということ
高校生がイベントを作るということ高校生がイベントを作るということ
高校生がイベントを作るということ
 
デブサミ2013の明後日な楽しみ方
デブサミ2013の明後日な楽しみ方デブサミ2013の明後日な楽しみ方
デブサミ2013の明後日な楽しみ方
 
20111205 駒澤大学講演プレゼン2
20111205 駒澤大学講演プレゼン220111205 駒澤大学講演プレゼン2
20111205 駒澤大学講演プレゼン2
 
第19回せきゅぽろLT
第19回せきゅぽろLT第19回せきゅぽろLT
第19回せきゅぽろLT
 
html5j最新情報
html5j最新情報html5j最新情報
html5j最新情報
 
20141120 クラウドが破壊するもの、生み出すもの
20141120 クラウドが破壊するもの、生み出すもの20141120 クラウドが破壊するもの、生み出すもの
20141120 クラウドが破壊するもの、生み出すもの
 
マルチクラウドDWH(Snowflake)のすすめ
マルチクラウドDWH(Snowflake)のすすめマルチクラウドDWH(Snowflake)のすすめ
マルチクラウドDWH(Snowflake)のすすめ
 
Groonga導入事例−地域コミュニティサイトLOHABUU
Groonga導入事例−地域コミュニティサイトLOHABUUGroonga導入事例−地域コミュニティサイトLOHABUU
Groonga導入事例−地域コミュニティサイトLOHABUU
 
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasiaサンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
 

Más de terurou

FIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScriptFIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScript
terurou
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
terurou
 
Metro Style AppsでMSIL ver.2012/06/09
Metro Style AppsでMSILver.2012/06/09Metro Style AppsでMSILver.2012/06/09
Metro Style AppsでMSIL ver.2012/06/09
terurou
 
Scala×silverlight
Scala×silverlightScala×silverlight
Scala×silverlight
terurou
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
 
クラウドGPS(仮)
クラウドGPS(仮)クラウドGPS(仮)
クラウドGPS(仮)
terurou
 

Más de terurou (20)

Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
 
自社サービスでDurable Functionsを採用した話
自社サービスでDurable Functionsを採用した話自社サービスでDurable Functionsを採用した話
自社サービスでDurable Functionsを採用した話
 
Computation Expressions for Haxe
Computation Expressions for HaxeComputation Expressions for Haxe
Computation Expressions for Haxe
 
デンキヤギの採用の考え方
デンキヤギの採用の考え方デンキヤギの採用の考え方
デンキヤギの採用の考え方
 
Vue.jsをhaxeで
Vue.jsをhaxeでVue.jsをhaxeで
Vue.jsをhaxeで
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeオブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
 
動的なILの生成と編集
動的なILの生成と編集動的なILの生成と編集
動的なILの生成と編集
 
FIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScriptFIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScript
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話
 
Metro Style AppsでMSIL ver.2012/06/09
Metro Style AppsでMSILver.2012/06/09Metro Style AppsでMSILver.2012/06/09
Metro Style AppsでMSIL ver.2012/06/09
 
Metro Style AppsでMSIL
Metro Style AppsでMSILMetro Style AppsでMSIL
Metro Style AppsでMSIL
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
 
CommonJSの話
CommonJSの話CommonJSの話
CommonJSの話
 
Scala×silverlight
Scala×silverlightScala×silverlight
Scala×silverlight
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Iron Python / Iron Ruby で .NET Programming
Iron Python / Iron Ruby で .NET ProgrammingIron Python / Iron Ruby で .NET Programming
Iron Python / Iron Ruby で .NET Programming
 
クラウドGPS(仮)
クラウドGPS(仮)クラウドGPS(仮)
クラウドGPS(仮)
 

Último

Último (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

DataGridを自前実装する話