éå»æ°ã¶æã«ããã£ãŠãããŸããŸãªãã©ã³ãèªã¿èŸŒã¿æé©åææ³ã®åé¡ã«å¯ŸåŠããããã®èšäºãããã€ãå·çãããŸããã
1ã2ã3
ãããããã¹ãŠèªãã åŸããããã§å¯ŸåŠãããŠããªãããã€ãã®æ°ãã質åãçºèŠããŸããã æçµçã«ã¯ããã®ãããªåé¡ã«é¢ããæ å ±ãåéãããªãœãŒã¹ã1ã€çšæãããã£ãã®ã§ãã ããã€ãã®ã³ãŒãã¹ããããã¯ãäžèšã®ãªã³ã¯ããåŒçšããèšäºããåŒçšãŸãã¯ä¿®æ£ãããŠããŸãã
ç®çïŒ
- Webãã©ã³ããéåæã«ããŠã³ããŒããã
- ã¬ã€ã¢ãŠãã®åŒ·åãªåèšç®ãé¿ãã
- Webãã©ã³ããã§ããã ãæ©ãããŠã³ããŒããã
- å蚪åè çšã®ãã©ã³ãã®ããŒããé¿ãã
ãããŠãç®æšã段éçã«éæããŠã¿ãŸãããã
1. Webãã©ã³ãã®éåæããŠã³ããŒã
@ font-faceãä»ããŠWebãã©ã³ããããŒã«ã«ã§åŒã³åºãå¿ èŠããããããéåžžã¯ãããã¯èŠæ±ãåãåããŸãã ãããé¿ããã«ã¯ãJavaScriptããåŒã³åºãããå¥ã®ã¹ã¿ã€ã«ã·ãŒãã«@ font-faceã³ãŒããé 眮ããå¿ èŠããããŸãã ãã£ã©ã¡ã³ãã°ã«ãŒãã®ã·ã³ãã«ãªloadCSSé¢æ°ã䜿çšã§ããŸãã ãããæãç°¡åãªãªãã·ã§ã³ã§ãã
typekit webfontloaderãã«ã¹ã¿ã Webãã©ã³ãã§äœ¿çšããããšãã§ããŸããããã¯ãããŒãžã§ã³1.6.8以éã䜿çšå¯èœãªå Žåã¯ãã€ãã£ããã©ã³ãããŠã³ããŒãAPIã䜿çšããŸãã
çŸæç¹ã§ã¯ã Font Face Observerãšãææ°ã®W3Cãã©ã³ãèªã¿èŸŒã¿ã€ãã³ãã䜿çšããFont LoaderããããŸãããŸããSmashing Magazineã䜿çšããã¹ã¯ãªããããããå®éããã®èšäºã®ããã€ãã®åé¡ã解決ããŠããŸãïŒãã¹ãŠã§ã¯ãããŸããïŒã
ããã§ã¯ãã©ãããå§ããŸããïŒ ãŸããFont Loaderãé€å€ããŠãææ°ã®Webæšæºã®ããªãã£ã«ãæäŸããŸãã ããã©ãŒãã³ã¹æé©åãã§ãŒãºã®ãã®éšåã«å«ããã«ã¯å€§ããããŸãã å°æ¥çã«ã¯ééããªãå¿ èŠã«ãªããŸãããããã€ãã£ããã§ãªãå Žåã¯ãçŸæç¹ã§ã¯äœ¿çšããæå³ããããŸããã 代ããã«ãFont Face Observerã䜿çšã§ããŸãã ééã¯ããã5Kbã§ãïŒå§çž®ã§ã¯ãªããçž®å°ãããŸãïŒã
ãããå§ããŸãããã Font Face Observerã¹ã¯ãªããã¯ãnpmãbowerããŸãã¯gitïŒããïŒããååŸã§ããŸãã ã¹ã¯ãªãããé ã«å«ããŸãã
泚ïŒasyncå±æ§ãã«ã¹ã¿ãã€ãºãããšããµã€ãã®FOUTã«äžèŠãªFOITãè¿œå ãããŸãã
次ã«ããã©ã³ããã©ãŠã¶ãåæåããå¿ èŠããããŸãã ããã¯ãçµã¿èŸŒã¿ã¹ã¯ãªããããŸãã¯ãããã«å«ãŸããå€éšã¹ã¯ãªããã䜿çšããŠå®è¡ã§ããŸãã å€éšã¹ã¯ãªããã§browserify / CommonJSãªãã·ã§ã³ã䜿çšããäŸã瀺ããŸããã¹ã¯ãªããã¯npmäŸåé¢ä¿ãšããŠããŒããããŸãã
ãŸããã©ã€ãã©ãªããªã¯ãšã¹ãããå¿ èŠããããŸãã
var FontFaceObserver = require('fontfaceobserver');
次ã«ãèå¥ããå¿ èŠããããã©ã³ããšãã©ã³ããªãã·ã§ã³ãå®çŸ©ããŸãããã
var observer = new FontFaceObserver('Fira Sans', { weight: 400 });
ããã§ã¯ããªãã·ã§ã³ãšããŠããŠã§ã€ããã¹ã¿ã€ã«ãããªã¢ã³ããfeatureSettingsãstretchã䜿çšã§ããŸãã ããã§ãObserverãåæåããŠãå®çŸ©ãããã©ã³ããæ§æããå¿ èŠããããŸãã ãŸãããã©ã³ããããŒããããCSSã¯ã©ã¹ãèšå®ããå¿ èŠããããŸãã ããã¯ãPromiseãä»ããŠè¡ãããŸãã
observer.check().then(function () { document.documentElement.classList.add('webfont-loaded'); }, function () { console.info('Web font could not be loaded in time. Falling back to system fonts.'); });
è€æ°ã®Webãã©ã³ãã䜿çšããããé«åºŠãªäŸïŒ
var fontfaceobserver = require('fontfaceobserver'); var fontObservers = []; var fontFamilies = { 'Fira Sans': [ { weight: 400 }, { weight: 600 } ], 'Fira Mono': [ { weight: 400 } ] } Object.keys(fontFamilies).forEach(function(family) { fontObservers.push(fontFamilies[family].map(function(config) { return new FontFaceObserver(family, config).check() })); }); Promise.all(fontObservers) .then(function() { document.documentElement.classList.add('webfont-loaded'); }, function() { console.info('Web fonts could not be loaded in time. Falling back to system fonts.'); });
ããã§ãFont Face Observerãé©çšããŠãå®æãããã©ã³ãã¯ã©ã¹ãèšå®ããŸããã 次ã«ããããCSSã«åæ ããå¿ èŠããããŸãã
body { font-family: sans-serif; } .webfont-loaded body { font-family: 'Fira Sans', sans-serif; }
2.ã¬ã€ã¢ãŠãã®åŒ·åãªåèšç®ãæé€
ããã§ãæºåãã§ãããšãã«Webãã©ã³ããåã蟌ãããšãã§ãããå¹æçã§ä¿¡é Œæ§ã®é«ãã·ã¹ãã ãã§ããŸããã ããã¯ããã¡ãããæåã«ãŠãŒã¶ãŒãå®çŸ©ãã移è¡ãã©ã³ããåãåãããšãæå³ããŸãã ããã¯æªããªããšããäºå®ã«ããããããã圌ãã¯ãã§ã«ããã¹ããèªã¿å§ããŠããå¯èœæ§ããããããããã¯ãã¹ãŠãç®ã®åã§å€åããããšãæå³ããå€ãã®å Žåããã©ã³ãã®å€æŽã«ããåèªã®ç§»åã«ã€ãªãããŸãã
äœéšããã£ãšæ¥œããããå¿ èŠããããŸãã ããã¯2段éã§å®è¡ã§ããŸãã
- æåã«ãWebãã©ã³ãã«æé©ãªç§»è¡ãã©ã³ããèŠã€ããå¿ èŠããããŸãã ããã¯ã ãã®å°ããªããã¯ããŒã¯ã¬ãããšãã®äºææ§ãã§ãã¯ã䜿çšãããšæé©ã§ãã é©åãªç§»è¡ãã©ã³ããèŠã€ãã£ãããååã®äœæ¥ãå®äºããŸãã ããããåãããã«èŠããåäžã®ãã©ã³ãã¯ãªããéåžžã«é¡äŒŒãããã©ã³ãžã·ã§ãã«ãã©ã³ãã§ãããç°ãªãå¹ ãšé«ãã®æåãæã€ããšãã§ããŸãã 幞ããªããšã«ãCSSã«ã¯ãããæé©åããããã®ããŒã«ãããã€ããããŸãã æ°ããfont-size-adjustããããã£ããããããã«ããã移è¡ãã©ã³ããWebãã©ã³ãã«ããŸãã¯ãã®éã«èª¿æŽã§ããŸãã ããã䜿çšããŠãé«ããŸãã¯åœ¢ç¶ã調æŽããŸãã 䜿çšããã®ã¯éåžžã«é£ããã®ã§ãdevããŒã«ã§å€ã®äžéšãè©Šãããšããå§ãããŸãïŒãŸãã¯ãæ°åŠãããç解ããŠããå Žåã¯ããªã³ã¯å ã®èšäºã®åŒãèŠãŠãã ããïŒã éåžžãçµæã¯0.40ã0.70ã®å€ã§ãã
- é«ããéžæããããæåééïŒæåéã®è·é¢ïŒãæ§æããå¿ èŠããããŸãã ããã¯æ¯èŒçç°¡åã§ãå€ãå°ããã€ïŒããšãã°-0.01emïŒèª¿æŽãããšãããã¹ããèŠããããèªã¿ããããªãããšãä¿èšŒã§ããŸãã ãã®æç¹ã§ãWebãã©ã³ãã«éåžžã«ãã䌌ãé·ç§»ãã©ã³ãã®èŠèŠåãååŸããå¿ èŠããããŸãã ãã¹ãäžã«éããæããããã«ãwebfont-loadedã®CSSã¯ã©ã¹ãèšå®ããé¢æ°ã«ã¿ã€ã ã¢ãŠããè¿œå ã§ããŸãã
3. Webãã©ã³ãã®æéããŠã³ããŒã
ãã®ã¢ã€ãã ã¯ãšãŠãã·ã³ãã«ã§ãã å®éãWebãã©ã³ããã§ããã ãæ©ãèªã¿èŸŒãŸããé©åãªã¿ã€ãã³ã°ã§ãªã³ã«ãªãããã«ããã§ã«å€ãã®ããšãè¡ã£ãŠããŸãã ããã§æåŸã«ã§ããããšã¯ãWebãã©ã³ããã¡ã€ã«ã®ããªããŒãããããŒãè¿œå ããããšã§ãã
<link rel="preload" href="FiraSans-Regular.woff"> <link rel="preload" href="FiraSans-SemiBold.woff">
ã芧ã®ãšãããããã§ã¯woffãã©ã³ãã®ã¿ã䜿çšããŸããã ããã¯ãããã§ã¯ãã¹ãŠã®åœ¢åŒãåŒã³åºãã¹ãã§ã¯ãªãããã§ãã ãã®å°ããªã¹ããããã¯ãå¯èœã§ããã°ããããã®ãªãœãŒã¹ãããŠã³ããŒãããå¿ èŠãããããšããã©ãŠã¶ãŒã«äŒããŸãã ããã«ãã¹ãŠã®åœ¢åŒãè¿œå ãããšããã©ãŠã¶ã¯ãããããã¹ãŠããŠã³ããŒãããŸãããããã¯åœ¹ã«ç«ã¡ãŸããã ãã ããããªãã§ããããµããŒããããã¹ãŠã®ãã©ãŠã¶ãŒã¯WOFFããµããŒãããŠããŸãã woff2ã䜿çšããå Žåã¯ãæ©èœããªãããšã«æ³šæããŠãã ããããããã£ãŠããããã®ããããŒãè¿œå ããªãã§ãã ããã
4.å蚪åè ã®ãã©ã³ãããŠã³ããŒãäŸå€
ãŠãŒã¶ãŒãWebãã©ã³ãããªããŒããããã©ã³ãããã£ãã·ã¥ããæ¢ã«ã¢ã¯ã»ã¹å¯èœãªãšãã«JavaScript Font Face Observerã®ææ°ããŒãžã§ã³ãå®è¡ããªããšããç¶æ³ãæé€ããã«ã¯ãcookieãŸãã¯localStorageã䜿çšã§ããŸãã Cookieã䜿çšããŠããã®ãã©ã³ãããã©ãŠã¶ãã£ãã·ã¥ã«ãããã©ããã®ã¿ããã§ãã¯ããå ŽåãlocalStorageã¯ãããé·ãã¹ãã¬ãŒãžçšã®ãã©ã³ããlocalStorageã«é 眮ãããŠãŒã¶ãŒããµã€ãã«å床ã¢ã¯ã»ã¹ãããšãããããã©ã³ããååŸããŸãã
ã©ã¡ãã®ãªãã·ã§ã³ã«ãå©ç¹ããããããã ãã«ãåªå ããŸããã localStorageã¯ãã©ã³ãã®ãã£ãã·ã¥ã«é¢ããŠã¯ããä¿¡é Œæ§ãé«ãã§ãããCookieããã©ãŠã¶ãŒã®ãã€ãã£ããã£ãã·ã¥ãããè¥å¹²é ããªããŸãã ããªããäžçªå¥œããªãã®ãšããããžã§ã¯ãã§ããè¯ãæ©èœãããã®ã䜿çšããŠãã ããã
ã¯ãããŒã®äœ¿çš ïŒ
ãã®æ¹æ³ã¯å°ãä¿¡é Œã§ããŸããã ãã©ãŠã¶ã®ãã£ãã·ã¥ã¯Cookieã®ä¿åå Žæã«çŽæ¥é¢ä¿ããªããããã©ã¡ããïŒäž¡æ¹ã§ã¯ãªãïŒãåé€ããããšããã®æ¹æ³ã«ãããã©ã³ãã®ããŠã³ããŒãããããã¯ãããå¯èœæ§ããããŸãã
SSIã䜿çšããæãåçŽãªã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
<!--#if expr="$HTTP_COOKIE=/webfont-loaded=true/" --> <html lang="en" class="webfont-loaded"> <!--#else --> <html lang="en"> <!--#endif -->
localStorageã®äœ¿çšïŒ Smashing Magazineããµã€ãã§äœ¿çšãããã®ããŒãžã§ã³ã®ã³ãŒããå©çšã§ããŸãã
localStorageã¯ããªãããŸãæ©èœãããšããäºå®ã«ããããããããã®äœ¿çšã¯ãã€ãã£ããã£ãã·ã¥ã䜿çšãããããè¥å¹²é ããªãå¯èœæ§ããããããã«éèŠãªããšã«ã¯ããŠãŒã¶ãŒã®ãã£ã¹ã¯ã®ã¹ããŒã¹ãå æãã1ã€ã®ãã¡ã€ã³ã®ã¿ã«å¯ŸããŠäœæãããããšãèæ ®ãã䟡å€ããããŸãã ãããã£ãŠããŠãŒã¶ãŒãåãWebãã©ã³ãã䜿çšããŠå¥ã®ãµã€ãã«ã¢ã¯ã»ã¹ãããšãUAã¯ãããå床ããŠã³ããŒãããŸãã
次ã¯ïŒ
ããæ°ãæãšæ°å¹Žã§èŠãŠããããã«ãWebãã©ã³ãã®äœ¿çšæ¹æ³ã¯åžžã«å€åããŠããŸãã ãã©ãŠã¶ã¯Font Load Eventsã䜿çšããCSSããããã£ã䜿çšããŠFOITãæäœã§ããŸãã æçµçã«ããã©ã³ãã¬ã³ããªã³ã°ããã©ã³ãã¬ã³ããªã³ã°ïŒã¹ã¯ããã¯ããã®èšäºã§èª¬æãããã¹ãŠãå€§å¹ ã«ç°¡çŽ åã§ããŸãã
ããã€ãã®ã¹ã¿ã€ã«ã圩床ãªãã·ã§ã³ãåé€ããŠæ°ãã€ããç¯çŽãããå Žåã人工ãã©ã³ããèš±å¯ãããŠããŠãã©ã³ãåæããªãå Žåã¯ããã©ãŠã¶ãŒã®åäœãã«ã¹ã¿ãã€ãºããŠã¿ãŠãã ããã
Habrèªè
åãã®Paystoæ¯æããœãªã¥ãŒã·ã§ã³ïŒ
â ä»ããã¯ã¬ãžããã«ãŒãã§æ¯æããåããŸãããã ãµã€ããIPããã³LLCãªãã
â ãªã³ã©ã€ã³äŒæ¥ããã®æ¯æããåãå ¥ããŸãã ãµã€ããIPããã³LLCãªãã
â ãµã€ãã®äŒç€Ÿããã®æ¯æããåãå ¥ããŸãã ããã¥ã¡ã³ã管çãšãªãªãžãã«ã®äº€æã
â æ³äººãšã®è²©å£²ããã³ãµãŒãã¹ååŒã®èªååã èšç®ã®ä»²ä»ãªãã
â ãªã³ã©ã€ã³äŒæ¥ããã®æ¯æããåãå ¥ããŸãã ãµã€ããIPããã³LLCãªãã
â ãµã€ãã®äŒç€Ÿããã®æ¯æããåãå ¥ããŸãã ããã¥ã¡ã³ã管çãšãªãªãžãã«ã®äº€æã
â æ³äººãšã®è²©å£²ããã³ãµãŒãã¹ååŒã®èªååã èšç®ã®ä»²ä»ãªãã