SlideShare ist ein Scribd-Unternehmen logo
1 von 71
TalkNote × Frontrend
レンダリングを意識した
パフォーマンスチューニング

@pocotan001
Hayato Mizuno
なぜ最適化が必要か
 Webの閲覧時はあらかたレンダリングにコストを
かけている(スクロール、他ユーザー操作など)
 ユーザーはOSとの感触が大きく違うものに違和感、
またはストレスを感じる
 時に過剰なバッテリー消費、画面のチラつきなどの
二次災害を引き起こす
SETTINGS⚙
開発ツールの準備
Google Chrome Canary Safari
defaults write com.apple.Safari IncludeInternalDebugMenu 1
@黒い画面(Macのみ)
SETTINGS⚙
}下2つあればおk
SETTINGS⚙
ない場合は有効にチェック(あれば 規定で)
SETTINGS⚙ about:flags
REFLOW
PAINT
CSS ANIMATION


REFLOW

REFLOW http://inception-explained.com/
paint
HTML
DOM
CSSOM
CSS
レンダーツリー
視覚部分を
表すツリー
REFLOW
REFLOW http://www.youtube.com/watch?v=ILvF25ljaoM/
html
head body
title h1 p
[text node] [text node] [text node]
REFLOW
DOMツリー
display:blockroot
head body
title h1
[text line] [text line]
ツリーに挿入されない要素
REFLOW
レンダーツリー
p
[text line]
root
head body
title h1
[text line] [text line]
位置やサイズの変更を伴う → リフローあり
display:none
REFLOW
ツリーに挿入されない要素レンダーツリー
p
[text line]
visibility: visibleroot
head body
title h1
[text line] [text line]
p
[text line]
REFLOW
ツリーに挿入されない要素レンダーツリー
root
body
h1
[text line]
p
[text line]
visibility: hidden
位置やサイズの変更を伴わない → リフローなし
REFLOW
ツリーに挿入されない要素レンダーツリー
head
title
[text line]
Debug > Show Render TreeREFLOW
REFLOW Debug > Show Render Tree
$('p').css('margin', '5px')
$('p').css('margin', '5px')
REFLOW
リフローx2?
1 位置変更がないため
REFLOW
$('p').css('margin', '5px')
.css('padding', '5px')
.css('top', '5px')
.css('left', '5px');
REFLOW
リフローx4?
1 可能な限り収束される
REFLOW
REFLOW
リフロー?
 display
 visibility
 color
 border
 border-radius
REFLOW
リフロー?
 display
 visibility
 color
 border
 border-radius
リフローなし
リフローなし
リフローなし
REFLOW
リフローのトリガー
http://kellegous.com/j/2013/01/26/layout-performance/
 スタイルの変更
css(), addClass(), show(), animate() ...
 DOMノードの変更
html(), text(), append(), focus() ...
 特定のプロパティの取得
offset(), position() ...
 レイアウト変更の原因となる操作
ウィンドウサイズの変更, スクロール, テキストの入力 ...
$('<p>test</p>').appendTo('body').hide();
生成時に色々と追加が
必要なケース
REFLOW
Example 1
$('<p>test</p>').hide().appendTo('body');
描画する前に行う
REFLOW
Example 1
Before
REFLOW
Example 1
After
REFLOW
Example 1
$('<img src="200x100.jpg">').
appendTo('body');
imgを生成するケース
REFLOW
Example 2
$('<img src="200x100.jpg" width="200"
height="150">').
appendTo('body');
描画の領域を明示しておく
REFLOW
Example 2
Before
REFLOW
Example 2
After
REFLOW
Example 2
$('p').css('top', $target.offset().top)
.css('left', $target.offset().left);
複数回に分けて実行されるcss()
REFLOW
Example 3
$('p').css({
top: $target.offset().top,
left: $target.offset().left
});
1回のcss()にまとめる
REFLOW
Example 3
$('p').css({
top: $target.offset().top,
left: $target.offset().left
});
リフローが必要な取得系メソッド
REFLOW
Example 3
var offset = $target.offset();
$('p').css({
top: offset.top,
left: offset.left
});
可能ならキャッシュして使い回す
REFLOW
Example 3
Before
REFLOW
Example 3
After
REFLOW
Example 3
<script src="jquery.js"></script>
<script src="jquery-ui.js"></script>
<script>
$(function(){ $('#target').accordion(...); });
</script>
</body>
UI表示後にスタイルを変更するケース
REFLOW
Example 4
表示 JS 変更
REFLOW
Example 4
<script src="jquery.js"></script>
<script src="jquery-ui.js"></script>
<script>
$(function(){ $('#target').accordion(...); });
</script>
</head>
<head> に移す、またはstyle付けはCSSでやる
REFLOW
Example 4
JS 表示&更新
REFLOW
Example 4
REFLOW
影響する要素を減らす
 アニメーションは固定配置で行う
 スタイルは出来るだけ末端要素で行う
 テーブルレイアウトを避ける
REFLOW http://mir.aculo.us/dom-monster/
REFLOW http://mir.aculo.us/dom-monster/
PAINT

PAINT http://ut.uniqlo.com/
PAINT
リペイントのトリガー
 スタイルの変化による画面の更新
:hover, :active, アニメーション ...
 同位置にとどまる系
position: fixed, background-attachment: fixed ...
 画面更新の原因となる操作
ウィンドウサイズの変更, スクロール, テキストの入力 ...
特にペイントに時間のかかるもの
http://perfectionkills.com/profiling-css-for-fun-and-profit-optimization-notes/PAINT
値や組み合わせによってはより高コスト
 color: rgba()
 opacity
 background: linear-gradient()
 border-radius
 text-shadow
 ... etc
http://codepen.io/pocotan001/full/weJDHPAINT
http://codepen.io/pocotan001/full/weJDHPAINT
PAINT
1-5を繰り返し
1. 「Timeline」であたりを付ける
2. 「continuous page repainting」をチェック
3. `H`ショートカットを使い要素を特定
4. ネックになっているスタイルを特定
5. そのスタイルが必要かどうかを検討
PAINT
First paint
var fp = chrome.loadTimes().firstPaintTime -
chrome.loadTimes().startLoadTime;
console.log('First paint: ' + fp);
http://goo.gl/H1JfA
CSS ANIMATION
http://frames-per-second.appspot.com/CSS ANIMATION
CSS ANIMATION
GPUハック (null transform hack)
 -webkit-transform: translateZ(0)
 -webkit-transform: translate3d(0,0,0)
 -webkit-transform: preserve-3d;
 -webkit-backface-visibility: hidden;
 ...etc
CSS ANIMATION
GPUハック (null transform hack)
 -webkit-transform: translateZ(0)
 -webkit-transform: translate3d(0,0,0)
 -webkit-transform: preserve-3d;
 -webkit-backface-visibility: hidden;
 ...etc
_:(´ཀ`」 ∠):_
http://intely.jp/CSS ANIMATION
http://codepen.io/pocotan001/full/ihvcFCSS ANIMATION
http://codepen.io/pocotan001/full/ihvcFCSS ANIMATION
http://codepen.io/ariya/full/xuwgyCSS ANIMATION
http://leaverou.github.io/animatable/CSS ANIMATION
http://andrew-hoyer.com/experiments/clock/CSS ANIMATION
http://mrdoob.github.io/three.js/examples/css3d_periodictable.htmlCSS ANIMATION
http://dev.sencha.com/animator/demos/redridinghood/CSS ANIMATION
http://tympanus.net/Development/ImageTransitions/index.htmlCSS ANIMATION
http://jsbin.com/efirip/5CSS ANIMATION
CSS ANIMATION
まとめ
 目安は30fps
 動く部分のみ composited layer として分離する
 不要なテクスチャのアップロードを見つける
TalkNote × Frontrend
Thank you

Weitere ähnliche Inhalte

Was ist angesagt?

Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいか
Hiroshi Tokumaru
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Ryosuke Uchitate
 

Was ist angesagt? (20)

PHPUnit 4.0で追加されたwillReturn*()の紹介
PHPUnit 4.0で追加されたwillReturn*()の紹介PHPUnit 4.0で追加されたwillReturn*()の紹介
PHPUnit 4.0で追加されたwillReturn*()の紹介
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
MySQL Fabricでぼっこぼこにされたはなし
MySQL FabricでぼっこぼこにされたはなしMySQL Fabricでぼっこぼこにされたはなし
MySQL Fabricでぼっこぼこにされたはなし
 
Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいか
 
今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf
 
モデル検査入門 #wacate
モデル検査入門 #wacateモデル検査入門 #wacate
モデル検査入門 #wacate
 
Easybuggy(バグ)の召し上がり方
Easybuggy(バグ)の召し上がり方Easybuggy(バグ)の召し上がり方
Easybuggy(バグ)の召し上がり方
 
ガチ(?)対決!OSSのジョブ管理ツール
ガチ(?)対決!OSSのジョブ管理ツールガチ(?)対決!OSSのジョブ管理ツール
ガチ(?)対決!OSSのジョブ管理ツール
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのrediswebエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
 
EMS 勉強会 第1回 Autopilot 祭り - Autopilot 最新情報
EMS 勉強会 第1回 Autopilot 祭り - Autopilot 最新情報EMS 勉強会 第1回 Autopilot 祭り - Autopilot 最新情報
EMS 勉強会 第1回 Autopilot 祭り - Autopilot 最新情報
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
 
AWS Black Belt Online Seminar - Amazon Lightsail
AWS Black Belt Online Seminar - Amazon Lightsail AWS Black Belt Online Seminar - Amazon Lightsail
AWS Black Belt Online Seminar - Amazon Lightsail
 
Web開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor AppWeb開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor App
 
New Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservabilityNew Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservability
 

Ähnlich wie レンダリングを意識したパフォーマンスチューニング

Smartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポートSmartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポート
Masaru Kimura
 
20101127 Android Usability Seminar
20101127 Android Usability Seminar20101127 Android Usability Seminar
20101127 Android Usability Seminar
Visso株式会社
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
Atsushi Harada
 
Windows Azureで Webサーバーを再発明してみる
Windows AzureでWebサーバーを再発明してみるWindows AzureでWebサーバーを再発明してみる
Windows Azureで Webサーバーを再発明してみる
Sunao Tomita
 
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
Amazon Web Services Japan
 
Pf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaPf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsola
android sola
 

Ähnlich wie レンダリングを意識したパフォーマンスチューニング (20)

Smartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポートSmartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポート
 
AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)
 
Ec cube user group tokyo mtg 2.13に向けて
Ec cube user group tokyo mtg 2.13に向けてEc cube user group tokyo mtg 2.13に向けて
Ec cube user group tokyo mtg 2.13に向けて
 
20101127 Android Usability Seminar
20101127 Android Usability Seminar20101127 Android Usability Seminar
20101127 Android Usability Seminar
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
 
Developer's Summit 夏 EnterpriseTED 資料
Developer's Summit 夏 EnterpriseTED 資料Developer's Summit 夏 EnterpriseTED 資料
Developer's Summit 夏 EnterpriseTED 資料
 
これからのOpenShiftの話をしよう
これからのOpenShiftの話をしようこれからのOpenShiftの話をしよう
これからのOpenShiftの話をしよう
 
LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2
 
Dep009 ie のままじゃダメな
Dep009 ie のままじゃダメなDep009 ie のままじゃダメな
Dep009 ie のままじゃダメな
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
 
Windows Azureで Webサーバーを再発明してみる
Windows AzureでWebサーバーを再発明してみるWindows AzureでWebサーバーを再発明してみる
Windows Azureで Webサーバーを再発明してみる
 
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types[AWS re:invent 2013 Report] AWS New EC2 Instance Types
[AWS re:invent 2013 Report] AWS New EC2 Instance Types
 
インフラチームのリモートワーク
インフラチームのリモートワークインフラチームのリモートワーク
インフラチームのリモートワーク
 
MacintoshでSilverlight開発
MacintoshでSilverlight開発MacintoshでSilverlight開発
MacintoshでSilverlight開発
 
ToolChainを使った次世代DevOps環境の作り方
ToolChainを使った次世代DevOps環境の作り方ToolChainを使った次世代DevOps環境の作り方
ToolChainを使った次世代DevOps環境の作り方
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術
 
Pf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaPf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsola
 
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
 
IT エンジニアのための 流し読み Windows - Windows 共有 PC モード
IT エンジニアのための 流し読み Windows - Windows 共有 PC モードIT エンジニアのための 流し読み Windows - Windows 共有 PC モード
IT エンジニアのための 流し読み Windows - Windows 共有 PC モード
 
Nano Server First Step
Nano Server First StepNano Server First Step
Nano Server First Step
 

Mehr von Hayato Mizuno

Mehr von Hayato Mizuno (10)

レスポンシブWebデザインでうまくやるための考え方
レスポンシブWebデザインでうまくやるための考え方レスポンシブWebデザインでうまくやるための考え方
レスポンシブWebデザインでうまくやるための考え方
 
"今" 使えるJavaScriptのトレンド
"今" 使えるJavaScriptのトレンド"今" 使えるJavaScriptのトレンド
"今" 使えるJavaScriptのトレンド
 
メンテナブルPSD
メンテナブルPSDメンテナブルPSD
メンテナブルPSD
 
赤い秘密
赤い秘密赤い秘密
赤い秘密
 
なんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうんなんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうん
 
フロントエンドの求めるデザイン
フロントエンドの求めるデザインフロントエンドの求めるデザイン
フロントエンドの求めるデザイン
 
Hello jQuery - 速習jQuery +綺麗なコードを書くためのヒント -
Hello jQuery - 速習jQuery +綺麗なコードを書くためのヒント -Hello jQuery - 速習jQuery +綺麗なコードを書くためのヒント -
Hello jQuery - 速習jQuery +綺麗なコードを書くためのヒント -
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
CoffeeScriptってなんぞ?
CoffeeScriptってなんぞ?CoffeeScriptってなんぞ?
CoffeeScriptってなんぞ?
 
ノンプログラマーのためのjQuery入門
ノンプログラマーのためのjQuery入門ノンプログラマーのためのjQuery入門
ノンプログラマーのためのjQuery入門
 

Kürzlich hochgeladen

Kürzlich hochgeladen (12)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

レンダリングを意識したパフォーマンスチューニング