웹 폰트 또는 로컬로로드 된 글꼴?


98

Cufon 을 사용하여 발생한 문제 이후 외부 글꼴 리소스 고 노력했지만 최근에는 글꼴을로드하는 다른 방법을 찾고 더 나은 방법이 있는지 확인했습니다. 더 나은 방법은 갑자기 나타나는 방법이 있습니다.

많은 새로운 방법이 있으며 각 방법에 대한 변형이 있습니다. typekit을 사용해야 합니까 ? 또는 google webfonts (js 또는 css 포함)? 로컬 로딩 글꼴 (예 : fontsquirrel.com 생성 방법)을 계속 사용해야합니까?

몇 가지 테스트를 통해 가장 잘 받아 들여진 방법을 아래에 나열하겠습니다.하지만 웹 폰트로 이동할 가치가 정말 있습니까? 더 높은 리소스로드 (http 요청)를 전달하고 파일 형식 유형 (호환성이 적음) 등이 적은 것처럼 보이지만 대부분의 경우 파일이 비동기식으로 효율적으로로드되는 것처럼 보입니다.

  1. 상황과 필요의 문제입니까? 그렇다면 그들은 무엇입니까?
  2. 이 방법들 사이에 큰 차이가 있습니까?
  3. 내가 나열하지 않은 더 나은 방법이 있습니까?
  4. 성능에 대한 장단점은 무엇입니까? 보기? 의존성? 호환성?

저는 여기서 모범 사례를 찾고 있습니다. 성능은 중요하지만 확장 성과 사용 편의성도 중요합니다. 외모와 느낌은 말할 것도 없습니다.


구글 CSS

  • 외부 스타일 시트 만 사용
  • 가장 작은 호환 파일 유형 만 사용
  • 스타일 쉬 ( ) 의 내용을 사용 @import하거나 <link>가져 와서 @font-face자신의 스타일 시트에 직접 넣을 수 있습니다.

시험 결과

  78ms load of html
  36ms load of css

여기에 이미지 설명 입력


Google JS 방법

  • webfont.js스타일을로드 하는 데 사용
  • 가장 작은 호환 파일 유형 만 사용
  • :root클래스 에 요소를 추가합니다.
  • 헤드에 스크립트를 추가합니다.

시험 결과

    171ms load of html
    176ms load of js
    32ms load of css

여기에 이미지 설명 입력


Typekit 방법

  • :root클래스 에 요소를 추가합니다 .
  • *.js스 니펫 또는 외부에서로드 된 파일 *.js파일을 사용할 수 있습니다.
  • data:font/opentype글꼴 파일 대신 사용 합니다.
  • 머리에 스크립트 추가
  • 포함 된 CSS를 헤드에 추가
  • 헤드에 외부 스타일 시트 추가

    typekit.com에서 글꼴 및 대상 선택기를 쉽게 추가 / 제거 / 조정할 수 있습니다.

시험 결과

  169ms load of html
  213ms load of js
  31ms load of css
  3ms load of data:font/

여기에 이미지 설명 입력


… & 글꼴 다람쥐 방법

@font-face{
    font-weight:400;
    font-style:normal;
    font-family:open_sanslight;
    src:url(../font/opensans-light-webfont.eot);
    src:url(../font/opensans-light-webfont.eot?#iefix) format(embedded-opentype),
        url(../font/opensans-light-webfont.woff) format(woff),
        url(../font/opensans-light-webfont.ttf) format(truetype),
        url(../font/opensans-light-webfont.svg#open_sanslight) format(svg)
}

… 또는 data : font 방법으로…

@font-face {
    font-family: 'open_sanslight';
    src: url('opensans-light-webfont-f.eot');
}

@font-face {
    font-family: 'open_sanslight';
    src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAF4sABMAAAAArXQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcZLn0KkqwK44Jq866WBSpzpsNY2IyGAhoJFBbYjuxmyns5sNa4NwldcJ7eh3Uy5gQkURIlqWzONe3HcLsDX1x/+jifDXvbzgTBjopZElndil3hJkERJkmRJkVRJk3TJkEzJkmzOc4HLXOEOF7nEX/*thisisnotafullencodingjustanexample*/bZwUnK4yS3JlTx2Sr4USKEUSbHVX9fcGNBs4fqgw+GoNHU7lKr36Eqn0lCWt6pHFpWaUlc6lS6loSxRlirLlP/uuU01dVfT7L6gPxyqraluCpgj3WtqeC1V4VBDW2N4K1r1esw/IupKp9L1FwlqnuIAAAB42j3NvQ7BUBjG8R5tTz/0u2UjNTTESYQbMGmXLiISbeI6zBYjbuWtye7CeMJxtuf3LP8ne1+IXbWa7G3TMXZru4qLZkJRW1O2wzi3I+Li2Gik5yXpYkNGXj70YU98YQLGHxwwXxIWwO8SNmAdJBzAXku4gFNI9AF38QMjTwZ9vN6yJzq9OoEB6I8VQzDYK0ZguFKMwWiumIDxTDEFk6liBqaF4gDMFFvKxAfOxFUGAAABUxSL9gAA) format('woff'),
         url('opensans-light-webfont-f.ttf') format('truetype'),
         url('opensans-light-webfont-f.svg#open_sanslight') format('svg');
    font-weight: normal;
    font-style: normal;

}

4
이것은 좋은 질문입니다.
dachi

1
이것이 최선의 방법인지는 잘 모르겠지만 항상 Google CSS를 이렇게 사용합니다<link href='http://fonts.googleapis.com/css?family=Open+Sans:300' rel='stylesheet'>
lefoy

나는 지역 웹 폰트만을위한 font-squirrel과 같은 웹 사이트를 개발했습니다 Georgian. 나는 font-squirrel 방법을 사용하고 있으며이 질문에 대한 훌륭한 답변을보고 싶습니다.
dachi

1
이것은 방탄 @font-face선언 을 선언하는 방법에 대한 아주 좋은 기사 입니다. 아마도 유용한 정보를 찾을 수있을 것입니다. paulirish.com/2009/bulletproof-font-face-implementation-syntax
lefoy

답변을받을 때까지 수락하지 않으면 더 나은 / 개선 된 답변을받을 수있을 때 현상금을 시작할 수 있습니다.
Davit

답변:


34

먼저 Google의 서비스에 대해 설명하겠습니다. 실제로 브라우저에서 처리 할 수있는 가장 작은 형식을로드합니다. WOFF는 작은 파일 크기를 제공하며 브라우저가이를 지원하므로 바로 볼 수 있습니다. WOFF도 상당히 광범위하게 지원됩니다. 그러나 예를 들어 Opera에서는 TrueType 버전의 글꼴을 얻을 수 있습니다.

파일 크기 논리는 Font Squirrel이 그 순서대로 시도하는 이유이기도합니다. 그러나 그것은 대부분 내 입장에서 추측입니다.

모든 요청과 바이트가 중요한 환경에서 작업하는 경우 사용 사례에 가장 적합한 것을 찾기 위해 몇 가지 프로파일 링을 수행해야합니다. 사람들이 한 페이지 만보고 다시는 방문하지 않을까요? 그렇다면 캐싱 규칙은 그다지 중요하지 않습니다. 그들이 탐색하거나 돌아 오는 경우 Google은 서버보다 더 나은 캐싱 규칙을 가질 수 있습니다. 대기 시간이 더 큰 문제입니까, 아니면 대역폭입니까? 지연이 발생하는 경우 요청 수를 줄이는 것을 목표로하므로 로컬에서 호스팅하고 가능한 한 파일을 결합하십시오. 대역폭의 경우 가장 작은 코드와 가장 작은 글꼴 형식으로 끝나는 옵션을 선택하십시오.

이제 CSS 대 JS 고려 사항에 대해 살펴 보겠습니다. 다음 HTML 부분을 살펴 보겠습니다.

<head>
    <script type="text/javascript" src="script1.js"></script>
    <link rel="stylesheet" type="text/css" href="style1.css" />
    <style type="text/css">
        @import url(style2.css);
    </style>
    <script type="text/javascript">
        (function() {
            var wf = document.createElement('script');
            wf.src = 'script2.js';
            wf.type = 'text/javascript';
            wf.async = 'true';
            var s = document.getElementsByTagName('script')[0];
            s.parentNode.insertBefore(wf, s);
        })();
    </script>
</head>

많은 경우에 script1, style1style2차단 될 것입니다. 이는 해당 리소스가로드 될 때까지 브라우저가 문서를 계속 표시 할 수 없음을 의미합니다 (최신 브라우저에서는이 문제를 조금 더럽 힙니다). 특히 스타일 시트에서는 실제로 좋은 일이 될 수 있습니다. 스타일이 지정되지 않은 콘텐츠의 플래시를 방지하고 스타일을 적용 할 때 발생하는 큰 변화도 방지합니다 (콘텐츠 이동은 사용자에게 정말 짜증이납니다).

다른 한편으로 script2는 차단하지 않을 것입니다. 나중에로드 할 수 있으며 브라우저는 문서의 나머지 부분을 구문 분석하고 표시 할 수 있습니다. 그래서 그것도 유익 할 수 있습니다.

특히 글꼴에 대해 이야기하고 (더욱 구체적으로 Google에서 제공하는) CSS 방법을 고수 할 것입니다 ( @import스타일 시트로 스타일을 계속 유지하기 때문에 좋아 하지만 나뿐 일 수도 있음). 스크립트 ( http://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js )에 의해로드 된 JS 파일 은 @font-face선언 보다 크고 훨씬 더 많은 작업처럼 보입니다 . 그리고 실제 글꼴 자체 (WOFF 또는 TTF)를로드하는 것이 차단되고 있다고 생각하지 않으므로 너무 지연되어서는 안됩니다. 나는 개인적으로 CDN의 열렬한 팬은 아니지만 사실 그들은 정말 빠르다. Google의 서버는 대부분의 공유 호스팅 계획을 압도적으로 능가 할 것이며, 글꼴이 매우 유명하기 때문에 사람들은 이미 캐시에 저장했을 수도 있습니다.

그게 제가 가진 전부입니다.

Typekit에 대한 경험이 없어서 이론에서 제외했습니다. 인수를 위해 브라우저 간 일반화를 계산하지 않고 부정확 한 부분이 있으면 지적 해주세요.


나는 이것의 대부분이 상황에 맞을 것이라고 생각했지만 차단 및 FOUT 문제에도 좋은 메모를 작성하십시오. 여기에서 읽어 보았습니다 : paulirish.com/2009/fighting-the-font-face-fout & stevesouders.com/blog/2009/10/13/font-face-and-performance . 오늘 밤 몇 가지 테스트를 실행하고 성능 차이를 게시하겠습니다. 훌륭한 통찰력에 감사드립니다.
darcher

11

귀하의 질문에서로드 시간을 매우 잘 처리했다고 생각합니다. 내 관점에서 목록에 추가해야 할 몇 가지 소스와 옵션을 전체적으로보기 위해 검토해야 할 몇 가지 다른 고려 사항이 있습니다.


다른 평판 좋은 글꼴 소스

cloud.typography

http://www.typography.com/cloud/

내가 알 수 있듯이 글꼴은 CSS 파일에 데이터로 포함됩니다.

@font-face{ 
    font-family: "Font Name"; 
    src: url(data:application/x-font-woff;base64,d09GRk9UVE8AACSCAA0AAAAARKwAAQAAAAAiVAAAAi4AAAadAAAAAAAAAABDRkYgAAAIyAAAFCgAABmIK5m+CkdERUYAABzwAAAAHQAAACAAXQAER1BPUwAAHRAAAAQlAAAYAq+OkMNHU1VC ... ); 
    font-weight:400; font-style:normal; 
} 

내 사양은 다음과 같습니다.

94ms load of css from their server
37ms load of css from our server (will vary based on your configuration)
195ms load of data:fonts from our server (will vary based on your configuration)

다음은 배포에 대한 매우 높은 수준의 설명입니다. .

Fonts.com

나는이 서비스를 사용 해본 적이 없지만 그들은 매우 확고한 글꼴 공급 업체이고 그들이 그들의 사이트에 나열한 정보는 매우 인상적입니다. 정확한 방법에 대한 사양은 없지만 다음과 같이 알고 있습니다.

  • 사용 가능한 세계에서 가장 잘 알려진 글꼴 중 일부
  • 정말 큰 글꼴 라이브러리 (20,000 개 이상)
  • 모형 제작을위한 데스크탑 글꼴 다운로드
  • 브라우저에서 웹 글꼴을 테스트하기위한 사용자 지정 도구
  • 정밀한 타이포그래피 컨트롤 및 부분 설정
  • 자체 호스팅 옵션

FontSpring

FontSquirrel과 제휴. 여기에서 고정 가격으로 글꼴을 구입할 수 있습니다. CSS와 함께 제공되는 글꼴 파일은 FontSquirrel과 같이 자체 서버에 배포되도록 제공됩니다.


확장 된 사양

각 글꼴 서비스의 전반적인 장단점은 다음과 같습니다.

글꼴 라이브러리 크기

  • Fonts.com : 20,000+
  • FontSpring : 1000+
  • FontSquirrel : 300+
  • Google : 600+
  • 타입 킷 : 900+
  • Typography.com (cloud.typography.com) : 300 개 이상 (35 개 제품군)

가격

  • Fonts.com : 500,000 페이지 뷰에 $ 20 / 월
  • FontSpring : 글꼴에 따라 다름 (글꼴 1 회 구매)
  • FontSquirrel : 무료
  • Google : 무료
  • Typekit : 500,000 페이지 뷰에 대해 월 $ 4
  • Typography.com : 1,000,000 페이지 뷰에 월 $ 12.50

글꼴 품질

웹 글꼴의 품질은 상당히 다를 수 있습니다. 여기에는 문자 양식 자체 나 문자 집합의 간격 또는 크기와 같은 항목이 포함될 수 있습니다. 이 모든 것이 글꼴이 제공 할 전반적인 품질의 인상을 결정합니다. 무료 옵션에는 좋은 옵션이 있지만 품질이 좋지 않은 글꼴도 있으므로 해당 소스에서 신중하게 선택해야합니다.

  • Fonts.com : 높음
  • FontSpring : 혼합에서 높음
  • FontSquirrel : 혼합
  • Google : 혼합
  • Typekit : 높음
  • Typography.com : 매우 높음 (Fonts.com, FontSpring 및 Typekit이 여러 유형 파운드리를 지원하기 때문에 "매우 높음"으로 지정합니다. 여기에서는 H & FJ 파운드리의 글꼴 만 세계 최고입니다)

글꼴 품질 II : 타이포그래피

웹 글꼴에서 얻기가 정말 어려웠던 데스크탑 타이포그래피에는 많은 개선이 있습니다. 이러한 서비스 중 일부는 이러한 서비스를 제공하는 방법을 제공합니다.

  • Fonts.com : 커닝, 글자 간격, 합자, 대체 문자, 분수 등
  • FontSpring : 없음
  • FontSquirrel : 없음
  • Google : 없음
  • Typekit : 없음
  • Typography.com : 작은 대문자, 합자, 대체 문자, 대체 숫자 스타일, 분수 등

브라우저 지원

이것은 대부분 각 서비스에서 지원하는 글꼴 형식으로 귀결됩니다. 주요 내용은 다음과 같습니다.

  • EOT : Internet Explorer (IE 4+) 용
  • TrueType 및 OpenType : 기존 형식 (Safari 3.1+, FF 3.5+, Opera 10+)
  • WOFF : 웹 글꼴의 새로운 표준 (FF 3.6+, Chrome 5+)
  • SVG : IOS <4.2

@ Font-Face 규칙 및 유용한 웹 글꼴 트릭 에서 자세한 정보

이러한 모든 서비스는 주요 글꼴 형식을 지원합니다. 자체 호스팅 글꼴의 경우 올바른 구문을 사용하는 한 다루어야합니다. 다음은 FontSpring 의 방탄 구문의 2011 업데이트입니다 .

@font-face {
  font-family: 'MyWebFont';
  src: url('webfont.eot'); /* IE9 Compat Modes */
  src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
       url('webfont.woff') format('woff'), /* Modern Browsers */
       url('webfont.ttf')  format('truetype'), /* Safari, Android, iOS */
       url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */
  }

성능 I : 다운로드

내가 이해하는 한 위의 구문을 사용하면 브라우저가 자신에게 맞는 특정 형식을 잡을 수 있으므로 작동하지 않는 글꼴 형식에 대한 다운로드 낭비가 없습니다.

Fonts.com, Typekit 또는 Typography.com과 같은 유료 서비스는 방법을 사용하여 올바른 형식을 감지 한 다음 올바른 글꼴 형식 (종종 CSS 파일의 base64 데이터)을 제공합니다.

내가 볼 수 있듯이 위에 나열된 방법의 차이점은 고속 인터넷 사용자에게는 상당히 무시할 만하지 만 (<200ms 차이처럼 보임) 느린 네트워크의 장치, 특히 캐시되지 않은 페이지 히트의 경우 고려할 가치가 있습니다.

성능 II : 부분 집합 화

사용하려는 특정 문자 만 있다는 것을 알고있는 경우 일부 문자로 글꼴을 빌드하여 다운로드 크기를 줄일 수 있습니다.

  • Fonts.com : 매우 상세한 제어
  • FontSpring : FontSquirrel 웹 폰트 생성기 를 통해 서브 세트로 재 컴파일 가능
  • FontSquirrel : 웹 폰트 생성기 를 통해 서브 세트로 재 컴파일 가능
  • Google : 매우 세부적인 제어
  • Typekit : "모든 문자"또는 "기본값"의 제한된 옵션
  • Typography.com : 매우 상세한 제어

성능 III : 배송

  • Fonts.com : 글로벌 CDN 또는 자체 서버
  • FontSpring : 서버 기반
  • FontSquirrel : 서버 기반
  • Google : 글로벌 슈퍼 CDN
  • Typekit : 글로벌 CDN
  • Typography.com : 글로벌 CDN (125,000 개 서버)

언어 지원

  • Fonts.com : 아시아 및 중동을 포함한 40 개 언어
  • FontSpring : 서체, 글꼴에 따라 다름
  • FontSquirrel : 글꼴에 따라 서양
  • Google : 서체, 글꼴에 따라 다름
  • Typekit : 서체, 글꼴에 따라 다름
  • Typography.com : 서체, 글꼴에 따라 다름

테스트 및 구현

  • Fonts.com : 광범위하고 사용자 정의 가능한 도구로 매우 쉽습니다.
  • FontSpring : 기술 (직접 수행)
  • FontSquirrel : 기술 (직접 수행)
  • Google : 쉬움
  • Typekit : 쉬움
  • Typography.com : 쉬운 테스트, 배포 후 변경에 조금 더 관여

이것은 OPs 질문에 대답하지 않습니다. 단지 여러 웹 폰트를 비교합니다.
stackErr

모든 정보를 제공해 주셔서 감사합니다.
darcher

10

글쎄, 당신이 이후에

... 여기서 모범 사례를 찾으면 성능이 중요하지만 확장 성과 사용 편의성도 중요합니다. 외모와 느낌은 말할 것도 없습니다.

대답은 (웹 디자인에서 항상 그렇듯이) : 상황 에 따라 다릅니다!

한 가지 확실한 것은 JS 접근 방식을 사용하지 않는 것이 좋습니다 (두 번째 예제에 표시됨).

개인적으로 저는 대다수의 사용자가 사용하도록 설정 했음에도 불구하고 Javascript에 따라 표현적인 것과 CSS 스타일을 만드는 것을 싫어합니다. 혼합하지 않는 문제입니다.

그리고 주어진 예에서 볼 수 있듯이 글꼴을 사용할 수 있기 전에 페이지가 이미 브라우저에 의해 렌더링 되었기 때문에 일종의 FOUC (스타일이 지정되지 않은 콘텐츠의 플래그)가 있습니다. 그대로 페이지가 다시 그려집니다. 그리고 사이트가 클수록 (성능) 영향이 커집니다!

따라서 글꼴 임베딩에 JS 솔루션을 사용하지 않습니다.

이제 순수한 CSS 메서드를 살펴 보겠습니다.
꽤 오랫동안 여기에 "vs. @import"에 대한 논의가 있습니다. 개인적으로 @import 사용을 피하고 항상 사용하는 것을 선호합니다.<link> 합니다. 그러나 이것은 주로 개인적인 취향의 문제입니다. 절대로하지 말아야 할 한 가지는 둘 다 섞는 것입니다!

로컬 대 CDN
글꼴 파일을 로컬로 호스팅할지 또는 CDN을 사용할지 결정할 때 대부분 다른 글꼴 수와 포함하려는 각 글꼴에 따라 다릅니다.

이것이 왜 중요하거나 역할을합니까?
성능 측면에서 볼 때 스타일 시트에 인코딩 된 Base64 글꼴을 포함하는 것이 좋습니다. 그러나 거의 모든 최신 브라우저에서 사용되는 .woff 형식 만이 대부분의 방문자를 의미합니다. 다른 모든 사용자의 경우 추가 요청이 있습니다.

그러나 Base64 인코딩으로 인한 "오버 헤드"와 글꼴 파일의 크기 (.woff 형식 포함) 때문에이 기술은 3 개 또는 4 개 이하의 다른 글꼴이있는 경우에만 사용해야합니다. 그리고 서버가 gzip으로 압축 된 (CSS) 파일을 전달하는지 항상 확인하십시오.

이렇게하면 큰 장점은 글꼴 파일에 대한 추가 요청이 없다는 것입니다. 그리고 첫 페이지로드 후 (사이트의 어느 페이지에 관계없이) CSS 파일이 캐시됩니다. 이것은 HTML5 애플리케이션 캐시를 사용하는 경우에도 이점입니다 (확실히 수행 할 것임).

저자가 자신의 사이트에서 최대 3 ~ 4 개의 다른 글꼴을 사용해서는 안된다는 사실 외에도 Google의 CDN을 사용하는 방법을 살펴 보겠습니다.

먼저 다음 <link>과 같이 원하는 모든 글꼴을 하나의 단일으로 포함 할 수 있으며 항상 포함해야합니다 .

<link href='http://fonts.googleapis.com/css?family=PT+Serif:400,700,400italic,700italic|PT+Sans:400,700,400italic,700italic|Montez' rel='stylesheet' type='text/css'>

결과는 다음과 같습니다.

@font-face {
  font-family: 'Montez';
  font-style: normal;
  font-weight: 400;
  src: local('Montez'), local('Montez-Regular'), url(http://themes.googleusercontent.com/static/fonts/montez/v4/Zfcl-OLECD6-4EcdWMp-Tw.woff) format('woff');
}
@font-face {
  font-family: 'PT Sans';
  font-style: normal;
  font-weight: 400;
  src: local('PT Sans'), local('PTSans-Regular'), url(http://themes.googleusercontent.com/static/fonts/ptsans/v6/LKf8nhXsWg5ybwEGXk8UBQ.woff) format('woff');
}
@font-face {
  font-family: 'PT Sans';
  font-style: normal;
  font-weight: 700;
  src: local('PT Sans Bold'), local('PTSans-Bold'), url(http://themes.googleusercontent.com/static/fonts/ptsans/v6/0XxGQsSc1g4rdRdjJKZrNBsxEYwM7FgeyaSgU71cLG0.woff) format('woff');
}
@font-face {
  font-family: 'PT Sans';
  font-style: italic;
  font-weight: 400;
  src: local('PT Sans Italic'), local('PTSans-Italic'), url(http://themes.googleusercontent.com/static/fonts/ptsans/v6/PIPMHY90P7jtyjpXuZ2cLD8E0i7KZn-EPnyo3HZu7kw.woff) format('woff');
}
@font-face {
  font-family: 'PT Sans';
  font-style: italic;
  font-weight: 700;
  src: local('PT Sans Bold Italic'), local('PTSans-BoldItalic'), url(http://themes.googleusercontent.com/static/fonts/ptsans/v6/lILlYDvubYemzYzN7GbLkHhCUOGz7vYGh680lGh-uXM.woff) format('woff');
}
@font-face {
  font-family: 'PT Serif';
  font-style: normal;
  font-weight: 400;
  src: local('PT Serif'), local('PTSerif-Regular'), url(http://themes.googleusercontent.com/static/fonts/ptserif/v6/sDRi4fY9bOiJUbgq53yZCfesZW2xOQ-xsNqO47m55DA.woff) format('woff');
}
@font-face {
  font-family: 'PT Serif';
  font-style: normal;
  font-weight: 700;
  src: local('PT Serif Bold'), local('PTSerif-Bold'), url(http://themes.googleusercontent.com/static/fonts/ptserif/v6/QABk9IxT-LFTJ_dQzv7xpIbN6UDyHWBl620a-IRfuBk.woff) format('woff');
}
@font-face {
  font-family: 'PT Serif';
  font-style: italic;
  font-weight: 400;
  src: local('PT Serif Italic'), local('PTSerif-Italic'), url(http://themes.googleusercontent.com/static/fonts/ptserif/v6/03aPdn7fFF3H6ngCgAlQzBsxEYwM7FgeyaSgU71cLG0.woff) format('woff');
}
@font-face {
  font-family: 'PT Serif';
  font-style: italic;
  font-weight: 700;
  src: local('PT Serif Bold Italic'), local('PTSerif-BoldItalic'), url(http://themes.googleusercontent.com/static/fonts/ptserif/v6/Foydq9xJp--nfYIx2TBz9QFhaRv2pGgT5Kf0An0s4MM.woff) format('woff');
}

보시다시피 9 개의 서로 다른 글꼴 파일이 있습니다. 즉, 사용자가 요청 된 글꼴 중 하나 이상이 로컬에 설치되어 있지 않은 경우 총 10 개의 요청 (링크 요소 중 하나 포함)을 의미합니다. 그리고 이러한 요청은 사이트에 대한 모든 새 페이지 요청마다 반복됩니다 (더 이상 데이터가 전송되지 않음)! 또한의 요청에 대한 응답 <link>은 캐시되지 않습니다.

권장 사항 :
결국 스타일 시트에 인코딩 된 .woff 형식의 Base64로 글꼴 파일을 포함하는 것이 좋습니다.

이를 수행하는 방법에 대한 예제와 설명은 이 멋진 기사 참조하십시오 !


감사합니다.이 솔루션을 찾고있었습니다!
ken

3

추가 요청의 오버 헤드가 bease64 인코딩시 크기 증가보다 크기 때문에 인라인 CSS 방법을 사용합니다. 이것은 또한 css 파일의 서버에 의한 gizip 압축에 의해 추가로 상쇄됩니다.

다른 옵션은 글꼴의 비동기로드를 사용하는 것이지만 대부분의 사용자는로드 후 글꼴이 팝업되는 것을 볼 수 있습니다.

방법에 관계없이 사용할 문자 집합 만 포함하여 글꼴 파일의 크기를 줄일 수 있습니다.


HTTP2를 사용할 때 위에서 언급 한 추가 오버 헤드는 없습니다.
Chris Gunawardena

1

개인적으로 저는 Google Fonts를 사용합니다. 그들은 다양한 선택권을 가지고 있으며 최근 Zopfli 압축으로 이동하여 글꼴 압축을 개선했습니다 . 구글은 웹을 더 빠르게 만들기 위해 노력하고 있기 때문에 그 부분에 대한 더 많은 최적화도 그들로부터 나올 것이라고 생각합니다.

아웃소싱 글꼴 배달로 선택하는 것이 무엇이든 글꼴을 가져 오라는 요청으로 인해 항상 속도가 감소합니다. 속도 관점에서 볼 때 가장 좋은 것은 글꼴을 직접 제공하는 것입니다. 아웃소싱 된 배달에서로드하는 데 걸리는 추가 밀리 초를 신경 쓰지 않는 경우 사용의 용이성이 밀리 초만큼의 가치가 있다고 생각한다면이를 사용해야합니다.

Typekit과 다른 것들에 대해서는 잘 모르지만 Google Fonts를 사용하면 특정 하위 집합과 문자 범위를 제공하도록 선택하여 전달 속도를 더욱 높일 수 있습니다.

하위 집합 선택 :

<link href="http://fonts.googleapis.com/css?family=Open+Sans&subset=latin" rel="stylesheet">

문자 범위 선택 :

<!-- Only serve H,W,e,l,o,r and d -->
<link href="http://fonts.googleapis.com/css?family=Open+Sans&text=HelloWorld" rel="stylesheet">

dns-prefetch 를 사용 하여 글꼴 전달로 속도를 더욱 향상시킬 수 있습니다 .

저는 Google이 가능한 한 글꼴 전달 속도를 높이기 위해 최선을 다할 것이라고 생각하고 희망합니다. 로드하는 데 걸리는 밀리 초는 내 웹 사이트를 해치지 않으므로 즐겁게 사용합니다.

짧은 이야기 :

예를 들어 권장되는 1 초 이상로드되도록하여 밀리 초의 글꼴 전달로 인해 사이트가 손상되는 경우 직접 호스팅해야한다고 생각합니다.


1
<link rel=dns-prefetch href='//fonts.googleapis.com'>내가 분석, 히트 매핑 및 하위 도메인에 사용한다는 점에서 좋은 점 은 어떤 이유로 외부 웹 글꼴에 대해 실행하도록 등록하지 않았습니다. 그리고로드 시간은 글꼴마다 크게 다릅니다. 상당히 인기있는 글꼴 (캐시 될 수 있음)을 사용하거나 소수의 글꼴 만 선택하는 경우 웹 글꼴을 사용하는 것이 매우 빠른 글꼴 소스라고 생각합니다. 곧 여기에 속도 테스트를 게시하겠습니다.
darcher

1

가장 좋은 옵션은 다음과 같이 ajax를 사용하여 글꼴을 가져 오는 것입니다.

<script>
    (function() {
        var font = document.createElement('link'); 
        font.type = 'text/css'; 
        font.rel = 'stylesheet';
        font.href = '/url/to/font.css';
        var s = document.getElementsByTagName('link')[0]; 
        s.parentNode.insertBefore(font, s);
      })();
</script>

내 웹 페이지에서이 작업을 수행하고 Google Insights 테스트에서 9 점을 올립니다.


흥미 롭군. 이 방법으로 PageSpeed를 조사해야합니다.
darcher

2
무엇에 대한 async속성? 같은 일을합니다.
Tymek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.