ããã³ããšã³ãDevice Memory APIã䜿çšããŠWebããã©ãŒãã³ã¹ãæé©åããããŒãšã³ãããã€ã¹ã§ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããçã®ã¢ãããã£ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®éçºè åãç·åã¬ã€ãã
ããã³ããšã³ãDevice Memory APIïŒã¡ã¢ãªãæèããWebãšã¯ã¹ããªãšã³ã¹ã®æ§ç¯
Webéçºã®äžçã§ã¯ãç§ãã¡ã¯ãã°ãã°é«æ§èœãªãã·ã³ãšé«éã§å®å®ãããããã¯ãŒã¯ã§éçºãšãã¹ããè¡ããŸãããããããŠãŒã¶ãŒã¯é©ãã»ã©å€æ§ãªããã€ã¹ãç¶æ³ããç§ãã¡ã®å¶äœç©ã«ã¢ã¯ã»ã¹ããŸããéçºè ã®ã©ãããããã§ã¯å®ç§ã«åäœãããæŽç·Žãããæ©èœè±å¯ãªã¢ããªã±ãŒã·ã§ã³ããæ¥ç¶ãéãããå°åã®å»äŸ¡ãªã¹ããŒããã©ã³ã§ã¯ãã€ã©ã€ã©ããã»ã©é ãäœéšã«ãªããããããŸããããã®éçºç°å¢ãšå®éã®å©çšç¶æ³ãšã®ã®ã£ããã¯ãçã«ã°ããŒãã«ã§å æ¬çãªWebãšã¯ã¹ããªãšã³ã¹ãåµé ããäžã§æãéèŠãªèª²é¡ã®äžã€ã§ãã
ãã®éãããã©ãåããã®ã§ããããïŒãªãããªäœéšããµããŒãã§ãããŠãŒã¶ãŒã«ã¯ãããæäŸãã€ã€ãæ§èœã®äœãããŒããŠã§ã¢ãæã€ãŠãŒã¶ãŒã«ã¯é«éã§æ©èœçããã€ä¿¡é Œæ§ã®é«ãäœéšãä¿èšŒããã«ã¯ã©ãããã°ããã®ã§ããããïŒçãã¯ãã¢ãããã£ãïŒé©å¿åïŒãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšã«ãããŸããç»äžçãªã¢ãããŒãã§ã¯ãªãããŠãŒã¶ãŒã®ããã€ã¹ã®èœåã«åãããŠãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã調æŽããªããã°ãªããŸãããæãéèŠã§ãããªããèŠéããããã¡ãªããã€ã¹ã®å¶çŽã®äžã€ãã¡ã¢ãªïŒRAMïŒã§ããããã§Device Memory APIãç»å ŽããŸããããã¯ãããã³ããšã³ãéçºè ãã¢ããªã±ãŒã·ã§ã³ãã¡ã¢ãªå¯Ÿå¿ã«ããããã®ãã·ã³ãã«ãã€åŒ·åãªã¡ã«ããºã ãæäŸããŸãã
Device Memory APIãšã¯äœãïŒ
Device Memory APIã¯ããŠãŒã¶ãŒã®ããã€ã¹ã§å©çšå¯èœãªRAMã®éã«é¢ãããã³ããæäŸããWebæšæºã§ããããã¯éåžžã«ã·ã³ãã«ãªAPIã§ã`navigator`ãªããžã§ã¯ãäžã®åäžã®èªã¿åãå°çšããããã£ãéããŠå ¬éãããŠããŸãã
`navigator.deviceMemory`
ãã®ããããã£ã«ã¢ã¯ã»ã¹ãããšãããã€ã¹ã®RAMã®ããããã®å€ãã®ã¬ãã€ãåäœã§è¿ãããŸããäŸãã°ããã©ãŠã¶ã®ã³ã³ãœãŒã«ã§ç°¡åãªãã§ãã¯ãè¡ããšæ¬¡ã®ããã«ãªããŸãã
`console.log(navigator.deviceMemory);` // åºåäŸ: 8
è¿ãããå€ãšãã©ã€ãã·ãŒã«ã€ããŠ
APIã7.89GBã®ãããªæ£ç¢ºãªæ°å€ãè¿ããªãããšã«ãæ°ã¥ããããããŸããã代ããã«ã2ã®ã¹ãä¹ã«äžžããããå€ãè¿ãããŸãã仿§ã§ã¯ã0.25ã0.5ã1ã2ã4ã8ãªã©ã®å€ãææ¡ãããŠããŸããããã¯ãã©ã€ãã·ãŒãèæ ®ããæå³çãªèšèšã§ãã
ããAPIãæ£ç¢ºãªRAMã®éãæäŸããå Žåãããã¯ãã©ãŠã¶ã®ããã£ã³ã¬ãŒããªã³ãã£ã³ã°ãïŒå€ãã®å°ããªæ å ±ãçµã¿åãããŠãŠãŒã¶ãŒã®äžæã®èå¥åãäœæãã远跡ã«å©çšããè¡çºïŒã®ããã®æ°ããªããŒã¿ãã€ã³ãã«ãªãåŸãŸããå€ããã±ããåïŒæ®µéåãïŒããããšã§ãAPIã¯ãŠãŒã¶ãŒã®ãã©ã€ãã·ãŒãªã¹ã¯ãå€§å¹ ã«å¢ããããšãªããããã©ãŒãã³ã¹æé©åã«åœ¹ç«ã€ååãªæ å ±ãæäŸããŸããããã¯ãé床ã«å ·äœçãªããŒããŠã§ã¢ã®è©³çްãæããããšãªããæçšãªãã³ããæäŸãããšããå žåçãªãã¬ãŒããªãã§ãã
ãã©ãŠã¶ã®ãµããŒãç¶æ³
æ¬çš¿å·çæç¹ã§ã¯ãDevice Memory APIã¯Google ChromeãMicrosoft EdgeãOperaãªã©ã®ChromiumããŒã¹ã®ãã©ãŠã¶ã§ãµããŒããããŠããŸããããã¯ãäžçã®Webå©çšè ã®å€§éšåã«ãªãŒãããããã®è²ŽéãªããŒã«ã§ããææ°ã®ãµããŒãæ å ±ã«ã€ããŠã¯ãCan I Useãã®ãããªãªãœãŒã¹ãåžžã«ç¢ºèªããAPIã®ååšãããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ããšããŠæ±ãã®ãæåã§ãã`navigator.deviceMemory`ãundefinedã®å Žåã¯ãåªé ã«ããã©ã«ãã®äœéšã«ãã©ãŒã«ããã¯ãã¹ãã§ãã
ãªãDevice Memoryã¯ããã³ããšã³ãããã©ãŒãã³ã¹ã®ã²ãŒã ãã§ã³ãžã£ãŒãªã®ã
äœå幎ãã®éãããã³ããšã³ãã®ããã©ãŒãã³ã¹ã«é¢ããè°è«ã¯ããããã¯ãŒã¯é床ãšCPUåŠçãäžå¿ã«å±éãããŠããŸãããç§ãã¡ã¯ã¢ã»ãããå§çž®ããã³ãŒããæå°åããã¬ã³ããªã³ã°ãã¹ãæé©åããŸãããããã¯ãã¹ãŠéåžžã«éèŠã§ãããç¹ã«çŸåšäžçã®Webãã©ãã£ãã¯ã®å€§åãå ããã¢ãã€ã«ããã€ã¹ã«ãããŠãã¡ã¢ãªã¯éããªããã«ããã¯ãšããŠæµ®äžããŠããŸãã
çŸä»£ã®ãŠã§ããµã€ãã«ãããã¡ã¢ãªã®ããã«ããã¯
çŸä»£ã®Webã¢ããªã±ãŒã·ã§ã³ã¯ã¡ã¢ãªã倧éã«æ¶è²»ããŸããããã«ã¯ä»¥äžã®ãããªãã®ãå«ãŸããŸãã
- å€§èŠæš¡ãªJavaScriptãã³ãã«ïŒãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ãè§£æãã³ã³ãã€ã«ãããã¡ã¢ãªå ã«ä¿æãããå¿ èŠããããŸãã
- é«è§£å床ã®ç»åãåç»ïŒãããã®ã¢ã»ããã¯ãç¹ã«ãã³ãŒããããŠã¬ã³ããªã³ã°ãããéã«ã倧éã®ã¡ã¢ãªãæ¶è²»ããŸãã
- è€éãªDOMæ§é ïŒã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒå ã®æ°åã®DOMããŒãã¯ã倧ããªã¡ã¢ãªãããããªã³ããçã¿åºããŸãã
- CSSã¢ãã¡ãŒã·ã§ã³ãšWebGLïŒãªãããªèŠèŠå¹æã¯ãGPUãšã·ã¹ãã RAMã®äž¡æ¹ã«éåžžã«å€§ããªè² è·ããããå¯èœæ§ããããŸãã
8GBã16GBã®RAMãæèŒããããã€ã¹ã§ã¯ããããåé¡ã«ãªãããšã¯ã»ãšãã©ãããŸãããããããäžçã®å€ãã®å°åã§äžè¬çãªãããã1GBã2GBã®RAMããæèŒããŠããªãããŒãšã³ãã®ã¹ããŒããã©ã³ã§ã¯ãæ·±å»ãªããã©ãŒãã³ã¹äœäžã«ã€ãªããå¯èœæ§ããããŸãããã©ãŠã¶ã¯ãã¹ãŠãã¡ã¢ãªå ã«ä¿æããã®ã«èŠåŽããã«ã¯ã«ã¯ããã¢ãã¡ãŒã·ã§ã³ãé ãå¿çæéãããã«ã¯ã¿ãã®ã¯ã©ãã·ã¥ãåŒãèµ·ããããšããããŸããããã¯ãCore Web Vitalsãç¹ã«Interaction to Next Paint (INP)ã®ãããªäž»èŠãªããã©ãŒãã³ã¹ææšã«çŽæ¥åœ±é¿ããŸãããªããªããã¡ã€ã³ã¹ã¬ããããŠãŒã¶ãŒå ¥åã«å¿çããã«ã¯å¿ããããããã§ãã
ã°ããŒãã«ãªããžã¿ã«ããã€ããåãã
ããã€ã¹ã®ã¡ã¢ãªãèæ ®ããããšã¯ãã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ã«å¯Ÿããå ±æã®è¡šãã§ããäœçŸäžäººãã®ãŠãŒã¶ãŒã«ãšã£ãŠãäœäŸ¡æ Œã®Androidããã€ã¹ã¯ã€ã³ã¿ãŒããããžã®äž»èŠãªããããŠããããå¯äžã®å ¥ãå£ã§ããããããªãã®ãµã€ãã圌ãã®ãã©ãŠã¶ãã¯ã©ãã·ã¥ãããããããªãã¯åã«ã»ãã·ã§ã³ã倱ã£ãã ãã§ãªããæ°žé ã«ãŠãŒã¶ãŒã倱ã£ãã®ãããããŸãããã¡ã¢ãªãæèããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšã§ã髿§èœãªããŒããŠã§ã¢ãæã€äººã ã ãã§ãªãã誰ããããªãã®ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããå©çšã§ããããã«ä¿èšŒããã®ã§ããããã¯åãªãè¯ãå«ç芳ã®åé¡ã§ã¯ãªããããªãã®ã¢ããªã±ãŒã·ã§ã³ãããåºãæœåšçåžå Žã«éããè¯ãããžãã¹ã§ããããŸãã
å®è·µçãªãŠãŒã¹ã±ãŒã¹ãšå®è£ æŠç¥
ããã€ã¹ã®ã¡ã¢ãªãç¥ãããšãšãããã«åºã¥ããŠè¡åããããšã¯å¥ç©ã§ããããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãã¡ã¢ãªå¯Ÿå¿ã«ããããã®ããã€ãã®å®è·µçãªæŠç¥ã玹ä»ããŸããåäŸã§ã¯ãç°¡åãªåé¡ãæ³å®ããŸãã
`const memory = navigator.deviceMemory;`
`const isLowMemory = memory && memory < 2;` // ãã®äŸã§ã¯ããäœã¡ã¢ãªãã2GBæªæºãšå®çŸ©ããŸãã
1. ã¢ãããã£ããªç»åèªã¿èŸŒã¿
åé¡ç¹ïŒå·šå€§ã§é«è§£å床ã®ããŒããŒç»åããã¹ãŠã®ãŠãŒã¶ãŒã«æäŸããããšã¯ã垯åå¹ ãç¡é§ã«ãããã«å質ã§è¡šç€ºããããšããã§ããªãããã€ã¹äžã§å€§éã®ã¡ã¢ãªãæ¶è²»ããŸãã
解決çïŒDevice Memory APIã䜿çšããŠãé©åãªãµã€ãºã®ç»åãæäŸããŸãã`
å®è£ ïŒ
JavaScriptã䜿çšããŠåçã«ç»åã®ãœãŒã¹ãèšå®ããããšãã§ããŸããããŒããŒç»åã³ã³ããŒãã³ãããããšããŸãããã
function getHeroImageUrl() {
const base_path = '/images/hero';
const isLowMemory = navigator.deviceMemory && navigator.deviceMemory < 2;
if (isLowMemory) {
return `${base_path}-low-res.jpg`; // ããå°ãããå§çž®çã®é«ãJPEG
} else {
return `${base_path}-high-res.webp`; // ãã倧ãããé«å質ãªWebP
}
}
document.getElementById('hero-image').src = getHeroImageUrl();
ãã®ç°¡åãªãã§ãã¯ã«ãããäœã¡ã¢ãªããã€ã¹ã®ãŠãŒã¶ãŒã¯ãé«éã«èªã¿èŸŒãŸããã©ãŠã¶ãã¯ã©ãã·ã¥ãããªããèŠèŠçã«èš±å®¹ã§ããç»åãååŸãã匷åãªããã€ã¹ã®ãŠãŒã¶ãŒã¯æé«å質ã®äœéšãåŸãããšãã§ããŸãã
2. éãJavaScriptã©ã€ãã©ãªã®æ¡ä»¶ä»ãèªã¿èŸŒã¿
åé¡ç¹ïŒããªãã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ã掟æã§ã€ã³ã¿ã©ã¯ãã£ããª3Dãããã¯ããã¥ãŒã¢ãè€éãªããŒã¿å¯èŠåã©ã€ãã©ãªãå«ãŸããŠããŸãããããã¯çŽ æŽãããæ©èœã§ãããå¿ é ã§ã¯ãªããæ°çŸãããã€ãïŒãããã¯ã¡ã¬ãã€ãïŒã®ã¡ã¢ãªãæ¶è²»ããŸãã
解決çïŒããã€ã¹ãå¿«é©ã«åŠçã§ããååãªã¡ã¢ãªãæã£ãŠããå Žåã«ã®ã¿ããããã®éããŠéèŠã§ãªãã¢ãžã¥ãŒã«ãèªã¿èŸŒã¿ãŸãã
åç`import()`ã«ããå®è£ ïŒ
async function initializeProductViewer() {
const viewerElement = document.getElementById('product-viewer');
if (!viewerElement) return;
const hasEnoughMemory = navigator.deviceMemory && navigator.deviceMemory >= 4;
if (hasEnoughMemory) {
try {
const { ProductViewer } = await import('./libs/heavy-3d-viewer.js');
const viewer = new ProductViewer(viewerElement);
viewer.render();
} catch (error) {
console.error('3Dãã¥ãŒã¢ã®èªã¿èŸŒã¿ã«å€±æããŸãã:', error);
// ãã©ãŒã«ããã¯çšã®éæ¢ç»åã衚瀺
viewerElement.innerHTML = '<img src="/images/product-fallback.jpg" alt="補åç»å">';
}
} else {
// äœã¡ã¢ãªããã€ã¹ã§ã¯ãæåãã鿢ç»åã衚瀺ããã ã
console.log('äœã¡ã¢ãªãæ€åºããŸããã3Dãã¥ãŒã¢ãã¹ãããããŸãã');
viewerElement.innerHTML = '<img src="/images/product-fallback.jpg" alt="補åç»å">';
}
}
initializeProductViewer();
ãã®ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãã®ãã¿ãŒã³ã¯win-winã§ãããã€ãšã³ããŠãŒã¶ãŒã¯ãªãããªæ©èœãå©çšã§ããããŒãšã³ããŠãŒã¶ãŒã¯éãããŠã³ããŒããšã¡ã¢ãªã®ãªãŒããŒããããªãã«ãé«éã§æ©èœçãªããŒãžãå©çšã§ããŸãã
3. ã¢ãã¡ãŒã·ã§ã³ãšãšãã§ã¯ãã®è€é床ã®èª¿æŽ
åé¡ç¹ïŒè€éãªCSSã¢ãã¡ãŒã·ã§ã³ãããŒãã£ã¯ã«ãšãã§ã¯ããéæãªã¬ã€ã€ãŒã¯çŽ æŽãããèŠããŸããããã©ãŠã¶ã«å€æ°ã®ã³ã³ããžã¿ã¬ã€ã€ãŒãäœæãããå¿ èŠããããå€ãã®ã¡ã¢ãªãæ¶è²»ããŸããäœã¹ããã¯ã®ããã€ã¹ã§ã¯ããããã«ã¯ã€ãããžã£ã³ã¯ïŒåŠçèœã¡ïŒã«ã€ãªãããŸãã
解決çïŒDevice Memory APIã䜿çšããŠãå¿ é ã§ã¯ãªãã¢ãã¡ãŒã·ã§ã³ãã¹ã±ãŒã«ããŠã³ãŸãã¯ç¡å¹ã«ããŸãã
CSSã¯ã©ã¹ã«ããå®è£ ïŒ
ãŸããã¡ã¢ãªãã§ãã¯ã«åºã¥ããŠ`
`ãŸãã¯``èŠçŽ ã«ã¯ã©ã¹ã远å ããŸãã
// ãã®ã¹ã¯ãªãããããŒãžã®æ©ã段éã§å®è¡ãã
if (navigator.deviceMemory && navigator.deviceMemory < 1) {
document.documentElement.classList.add('low-memory');
}
ããã§ãCSSã§ãã®ã¯ã©ã¹ã䜿çšããŠãã¢ãã¡ãŒã·ã§ã³ãéžæçã«ç¡å¹åãŸãã¯ç°¡çŽ åã§ããŸãã
/* ããã©ã«ãã®çŸããã¢ãã¡ãŒã·ã§ã³ */
.animated-card {
transition: transform 0.5s ease-in-out, box-shadow 0.5s ease;
}
.animated-card:hover {
transform: translateY(-10px) scale(1.05);
box-shadow: 0 10px 20px rgba(0,0,0,0.2);
}
/* äœã¡ã¢ãªããã€ã¹åãã®ã·ã³ãã«ãªããŒãžã§ã³ */
.low-memory .animated-card:hover {
transform: translateY(-2px); /* ã¯ããã«ã·ã³ãã«ãªtransform */
box-shadow: none; /* ã³ã¹ãã®é«ãbox-shadowãç¡å¹å */
}
/* ãŸãã¯ãä»ã®éããšãã§ã¯ããå®å
šã«ç¡å¹å */
.low-memory .particle-background {
display: none;
}
4. ã¢ããªã±ãŒã·ã§ã³ã®ãã©ã€ãçãã®æäŸ
åé¡ç¹ïŒäžéšã®è€éãªã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ã§ã¯ãå°ããªèª¿æŽã§ã¯äžååã§ããã€ã³ã¡ã¢ãªã®ããŒã¿ã¹ãã¢ãä»®æ³DOMãåºç¯ãªã³ã³ããŒãã³ãããªãŒãæã€ã³ã¢ã¢ãŒããã¯ãã£èªäœããããŒãšã³ãããã€ã¹ã«ã¯éãããŸãã
解決çïŒFacebookãGoogleã®ãããªãã¢ããªã®ãã©ã€ãçããæäŸããŠããäŒæ¥ãããã³ããåŸãŸããDevice Memory APIãã·ã°ãã«ãšããŠäœ¿çšããæ ¹æ¬çã«ã·ã³ãã«ãªããŒãžã§ã³ã®ã¢ããªã±ãŒã·ã§ã³ãæäŸããããšãã§ããŸãã
å®è£ ïŒ
ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãã¹ãã©ããããã»ã¹ã®éåžžã«æ©ã段éã§è¡ããã§ãã¯ã«ãªãå¯èœæ§ããããŸããããã¯ãã¢ããªã®2ã€ã®å¥ã ã®ãã«ããæã€å¿ èŠãããé«åºŠãªãã¯ããã¯ã§ãã
const MEMORY_THRESHOLD_FOR_LITE_APP = 1; // 1 GB
function bootstrapApp() {
const isLowMemory = navigator.deviceMemory && navigator.deviceMemory < MEMORY_THRESHOLD_FOR_LITE_APP;
if (isLowMemory && window.location.pathname !== '/lite/') {
// ã©ã€ãçã«ãªãã€ã¬ã¯ã
window.location.href = '/lite/';
} else {
// å®å
šçã¢ããªã±ãŒã·ã§ã³ãèªã¿èŸŒã
import('./main-app.js');
}
}
bootstrapApp();
ãã©ã€ãçãã¯ãã¯ã©ã€ã¢ã³ããµã€ãã®JavaScriptãæå°éã«æããçŽç²ã«ã³ã¢æ©èœã«çŠç¹ãåœãŠããµãŒããŒãµã€ãã¬ã³ããªã³ã°ã®ã¢ããªã±ãŒã·ã§ã³ãããããŸããã
`if`æãè¶ ããŠïŒçµ±äžãããããã©ãŒãã³ã¹ãããã¡ã€ã«ã®äœæ
åäžã®ã·ã°ãã«ã«äŸåããã®ã¯å±éºã§ããããã€ã¹ã¯RAMãå€ããŠããéåžžã«é ããããã¯ãŒã¯äžã«ãããããããŸãããããå ç¢ãªã¢ãããŒãã¯ãDevice Memory APIããNetwork Information API (`navigator.connection`)ãCPUã³ã¢æ° (`navigator.hardwareConcurrency`)ã®ãããªä»ã®é©å¿åã·ã°ãã«ãšçµã¿åãããããšã§ãã
ã¢ããªã±ãŒã·ã§ã³å šäœã§ã®æææ±ºå®ãå°ããçµ±äžãããèšå®ãªããžã§ã¯ããäœæã§ããŸãã
function getPerformanceProfile() {
const profile = {
memory: 'high',
network: 'fast',
cpu: 'multi-core',
saveData: false,
};
// ã¡ã¢ãªããã§ãã¯
if (navigator.deviceMemory) {
if (navigator.deviceMemory < 2) profile.memory = 'low';
else if (navigator.deviceMemory < 4) profile.memory = 'medium';
}
// ãããã¯ãŒã¯ããã§ãã¯
if (navigator.connection) {
profile.saveData = navigator.connection.saveData;
switch (navigator.connection.effectiveType) {
case 'slow-2g':
case '2g':
profile.network = 'slow';
break;
case '3g':
profile.network = 'medium';
break;
}
}
// CPUããã§ãã¯
if (navigator.hardwareConcurrency && navigator.hardwareConcurrency < 4) {
profile.cpu = 'single-core';
}
return profile;
}
const performanceProfile = getPerformanceProfile();
// ããã§ããã埮åŠãªå€æãã§ããããã«ãªã
if (performanceProfile.memory === 'low' || performanceProfile.network === 'slow') {
// äœå質ã®ç»åãèªã¿èŸŒã
}
if (performanceProfile.cpu === 'single-core' && performanceProfile.memory === 'low') {
// å¿
é ã§ã¯ãªããã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ãšJSãç¡å¹åãã
}
å¶éããã¹ããã©ã¯ãã£ã¹ãããã³ãµãŒããŒãµã€ãçµ±å
匷åã§ã¯ãããŸãããDevice Memory APIã¯æ éã«äœ¿çšããå¿ èŠããããŸãã
1. ããã¯ãã³ãã§ãããä¿èšŒã§ã¯ãªã
å€ã¯ã·ã¹ãã å šäœã®RAMã®è¿äŒŒå€ã§ãããçŸåšå©çšå¯èœãªç©ºãRAMã§ã¯ãããŸãããé«ã¡ã¢ãªã®ããã€ã¹ã§ãä»ã®å€ãã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŠããå¯èœæ§ããããWebããŒãžçšã®ã¡ã¢ãªã¯ã»ãšãã©æ®ã£ãŠããªããããããŸãããåžžã«APIãããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ããã°ã¬ãŒã¹ãã«ãã°ã©ããŒã·ã§ã³ã®ããã«äœ¿çšããç¹å®ã®ã¡ã¢ãªéã空ããŠããããšãåæãšããéèŠãªããžãã¯ã«ã¯äœ¿çšããªãã§ãã ããã
2. ãµãŒããŒãµã€ãClient Hintsã®å
ãããã®æ±ºå®ãã¯ã©ã€ã¢ã³ããµã€ãã§è¡ãã®ã¯è¯ãããšã§ãããããã¯ãŠãŒã¶ãŒãé©å¿ããåã«æåã®HTMLãCSSãJSããã§ã«ããŠã³ããŒãããŠããããšãæå³ããŸããçã«æé©åãããååããŒãã®ããã«ã¯ãClient Hintsã䜿çšã§ããŸããããã«ããããã©ãŠã¶ã¯æåã®HTTPãªã¯ãšã¹ãã§ããã€ã¹ã®èœåæ å ±ããµãŒããŒã«éä¿¡ã§ããŸãã
ä»çµã¿ã¯æ¬¡ã®ãšããã§ãã
- ãµãŒããŒã¯ã¬ã¹ãã³ã¹ã«`Accept-CH`ããããŒãéä¿¡ãããã©ãŠã¶ã«`Device-Memory`ãã³ãã«é¢å¿ãããããšãäŒããŸãã
- ããããŒäŸïŒ `Accept-CH: Device-Memory, Viewport-Width, DPR`
- ãã®ãã©ãŠã¶ããããªãã®ãªãªãžã³ãžã®åŸç¶ã®ãªã¯ãšã¹ãã«ã¯ãã¡ã¢ãªå€ãå«ã`Device-Memory`ããããŒãå«ãŸããŸãã
- ãªã¯ãšã¹ãããããŒäŸïŒ `Device-Memory: 8`
ãµãŒããŒäžã§ãã®æ å ±ãããã°ãã¬ã¹ãã³ã¹ããã£ã®1ãã€ããéä¿¡ããåã«æ±ºå®ãäžãããšãã§ããŸããããã·ã³ãã«ãªHTMLããã¥ã¡ã³ããã¬ã³ããªã³ã°ããããããå°ããªCSS/JSãã³ãã«ã«ãªã³ã¯ããããäœè§£å床ã®ç»åURLãçŽæ¥HTMLã«åã蟌ãã ãããããšãã§ããŸããããã¯ãããŒãšã³ãããã€ã¹åãã®ååããŒãžããŒããæé©åããæã广çãªæ¹æ³ã§ãã
3. å®è£ ã®ãã¹ãæ¹æ³
ã¡ã¢ãªå¯Ÿå¿ã®æ©èœããã¹ãããããã«ãããŸããŸãªç©çããã€ã¹ã®ã³ã¬ã¯ã·ã§ã³ã¯å¿ èŠãããŸãããChrome DevToolsã§ã¯ãããã®å€ãäžæžãããããšãã§ããŸãã
- DevToolsãéããŸãïŒF12ãŸãã¯Ctrl+Shift+IïŒã
- ã³ãã³ãã¡ãã¥ãŒãéããŸãïŒCtrl+Shift+PïŒã
- ãShow Sensorsããšå ¥åããŠEnterããŒãæŒããŸãã
- Sensorsã¿ãã§ãããŸããŸãªClient Hintsããšãã¥ã¬ãŒãããã»ã¯ã·ã§ã³ãèŠã€ããããšãã§ããŸãããDevice Memory APIèªäœã¯çŽæ¥ãã¹ãããããClient HintããããŒããã°ã«èšé²ãããµãŒããŒãä»ããŠãã¹ãããã®ãæåã§ããçŽæ¥çãªã¯ã©ã€ã¢ã³ããµã€ãã®ãã¹ãã§ã¯ãå®å šãªå¶åŸ¡ã®ããã«ãã©ãŠã¶ã®èµ·åãã©ã°ã䜿çšããããç·åçãªãã¹ãã®ããã«ããã€ã¹ãšãã¥ã¬ãŒã·ã§ã³ã«é Œãå¿ èŠããããããããŸãããå€ãã®äººã«ãšã£ãŠç°¡åãªæ¹æ³ã¯ãããŒã«ã«ã§éçºäžã«ãµãŒããŒãåä¿¡ãã`Device-Memory`ããããŒã®å€ã確èªããããšã§ãã
çµè«ïŒå ±æãæã£ãŠæ§ç¯ãã
ããã³ããšã³ãDevice Memory APIã¯åãªãæè¡çãªããŒã«ã§ã¯ãããŸãããããã¯ãããå ±æçã§ãå æ¬çã§ãããã©ãŒãã³ã¹ã®é«ãWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ææ®µã§ããç§ãã¡ã®ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ããŒããŠã§ã¢ã®å¶éãèªèããå°éããããšã§ãç§ãã¡ã¯ç»äžçãªèãæ¹ãè¶ ããŠé²ãããšãã§ããŸããæé«çŽã®ã³ã³ãã¥ãŒã¿ã§ããããšããšã³ããªãŒã¬ãã«ã®ã¹ããŒããã©ã³ã§ããããšãæ©èœçã§ããã ãã§ãªããæ¥œããäœéšãæäŸããããšãã§ããŸãã
å°ããå§ããŸããããããªãã®ã¢ããªã±ãŒã·ã§ã³ã§æãã¡ã¢ãªãæ¶è²»ããéšåïŒå€§ããªç»åãéãã©ã€ãã©ãªãè€éãªã¢ãã¡ãŒã·ã§ã³ãªã©ïŒãç¹å®ããŸãã`navigator.deviceMemory`ã䜿çšããŠç°¡åãªãã§ãã¯ãå®è£ ããŸãããã®åœ±é¿ã枬å®ããŸãããããã®æ®µéçãªã¹ããããèžãããšã§ãããªãã¯èª°ã«ãšã£ãŠãããéããããå埩åããããããæè¿ãããWebãåµé ããããšãã§ããŸãã