Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
フロントエンドコーディングにおけるPageSpeed Insights対策 / fronten...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kou
February 01, 2019
Programming
7.2k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
フロントエンドコーディングにおけるPageSpeed Insights対策 / frontend pagespeed insights-
Kou
February 01, 2019
More Decks by Kou
See All by Kou
デザインを見ながらフロントエンドコーディングをするときの考え方 / design-coding
kkoudev
2
1.7k
React Nativeで作るiOSアプリケーションの環境構築設計 / react native env for ios
kkoudev
1
2.5k
Docker Compose利用者から見た Kubernetes 開発環境構築入門 / introduction to kubernetes for docker compose user
kkoudev
19
12k
フロントエンドデザイン・開発におけるマークアップ設計の基礎 / frontend markup design basics
kkoudev
4
2.9k
Dockerを利用したローカル環境から本番環境までの構築設計 / Project structure design for docker application
kkoudev
0
370
Other Decks in Programming
See All in Programming
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
140
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
Built Our Own Background Agent at LayerX
layerx
PRO
9
5.1k
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.8k
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
450
継続モナドとリアクティブプログラミング
yukikurage
3
700
仕様駆動開発の消費期限
watany
17
7.3k
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
FDEが実現するAI駆動経営の現在地
gonta
2
270
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.6k
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
210
Featured
See All Featured
A Tale of Four Properties
chriscoyier
163
24k
Abbi's Birthday
coloredviolet
3
9.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Facilitating Awesome Meetings
lara
57
7.1k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
New Earth Scene 8
popppiees
3
2.5k
Odyssey Design
rkendrick25
PRO
2
750
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
450
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
400
Transcript
ϑϩϯτΤϯυίʔσΟϯάʹ͓͚Δ PageSpeed Insightsରࡦ WEBΤϯδχΞษڧձ #11 Koichi Nagaoka
ࣗݾհ Ԭ ߒҰ (@kkoudev) ϛΫγΟͰΤϯδχΞͬͯ·͢ɻ
Google PageSpeed Insightsͱ Google͕ఏڙ͍ͯ͠ΔϞόΠϧύιίϯ͔ΒαΠτΞΫηεͨ͠ࡍͷ ύϑΥʔϚϯε͓ΑͼύϑΥʔϚϯεͷ՝ͱͳΔͷվળํ๏ΛϨ ϙʔτͯ͘͠ΕΔπʔϧͰ͢ɻ ύϑΥʔϚϯε݁Ռͷྨʹ͍ͭͯɺҎԼͷ̏ͭͷྨʹͳΓ·͢ɻ ͍ … είΞ
90 Ҏ্ɻຆͲͷ࠷దԽ͕͞Εͨཧతͳঢ়ଶ ฏۉ … είΞ 50ʙ89 ͷൣғɻ·ͩҰ෦࠷దԽՄೳͳΛؚΉ ͍ … είΞ 0ʙ49 ͷൣғɻ࠷దԽ͖͕͔͢ͳΓଟ͋͘Δ ύιίϯߴείΞΛग़͍͕͢͠ɺ ϞόΠϧʹ͍ͭͯ3GճઢఆͷείΞͱͳ͓ͬͯΓɺ͔ͳΓݫ͠Ίͷ ධՁͱͳΓ·͢ɻ(20191݄ݱࡏ)
PageSpeed InsightsͰ ܭଌͨ͠ͱ͖ͷ݁Ռྫ
None
ࠓճɺPageSpeed InsightsͰ Α͘ࢦఠ͞Ε͍͢ύϑΥʔϚϯε্ ͷͱɺͦͷ۩ମతͳվળํ๏ʹ ͍ͭͯҰ෦հ͠·͢ɻ
ϨϯμϦϯάϒϩοΫ ͷվળ 1
ϨϯμϦϯάϒϩοΫͱ ϨϯμϦϯάϒϩοΫͱɺJavaScriptCSSͷϑΝΠϧͷಡΈࠐΈத ʹɺฒߦͯ͠ϒϥβ͕HTMLͷಡΈࠐΈॲཧΛ࣮ߦͰ͖ͳ͘ͳͬͯ͠· ͏ঢ়ଶΛࢦ͠·͢ɻ PageSpeed InsightsͰଟ͘ͷαΠτ͕ࢦఠ͞ΕΔͱͯ͠ɺ͜ͷϨϯ μϦϯάϒϩοΫΛҾ͖ى͜͢ script λάͷࢦఆ link
λάͷࢦఆ͕ڍ͛ ΒΕ·͢ɻͰɺͲͷΑ͏ͳಡΈࠐΈࢦఆ͕ϨϯμϦϯάϒϩοΫΛҾ͖ ى͜͢ͷͰ͠ΐ͏͔ɻ
ϨϯμϦϯάϒϩοΫίʔυྫ <head> <link rel="stylesheet" href="/common_corporate/asset/css/reset_corporate.css"> <link rel="stylesheet" href="/common_corporate/asset/css/themify-icons.css"> <link rel="stylesheet"
href="/common_corporate/asset/css/style.css?20181226"> <link rel="stylesheet" href="/common_corporate/asset/css/webfont.css"> <script src="/common_corporate/asset/js/lib/jquery.easing.1.3.js"></script> <script src="/common_corporate/asset/js/lib/jquery.matchHeight-min.js"></script> <script src="/common_corporate/asset/js/lib/truncate-text.js"></script> <script src="/common_corporate/asset/js/script.js"></script> </head> ͜ͷΑ͏ʹɺheadλάʹهड़ͨ͠CSSͷಡΈࠐΈJavaScriptͷಡΈࠐΈ ɺରϑΝΠϧͷಡΈࠐΈͱ࣮ߦ͕ྃ͢Δ·ͰHTMLͷύʔεॲཧΛ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͘ͳΔ(ʹϨϯμϦϯάϒϩοΫ͞ΕΔ)༷ͱͳͬ ͍ͯ·͢ɻheadͰಡΈࠐΈࢦఆ͢ΔϑΝΠϧ͓ΑͼͦͷαΠζ͕ଟ͚Ε ଟ͘ͳΔ΄ͲɺϨϯμϦϯάϒϩοΫ͞ΕΔ͕࣌ؒ͘ͳΓɺύϑΥʔ ϚϯεʹଟେͳѱӨڹΛٴ΅͠·͢ɻ
ϨϯμϦϯάϒϩοΫίʔυվળྫᶃ <head> <link rel="preload" href="/common_corporate/asset/css/reset_corporate.css"> <link rel="preload" href="/common_corporate/asset/css/themify-icons.css"> <link rel="preload"
href="/common_corporate/asset/css/style.css?20181226"> <link rel="preload" href="/common_corporate/asset/css/webfont.css"> <script src=“/common_corporate/asset/js/lib/jquery.easing.1.3.js" defer></script> <script src=“/common_corporate/asset/js/lib/jquery.matchHeight-min.js" defer></ script> <script src=“/common_corporate/asset/js/lib/truncate-text.js" defer></script> <script src=“/common_corporate/asset/js/script.js" defer></script> </head> CSSͷಡΈࠐΈʹ preloadɺJavaScriptͷಡΈࠐΈʹ defer ·ͨ async Λ͏͜ͱͰಡΈࠐΈॲཧΛϨϯμϦϯάϒϩοΫͤͣʹɺඇಉظ ͰಡΈࠐΈ͢Δ͜ͱ͕ՄೳʹͳΓ·͢ɻͰɺશͯͷλάʹ͜ͷࢦఆΛ͠ ͯྑ͍ͷ͔ͱ͍͏ͱͦ͏͍͏Θ͚Ͱͳ͘ɺܭଌλάͷΑ͏ͳHTML͕ಡ ΈࠐΈ͞ΕΔલʹεΫϦϓτͷ࣮ߦΛ͓͖͍ྃͯͨ͠έʔεʹ͓͍ͯ defer async ͚ͭͳ͍ྫ͕ଟ͍Ͱ͢ɻ
ϨϯμϦϯάϒϩοΫίʔυվળྫᶄ <head> <link rel="preload" href=“/common_corporate/asset/css/bundle.css"> <script src=“/common_corporate/asset/js/lib/vendor.bundle.js” defer></script> <script src=“/common_corporate/asset/js/lib/main.js"
defer></script> </head> preloaddefer, asyncͰඇಉظʹϩʔυͤ͞Δ͚ͩͰϒϩοΩϯάվ ળ͠·͕͢ɺ͞ΒͳΔߴԽʹಡΈࠐΉϑΝΠϧΛݮΒ͢ඞཁ͕͋Γ ·͢ɻվળલͩͱଟͷCSSͱJSΛಡΈࠐΜͰ͍·͕ͨ͠ɺCSSJS ̍ͭʹͰ͖Δͷ̍ͭʹ·ͱΊͨํ͕ϩʔυ࣌ؒݮগ͠·͢ɻ ͜Εϒϥβ͕1ͭͷυϝΠϯʹରͯ͠ҰʹฒྻॲཧՄೳͳଓ͕ ܾ·͓ͬͯΓɺͦͷΛ͑Δͱ݁ہಡΈࠐΈʹ͕͔͔࣌ؒΔͨΊͰ͢ɻ CSSJSΛ1ͭʹ·ͱΊΔʹPostCSSɺwebpackɺParcelɺFuseBoxͳ ͲͷόϯυϥʔΛ͏ͱ؆୯ʹͰ͖·͢ɻ
preloadࢦఆͷओཁϒϥβରԠ ࣮ preload IEͱFirefoxͰରԠ͍ͯ͠·ͤΜɻ(ChromeɺSafariɺ EdgeରԠ͍ͯ͠Δ) ͦΕ͡Ό͑ͳ͍͡ΌΜʂͱࢥΘΕΔ͔͠Ε·ͤ Μ͕ɺʮfg-loadcssʯ(loadCSS) ͱ͍͏ϞδϡʔϧΛ͏͜ͱͰ؆୯ʹର Ԡ͕ՄೳʹͳΓ·͢ɻ https://www.npmjs.com/package/fg-loadcss
loadCSSͷࢦఆྫ <head> <link rel="preload" href=“/common_corporate/asset/css/bundle.css” onload="this.onload=null;this.rel='stylesheet'"> <noscript> <link rel="stylesheet" href=“/common_corporate/asset/css/bundle.css”>
</noscript> <script> !function(n){"use strict";n.loadCSS||(n.loadCSS=function(){});var o=loadCSS.relpreload={};if(o.support=function(){var e;try{e=n.document.createElement("link").relList.supports("preload")}catch(t){e=!1}return function(){return e}}(),o.bindMediaToggle=function(t){var e=t.media||"all";function a() {t.addEventListener?t.removeEventListener("load",a):t.attachEvent&&t.detachEvent("onload",a),t.setAttribute("onload",null),t.media=e}t.addEventListener? t.addEventListener("load",a):t.attachEvent&&t.attachEvent("onload",a),setTimeout(function(){t.rel="stylesheet",t.media="only x"}),setTimeout(a,3e3)},o.poly=function(){if(! o.support())for(var t=n.document.getElementsByTagName("link"),e=0;e<t.length;e++){var a=t[e];"preload"!==a.rel||"style"!==a.getAttribute("as")||a.getAttribute("data-loadcss")|| (a.setAttribute("data-loadcss",!0),o.bindMediaToggle(a))}},!o.support()){o.poly();var t=n.setInterval(o.poly,500);n.addEventListener?n.addEventListener("load",function() {o.poly(),n.clearInterval(t)}):n.attachEvent&&n.attachEvent("onload",function(){o.poly(),n.clearInterval(t)})}"undefined"!=typeof exports?exports.loadCSS=loadCSS:n.loadCSS=loadCSS} ("undefined"!=typeof global?global:this); </script> </head> loadCSS preload ࢦఆͷରԠϒϥβͰ͋Εͦͷ··ϒϥβͷ preloadΛར༻͠ɺඇରԠϒϥβͰ͋ΕJSʹͯpreload૬ͷॲཧΛ࣮ ݱ͢ΔͷʹͳΓ·͢ɻ্هͷྫͷ࠷ޙʹ͋Δscriptλά͕loadCSSͷຊ ମͰɺ͜ΕΛΠϯϥΠϯهड़(ίϐϖ)͠·͢ɻ
preloadࢦఆʹΑΔ CSSͷಡΈࠐΈʹ preload Λ༻͢Δ͜ͱͰϨϯμϦϯάϒϩοΫͤͣʹ ඇಉظͰCSSͷಡΈࠐΈ͕Մೳͳ͜ͱΛલͷϖʔδͰհ͠·͕ͨ͠ɺ CSS͕ඇಉظͰಡΈࠐ·ΕΔͱɺHTMLඳը࣌ʹը໘ʹCSS͕ॠؒతʹద ༻͞Εͳ͍ঢ়ଶ(ʹը໘่Ε͕ى͖ͯ͠·͏ঢ়ଶ)͕ඳը͞Εͯ͠·͏έʔ ε͕͋Γ·͢ɻ͜ΕΛଏʹ FOUC (Flash
Of Unstyled Content)ͱݺͼ· ͢ɻ ͱ͍͑ɺpreload ࢦఆΛ͠ͳ͚ΕϨϯμϦϯάϒϩοΫ͞Εͯ͠·͍ ·͢ɻͳΜͱ͔͜ͷ̎ͭΛ্ख͘ղܾ͢Δํ๏ͳ͍ͷͰ͠ΐ͏͔ɻ
Critical Path CSSͷࢦఆ Critical Path CSSͱCritical Rendering PathΛվળ͢ΔͨΊͷCSSʹͳ Γ·͢ɻCritical Rendering
Pathͱϒϥβʹ࣮ࡍʹը໘Λඳը͢Δͨ Ίʹඞཁͳॲཧγʔέϯεͷ͜ͱΛࢦ͠·͢ɻCritical Path CSSCritical Rendering PathͷCSSʹؔ͢Δ෦Λࢦ͠·͢ɻ Θ͔Γ͍͑͘͢ɺϑΝʔετϏϡʔͷඳըʹඞཁͳCSSͱ͍ͬͨͱ͜ ΖʹͳΓ·͢ɻ preload࣌ͷFOUCΛվળ͢Δʹɺ͜ͷCritical Path CSSΛ͋Β͔͡Ί HTMLͷstyleλάʹΠϯϥΠϯهड़Λ͓ͯ͘͜͠ͱͰվળՄೳʹͳΓ· ͢ɻ
Critical Path CSSͷࢦఆྫ <head> <link rel="preload" href=“/common_corporate/asset/css/bundle.css"> <style> *,:after,:before{background-repeat:no-repeat;-webkit-box-sizing:border-box;box- sizing:border-box}:after,:before{text-decoration:inherit;vertical-align:inherit}
html{font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.15; </style> </head>
Critical Path CSSͷࣗಈੜ ຖճΠϯϥΠϯཁૉͱͯ͠खಈͰهड़͢Δʹແཧ͕͋ΔͷͰɺCritical Path CSSݩͷCSS͔Βࣗಈੜ͢Δͷ͕ओྲྀͰ͢ɻ ࣗಈੜΛߦ͏ʹɺʮcriticalʯͱ͍͏NPMϞδϡʔϧΛར༻͠·͢ɻ https://www.npmjs.com/package/critical criticalϑΝʔετϏϡʔͷ෯ͱߴ͞Λࢦఆ͠ɺͦͷൣғͰඞཁͱͳΔε λΠϧใΛݩͷCSSϑΝΠϧ͔Βग़ྗ͢ΔΈʹͳ͍ͬͯ·͢ɻ
(ϑΝʔετϏϡʔͷ෯ͱߴ͞σϑΥϧτͩͱ 1300x900 ʹͳ͍ͬͯ· ͢ɻجຊతʹͦͷ··Ͱͳ͍Ͱ͢)
ը૾ಡΈࠐΈ ͷվળ 2
ը૾ͷಡΈࠐΈͷվળʹ͍ͭͯ ϨϯμϦϯάϒϩοΫͷ࣍ɺը૾ͷಡΈࠐΈͷվળʹ͍ͭͯʹͳΓ· ͢ɻPageSpeed InsightsͰଟ͘ͷαΠτ͕ࢦఠ͞ΕΔ߲ͷ̍ͭͱͯ͠ ʮը૾αΠζͷ࠷దԽ͕͞Ε͍ͯͳ͍ʯͱ͍͏ͷ͕͋Γ·͢ɻ PageSpeed InsightsͰείΞΛ্͛ΔͨΊʹɺՄೳͳݶΓը૾ͷαΠζ খ͍ͯ͘͘͞͠ඞཁ͕͋Γ·͢ɻجຊతʹPhotoshopΛ͡Ίͱͨ͠π ʔϧͰԿࢦఆͤͣpngjpegը૾Λग़ྗͨ͠ͷը૾αΠζ͕࠷దԽ ͞Ε͍ͯͳ͍ͨΊɺͦͷ··ͩͱPageSpeed
Insightsʹ͓͚Δࢦఠͷର ͱͳͬͯ͠·͍·͢ɻ
ը૾αΠζͷ࠷దԽํ๏ ҰൠతʹΑ͘ΘΕ͍ͯΔϞδϡʔϧͱͯ͠ʮimageminʯͱ͍͏NPMϞ δϡʔϧ͕͋Γ·͢ɻ͜Εͱ࠷దԽ͍ͨ͠ը૾͝ͱʹ༻ҙ͞Ε͍ͯΔϓϥ άΠϯϞδϡʔϧ(ʮimagemin-pngquantʯʮimagemin-mozjpegʯͱ͍ ͏Ϟδϡʔϧ)Λ͑؆୯ʹ࠷దԽ͕ՄೳͱͳΓ·͢ɻ https://www.npmjs.com/package/imagemin
3xղ૾࣌ͷը૾ͷѻ͍ RetinaσΟεϓϨΠ(2xղ૾)͕ొͯ͠ਵܦͪ·͕͢ɺ࠷ۙͰ͞Β ʹͦͷ্ͷ3xղ૾Λ࣋ͭRetina Display͕ొ͍ͯ͠·͢ɻ(iPhone Xɺ XSɺXS MaxͳͲ͕͜Εʹ͋ͨΓ·͢) 2x͕ओྲྀͷ࣌ͩͱ2xͷը૾͚ͩΛ༻ҙͯͦ͠ΕΛ width
height ࢦఆ Ͱ 1x αΠζʹͯ͠ίʔσΟϯάΛ͍ͯ͠Δํதʹ͍͔ͨͱࢥ͍·͢ ͕ɺ3xαΠζͱͳΔͱ࠷దԽͯͦͦ͜͜͠େ͖ͳαΠζͰ͢ɻ ͦͷͨΊɺͲͷσΟεϓϨΠʹ͓͍ͯ3xΛॖখͯ͠͏ͱ͍ͬͨํ๏ͩ ͱɺ3xղ૾Ҏ֎ͷσΟεϓϨΠͰຊདྷෆཁͳͷʹඞཁҎ্ʹେ͖ͳը ૾ΛಡΈࠐΉඞཁ͕ग़͖ͯͯ͠·͏(ʹ͕͔͔࣌ؒΔ)݁Ռͱͳͬͯ͠·͍ ·͢ɻ ͜ΕΛղܾ͢ΔʹͲ͏͢ΕΑ͍Ͱ͠ΐ͏͔ɻ
srcsetଐੑʹ͍ͭͯ imgλάʹsrcsetͱ͍͏ଐੑ͕͋Γ·͢ɻ͜Εը໘ղ૾͝ͱʹಡΈ ࠐΉը૾ΛࢦఆͰ͖Δͱ͍͏ଐੑͰ͢ɻҎԼͷΑ͏ʹར༻͠·͢ɻ <img src="./images/display.png" srcset="./images/
[email protected]
2x, ./images/
[email protected]
3x">
srcଐੑʹ 1x ͷը૾αΠζɺsrcsetଐੑʹ 2x ͱ 3x ͷը૾αΠζΛ্ هͷΑ͏ʹࢦఆ͢Δ͜ͱͰɺϒϥβଆͰࣗಈతʹը໘ղ૾ʹԠͨ͡ը ૾͚ͩΛಡΈࠐΈͯ͘͠Ε·͢ɻ
CSSͷimage-setؔʹ͍ͭͯ CSSʹimgλάͷsrcsetଐੑͷΑ͏ʹը໘ղ૾͝ͱʹը૾ΛઃఆͰ͖ Δimage-setͱ͍͏͕ؔ͋Γ·͢ɻҎԼͷΑ͏ʹࢦఆ͠·͢ɻ .bg-image { background-image: image-set( url(‘./images/display.png') 1x, url('./images/
[email protected]
')
2x, url('./images/
[email protected]
') 3x) } srcsetଐੑͱಉ͡Α͏ʹը૾ύεͷޙʹղ૾Λࢦఆ͠·͢ɻ
srcsetଐੑͷIE11ରԠ ྫʹΑͬͯ IE11 srcsetଐੑʹରԠ͍ͯ͠·ͤΜɻ໘Ͱ͕͢PolyfillͰର Ԡ͢Δඞཁ͕͋Γ·͢ɻIE11ͰsrcsetଐੑΛར༻͢Δʹʮpicturefillʯͱ ͍͏NPMϞδϡʔϧΛར༻͠·͢ɻҎԼ͕ࢦఆྫʹͳΓ·͢ɻ https://www.npmjs.com/package/picturefill import picturefill from
'picturefill'; picturefill(); JavaScript (Babel)
image-setؔͷओཁϒϥβରԠ ͜Ε·ͨྫʹΑͬͯimage-setؔChromeͱSafari͔͠ओཁϒϥβͰ ରԠ͓ͯ͠ΒͣɺIEFirefoxͰରԠ͍ͯ͠·ͤΜɻ ͜ͷʹର͢ΔରԠͱͯ͠ PostCSS ͷϓϥάΠϯͰ͋Δʮpostcss- image-set-polyfillʯϞδϡʔϧΛར༻͢Δ͜ͱͰճආͰ͖·͢ɻ https://www.npmjs.com/package/postcss-image-set-polyfill ͜ͷPolyfillJSΛར༻͢ΔͷͰͳ͘ɺCSSͷmedia queryΛར༻ͯ͠ը
໘ղ૾Λఆ͢Δ͜ͱͰɺٖࣅతʹimage-set૬ͷελΠϧΛ࣮ݱ͢ ΔͷͱͳΓ·͢ɻ
image-setؔͷIE11ରԠ ʮpostcss-image-set-polyfillʯΛར༻͢Δʹ͋ͨͬͯ̍ҙ͕͋Γ· ͢ɻͦΕIE11ͷରԠͰ͢ɻલड़ͷ௨Γɺʮpostcss-image-set-polyfillʯ CSSͷmedia queryʹΑٖͬͯࣅతʹimage-setΛ࣮ݱ͢ΔͷͰ͕͢ɺ IE11ͰͳΜͱ1x2xͱ͍ͬͨղ૾୯ҐΛmedia queryͰαϙʔτ͠ ͍ͯͳ͍ͷͰ͢ɻͭͮ͘͘खͷ͔͔ΔϒϥβͰ͢Ͷɻճආࡦͱͯ͠ผ ͷ୯Ґ(dpi)Λར༻͠·͢ɻdpiΛར༻ͨ࣌͠ͷը໘ղ૾ͷࢦఆҎԼͷ ௨ΓʹͳΓ·͢ɻ
1x … 96dpi 2x … 192dpi 3x … 288dpi ͦͷͨΊɺIE11ʹରԠ͢Δʹɺimage-setʹ͓͚Δղ૾ dpi ୯Ґ Ͱࢦఆ͢Δඞཁ͕͋Γ·͢ɻ
ը૾ͷԆಡΈࠐΈͷར༻ʹ͍ͭͯ ը໘ղ૾ผʹ࠷దͳը૾Λϩʔυ͢ΔॲཧΛೖΕͨͱ͜ΖͰɺͲͪΒʹ ͤΑಡΈࠐΈ͢Δը૾͕ଟա͗ͨΓαΠζ͕େ͖͍ͱ݁ہಡΈࠐΈʹ࣌ ͕͔͔ؒΔ݁Ռͱͳͬͯ͠·͍·͢ɻ ͦͷͨΊΑ͘ར༻͞ΕΔख๏ͱͯ͠ɺը໘ʹ·ͩදࣔ͞Ε͍ͯͳ͍ը૾ Λޙ͔ΒಡΈࠐΉը૾ԆಡΈࠐΈ(lazyload)Λར༻͠·͢ɻ PageSpeed InsightsͷϞόΠϧධՁʹ͓͍ͯϑΝʔετϏϡʔʹදࣔ͞ Ε͍ͯͳ͍ը૾ʹlayzloadΛద༻͠ͳ͍ͱࢦఠͷରͱͳͬͯ͠·͍· ͢ɻ
ը૾ԆಡΈࠐΈͷରԠ ը૾ԆಡΈࠐΈͷϥΠϒϥϦଟ͋Γ·͕͢ɺલड़ͷsrcsetଐੑʹର Ԡͨ͠ͷݶΒΕ͍ͯ·͢ɻ͓͢͢Ίͳͷ͕ʮvanilla-lazyloadʯͱ͍͏ NPMϞδϡʔϧͰ͢ɻ͜ΕΛ͏ͱ src ଐੑ͚ͩͰͳ͘ srcset ଐੑͷ lazyloadʹରԠ͕ՄೳͰ͢ɻ https://www.npmjs.com/package/vanilla-lazyload
vanilla-lazyloadͷࢦఆྫ HTML <img class="js-lazyload" src="./images/loading.png" data-src="./images/display.png" data-srcset="./images/
[email protected]
2x, ./images/
[email protected]
3x"
alt="Display Image") /> JavaScript (Babel) import LazyLoad from 'vanilla-lazyload'; new LazyLoad({ elements_selector: '.js-lazyload', });
αʔόαΠυ ͷվળ 3
αʔόαΠυͷվળʹ͍ͭͯ PageSpeed Insightsʹ͓͍ͯCSSJSɺը૾ͷѹॖظݶ(Expires)ͷ ࢦఆʹ͍ͭͯͷࢦఠ͋Γ·͢ɻ ͜ΕΒαʔόαΠυଆͰͷ৴࣌ͷઃఆͱͳΓɺϑϩϯτΤϯυଆͷΈ Ͱ੍ޚ͕Ͱ͖·ͤΜɻ ؆୯ʹݴ͑ɺNginxApacheͳͲͷHTTPαʔόʔɺ·ͨCloudFront ͳͲͷCDNΛͬͯgzipѹॖͷࢦఆͱExpiresͷࢦఆΛߦ͏͜ͱͰվળՄ ೳͰ͢ɻ (͜͜Ͱ֓ཁͷΈͷհͱ͠·͢)
·ͱΊ
WebαΠτͷύϑΥʔϚϯεϢʔβ ʔମݧͷվળ͚ͩͰͳ͘ɺSEOʹ͋ ΔఔӨڹΛٴ΅͠·͢ɻԿΑΓ PageSpeed InsightsͰߴείΞΛୟ͖ ग़͢ͱͦΕ͚ͩͰྑ͍αΠτײ͕ग़ͯ ͘ΔͷͰੋඇͱରࡦ͢Δ͜ͱΛ͓͢ ͢Ί͠·͢ʂ
THANK YOU ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠