Submit Search
Upload
WkWebViewのキャッシュについて調べた
•
Download as PPTX, PDF
•
2 likes
•
20,659 views
F
firewood
Follow
potatotips #44用の資料です。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 23
Download now
Recommended
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
SPAのルーティングの話
SPAのルーティングの話
ushiboy
例外設計における大罪
例外設計における大罪
Takuto Wada
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
ichirin2501
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
Recommended
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
SPAのルーティングの話
SPAのルーティングの話
ushiboy
例外設計における大罪
例外設計における大罪
Takuto Wada
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
ichirin2501
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
Toshiharu Sugiyama
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
SQLインジェクション再考
SQLインジェクション再考
Hiroshi Tokumaru
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
SEGADevTech
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
Hiroyuki Ito
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
目grep入門 +解説
目grep入門 +解説
murachue
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
Takayuki Shimizukawa
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
TDD のこころ
TDD のこころ
Takuto Wada
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
toshihiro ichitani
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
UnityTechnologiesJapan002
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
Node.js で Web アプリ開発
Node.js で Web アプリ開発
Tatsumi Naganuma
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
Kiyokazu Kaba
More Related Content
What's hot
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
Toshiharu Sugiyama
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
SQLインジェクション再考
SQLインジェクション再考
Hiroshi Tokumaru
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
SEGADevTech
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
Hiroyuki Ito
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
目grep入門 +解説
目grep入門 +解説
murachue
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
Takayuki Shimizukawa
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
TDD のこころ
TDD のこころ
Takuto Wada
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
toshihiro ichitani
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
UnityTechnologiesJapan002
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
What's hot
(20)
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
DockerコンテナでGitを使う
DockerコンテナでGitを使う
SQLインジェクション再考
SQLインジェクション再考
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
イベント・ソーシングを知る
イベント・ソーシングを知る
目grep入門 +解説
目grep入門 +解説
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
TDD のこころ
TDD のこころ
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
Docker Compose 徹底解説
Docker Compose 徹底解説
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Similar to WkWebViewのキャッシュについて調べた
Node.js で Web アプリ開発
Node.js で Web アプリ開発
Tatsumi Naganuma
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
Kiyokazu Kaba
20160601 devtools
20160601 devtools
Noritada Shimizu
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
Manabu Shimobe
見せたいデータに応じた取得方法を選ぼう!画面更新、ポーリング、WebSocketの比較
見せたいデータに応じた取得方法を選ぼう!画面更新、ポーリング、WebSocketの比較
Core Concept Technologies
Angular の紹介
Angular の紹介
Neo Xrea
WebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWeb
Kensaku Komatsu
Google Product
Google Product
Daisuke Sugai
なんとなくjQueryでAjaxをつかってみる
なんとなくjQueryでAjaxをつかってみる
Hidetaka Okamoto
たのしいNode.js
たのしいNode.js
ishiki-takai
サーバサイドいらずのWebアプリ
サーバサイドいらずのWebアプリ
Kazuya Hiruma
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Yuichiro Saito
Web frontend performance tuning
Web frontend performance tuning
ssuser3c214d
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
Takashi Okamoto
SharePoint 2013 Preview レビュー
SharePoint 2013 Preview レビュー
Hirofumi Ota
Intalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai
Effective web performance tuning for smartphone
Effective web performance tuning for smartphone
dena_study
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hong Chen
Web制作者がandriodのcddを読んでみた version1.1
Web制作者がandriodのcddを読んでみた version1.1
Masakazu Muraoka
UnityでつくるはじめてのPONG
UnityでつくるはじめてのPONG
Kohei Kadowaki
Similar to WkWebViewのキャッシュについて調べた
(20)
Node.js で Web アプリ開発
Node.js で Web アプリ開発
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
20160601 devtools
20160601 devtools
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
見せたいデータに応じた取得方法を選ぼう!画面更新、ポーリング、WebSocketの比較
見せたいデータに応じた取得方法を選ぼう!画面更新、ポーリング、WebSocketの比較
Angular の紹介
Angular の紹介
WebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWeb
Google Product
Google Product
なんとなくjQueryでAjaxをつかってみる
なんとなくjQueryでAjaxをつかってみる
たのしいNode.js
たのしいNode.js
サーバサイドいらずのWebアプリ
サーバサイドいらずのWebアプリ
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Web frontend performance tuning
Web frontend performance tuning
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
SharePoint 2013 Preview レビュー
SharePoint 2013 Preview レビュー
Intalio japan special cloud workshop
Intalio japan special cloud workshop
Effective web performance tuning for smartphone
Effective web performance tuning for smartphone
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
Web制作者がandriodのcddを読んでみた version1.1
Web制作者がandriodのcddを読んでみた version1.1
UnityでつくるはじめてのPONG
UnityでつくるはじめてのPONG
More from firewood
Best Bugs 2017 in the SmartNews iOS app
Best Bugs 2017 in the SmartNews iOS app
firewood
Xcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみた
firewood
Xcodeで値を表示する
Xcodeで値を表示する
firewood
SmartNewsアプリの品質
SmartNewsアプリの品質
firewood
delayed_jobの自動再起動
delayed_jobの自動再起動
firewood
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
フィルタドライバ入門
フィルタドライバ入門
firewood
三日で書くGroonga関数
三日で書くGroonga関数
firewood
L-R
L-R
firewood
FPGA
FPGA
firewood
More from firewood
(10)
Best Bugs 2017 in the SmartNews iOS app
Best Bugs 2017 in the SmartNews iOS app
Xcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみた
Xcodeで値を表示する
Xcodeで値を表示する
SmartNewsアプリの品質
SmartNewsアプリの品質
delayed_jobの自動再起動
delayed_jobの自動再起動
C++でHello worldを書いてみた
C++でHello worldを書いてみた
フィルタドライバ入門
フィルタドライバ入門
三日で書くGroonga関数
三日で書くGroonga関数
L-R
L-R
FPGA
FPGA
WkWebViewのキャッシュについて調べた
1.
WKWebViewのキャッシュ について調べた potatotips #44
2.
自己紹介 ● Twitter ○ hotpepsi ●
趣味 ○ 競技プログラミング、ピアノ、テニス、ボルダリング ● ライフワーク ○ デバッグ ● 勤務先
3.
Agenda ● 調査のきっかけ、方法、結果 ● OSバージョン毎の比較 ●
まとめ
4.
調査のきっかけ ● iOS 10で、一部のユーザーのアプリの使用容量が数GBに ●
WKWebViewのキャッシュが原因
5.
調査対象 ● WKWebViewが保持するデータ ○ コンテンツ(blobs) ■
HTMLや画像、動画データ ○ コンテンツ以外のデータ ■ cookies、local storageなど ● 今回はコンテンツ(blobs)の肥大化が調査対象
6.
調査方法 ● 実機 ● シミュレータ ●
ソースコード
7.
実機とシミュレータでの調査方法 ● アプリを用意する ○ 既存のアプリを改造し、数秒ごとにランダムでwebページ を開く ■
比較のため、WKWebViewとUIWebViewで試す ○ WKWebViewだけの単純なアプリを作る ● アプリバージョンやOSバージョン毎に内容を比較する
8.
実機のデータ ● アプリのデータをMacに転送する ○ XcodeのDevices
and Simulators -> Download Container ○ xcappdataを右クリック -> パッケージの内容を表示
9.
シミュレータのデータ ● ディレクトリの内容を調べる ○ Macでの場所はNSSearchPathForDirectoriesInDomainsな どを出力させればわかる ○
~//Library/Developer/CoreSimulator/Devices/ ● WKWebViewに関しては、ディレクトリの構成(位置)が実機と 異なるため、今回は参考にならなかった
10.
ソースコード ● https://opensource.apple.com/ ○ tar.gzアーカイブをダウンロードしてgrepする ●
該当部分はWebKit2 ○ UI process、web process、network processなど、複数の プロセスからなる、WebKitのAPI層 ○ キャッシュを操作するのはnetwork process
11.
OSバージョン毎の比較 ● iOS 7
- WKWebViewは存在しない ● iOS 8 ● iOS 9 ● iOS 10 ● iOS 11
12.
iOS 8のWKWebViewのキャッシュ ● コンテンツ(blobs)はNSURLCacheを利用して格納される ○
NSURLCacheを消せば消える ● コンテンツ以外のデータ(cookiesなど)は別のフォルダにある ○ この部分を消すAPIは存在しない ● 最大容量はNSURLCacheに従うため、肥大化しない
13.
iOS 9のWKWebViewのキャッシュ ● WKWebsiteDataStoreが導入された ○
API経由で消すこともできる ● NSURLCacheには書き込まない ○ 最大容量をゼロに設定している模様 ● 試した限りでは肥大化しない
14.
iOS 9のWKWebsiteDataStoreのコンテンツ部分 ● 定期的に使用容量を確認している ○
Statistics::shrinkIfNeeded() ■ 100000個で消去 ○ Storage::shrinkIfNeeded() ■ 最大容量を超えたら消去 ● 最大容量の最大値は175MB
15.
iOS 10のWKWebViewのキャッシュ ● APIや実装は、ほぼiOS
9のものと同じ ● しかしiOS 10ではどんどん肥大化していく ● ソースを追ってみたが調べきれず ● 肥大化するのはおそらくバグ
16.
iOS 10のWKWebViewのキャッシュの問題点 ● OSの問題 ●
WKWebsiteDataStoreの問題
17.
iOS 10とキャッシュ ● WKWebsiteDataStoreはアプリに所属し、アプリのキャッシュ 領域に作成される ●
キャッシュ領域もアプリの使用容量に含まれる ● キャッシュは、デバイス全体の容量が足りなくなるとOSが削 除するはずだが、ユーザーからはアプリが占有しているように 見える
18.
iOS 10のWKWebsiteDataStoreの問題点 ● 自動的に消えず、肥大化する ●
APIが貧弱 ○ 総容量の制限ができない、総容量がわからない ○ 古いコンテンツ(指定日時以前)だけを消すAPIがない ■ 全部または新しいコンテンツ(指定日時以降)は消せる
19.
余談: iOS 10のUIWebView ●
UIWebViewはNSURLCacheを使う ● 10.0、10.1、10.2は容量制限がなく、無尽蔵に増える ● 10.3では修正されている
20.
Bug Reporterで報告 ● 以下を報告 ○
アプリの使用サイズが肥大化する ● 追記の要望として以下も書いておいた ○ 古いキャッシュを消すAPIがほしい ○ 最大のサイズを指定できるようにしてほしい
21.
WWDCで開発者と話す ● アプリの使用サイズが肥大化することを説明 ● 要望を伝えた ○
古いのを消すAPIを追加できないか? ■ 「blobs以外も一貫性を保とうとすると難しい」 ○ キャッシュ領域をアプリ領域から除外できないか? ■ それはもっともなので、検討したい
22.
iOS 11のWKWebViewのキャッシュ ● OSの重要な変更 ○
キャッシュがアプリの使用サイズに含まれなくなった
23.
まとめ ● 同じAPIでも、内部実装や挙動が変わることがある ● Appleはちゃんとソースコードを公開している ●
iOS 11は良い
Download now