Webfonts hoặc phông chữ được tải cục bộ?


98

Kể từ khi những rắc rối mang lại khi sử dụng Cufon, tôi đã mạo hiểm từ bỏ việc sử dụng các tài nguyên phông chữ bên ngoài, nhưng càng về cuối, tôi đã tìm kiếm các phương pháp tải phông chữ thay thế để xem có cách nào tốt hơn không; các phương pháp tốt hơn có cách chỉ xuất hiện bất ngờ.

Có rất nhiều phương pháp mới hiện có, và có vẻ như các biến thể cho mỗi phương pháp; Tôi có nên sử dụng bộ không? hoặc google webfonts (với js hoặc css)? tôi có nên tiếp tục sử dụng phông chữ tải cục bộ (ví dụ: phương pháp tạo fontquirrel.com) không?

Tôi sẽ liệt kê các phương pháp có vẻ được đón nhận nhiều nhất bên dưới, với một số thử nghiệm, nhưng liệu nó có thực sự đáng để chuyển sang một webfont không? Có vẻ như nó sẽ tải tài nguyên cao hơn (yêu cầu http) và có ít loại định dạng tệp hơn (ít tương thích hơn), v.v. Nhưng có vẻ như tệp được tải không đồng bộ và hiệu quả trong hầu hết các trường hợp.

  1. Đó chỉ là vấn đề hoàn cảnh và nhu cầu? Nếu vậy, chúng là gì?
  2. Có sự khác biệt lớn giữa các phương pháp này không?
  3. Có phương pháp nào tốt hơn mà tôi chưa liệt kê không?
  4. Những gì là chuyên nghiệp / con của hiệu suất? Nhìn? phụ thuộc? khả năng tương thích?

Tôi thực sự đang tìm kiếm các phương pháp hay nhất ở đây, hiệu suất là một điều quan trọng nhưng khả năng mở rộng và tính dễ sử dụng cũng vậy. Chưa kể, hãy nhìn và cảm nhận.


CSS của Google

  • chỉ sử dụng bảng định kiểu bên ngoài
  • chỉ sử dụng loại tệp tương thích nhỏ nhất
  • có thể sử dụng @importhoặc <link>hoặc lấy nội dung của styleshee ( @font-face) và đưa trực tiếp vào biểu định kiểu của riêng bạn.

kết quả kiểm tra

  78ms load of html
  36ms load of css

nhập mô tả hình ảnh ở đây


Phương pháp JS của Google

  • sử dụng webfont.jsđể tải định kiểu
  • chỉ sử dụng loại tệp tương thích nhỏ nhất
  • nối :rootphần tử với lớp
  • thêm tập lệnh vào đầu.

kết quả kiểm tra

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

nhập mô tả hình ảnh ở đây


Phương pháp Typekit

  • nối :rootphần tử với lớp.
  • có thể sử dụng *.jsđoạn mã hoặc tập tin được nạp từ bên ngoài *.jstập tin
  • sử dụng data:font/opentypethay vì tệp phông chữ.
  • thêm tập lệnh vào đầu
  • thêm css nhúng vào đầu
  • thêm biểu định kiểu bên ngoài vào đầu

    bạn có thể dễ dàng thêm / xóa / điều chỉnh phông chữ và bộ chọn được nhắm mục tiêu từ typekit.com

kết quả kiểm tra

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

nhập mô tả hình ảnh ở đây


… & Phương pháp Phông chữ

@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)
}

… Hoặc với dữ liệu: font method…

@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
Đây là một câu hỏi hay.
dachi

1
Tôi không chắc đó có phải là phương pháp tốt nhất hay không, nhưng tôi luôn sử dụng CSS của Google như thế này<link href='http://fonts.googleapis.com/css?family=Open+Sans:300' rel='stylesheet'>
lefoy

Tôi đã phát triển một trang web giống như font-sóc, chỉ dành cho Georgianwebfonts địa phương . Tôi đang sử dụng phương pháp font-sóc và tôi cũng muốn thấy một câu trả lời tuyệt vời cho câu hỏi này.
dachi

1
Đây là một bài viết rất hay về cách kê @font-facekhai tờ khai chống đạn , biết đâu các bạn có thể tìm được thông tin hữu ích. paulirish.com/2009/bulletproof-font-face-implementation-syntax
lefoy Ngày

Tôi có thể bắt đầu nhận tiền thưởng khi có câu trả lời tốt hơn / được cải thiện nếu bạn không chấp nhận cho đến khi nào.
Davit

Câu trả lời:


34

Đầu tiên, tôi sẽ làm rõ vài điều về dịch vụ của Google. Nó thực sự sẽ tải định dạng nhỏ nhất mà trình duyệt của bạn có thể xử lý. WOFF cung cấp kích thước tệp nhỏ và trình duyệt của bạn hỗ trợ nó, vì vậy đó là tệp bạn thấy. WOFF cũng được hỗ trợ khá rộng rãi. Tuy nhiên, trong Opera chẳng hạn, bạn có thể sẽ nhận được phiên bản TrueType của phông chữ.

Tôi tin rằng logic kích thước tệp cũng là lý do tại sao Font Squirrel thử chúng theo thứ tự đó. Nhưng đó chủ yếu là suy đoán từ phía tôi.

Nếu bạn đang làm việc trong môi trường mà mọi yêu cầu và byte đều được tính, bạn sẽ phải thực hiện một số cấu hình để tìm ra cách nào phù hợp nhất với trường hợp sử dụng của bạn. Mọi người sẽ chỉ xem một trang và không bao giờ truy cập lại? Nếu vậy, quy tắc bộ nhớ đệm không quan trọng nhiều. Nếu họ đang duyệt hoặc quay lại, Google có thể có các quy tắc lưu vào bộ nhớ đệm tốt hơn máy chủ của bạn. Độ trễ là vấn đề lớn hơn hay băng thông? Nếu độ trễ, hãy đặt mục tiêu ít yêu cầu hơn, vì vậy hãy lưu trữ cục bộ và kết hợp các tệp càng nhiều càng tốt. Nếu băng thông, hãy chọn tùy chọn nào có mã nhỏ nhất và định dạng phông chữ nhỏ nhất.

Bây giờ, hãy xem xét CSS và JS. Hãy xem xét đoạn HTML sau:

<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>

Trong nhiều trường hợp, script1, style1, và style2sẽ ngăn chặn. Điều này có nghĩa là trình duyệt không thể tiếp tục hiển thị tài liệu cho đến khi tài nguyên đó được tải (mặc dù các trình duyệt hiện đại làm lỗi điều này một chút). Điều này thực sự có thể là một điều tốt, đặc biệt là với các bảng định kiểu. Nó ngăn chặn sự xuất hiện của nội dung chưa được định kiểu và nó cũng ngăn chặn sự thay đổi khổng lồ sẽ xảy ra khi áp dụng các kiểu (và việc thay đổi nội dung thực sự gây khó chịu cho người dùng).

Mặt khác, script2sẽ không bị chặn. Nó có thể được tải sau và trình duyệt có thể chuyển sang phân tích cú pháp và hiển thị phần còn lại của tài liệu. Vì vậy, điều đó cũng có thể có lợi.

Đặc biệt là nói về phông chữ (và thậm chí cụ thể hơn, cung cấp của Google), tôi có thể sẽ gắn bó với một phương pháp CSS (tôi thích @importvì nó giữ kiểu dáng với biểu định kiểu, nhưng đó có thể chỉ là tôi). Tệp JS được tải bởi script ( http://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js ) lớn hơn phần @font-facekhai báo và trông giống như nhiều công việc hơn. Và tôi không tin rằng việc tải phông chữ thực tế (WOFF hoặc TTF) đang bị chặn, vì vậy nó không nên trì hoãn mọi thứ quá nhiều. Cá nhân tôi không phải là một fan cuồng nhiệt của CDN, nhưng sự thật là chúng THỰC SỰ rất nhanh. Các máy chủ của Google sẽ đánh bại hầu hết các kế hoạch lưu trữ được chia sẻ bởi một trận lở đất và bởi vì phông chữ của chúng rất phổ biến, mọi người thậm chí có thể đã lưu chúng vào bộ nhớ cache.

Và đó là tất cả những gì tôi có.

Tôi không có kinh nghiệm với Typekit, vì vậy tôi đã bỏ nó ra khỏi lý thuyết của mình. Nếu có bất kỳ điểm nào không chính xác, không tính tổng quát hóa giữa các trình duyệt vì lợi ích của các lập luận, vui lòng chỉ ra chúng.


Tôi nhận ra phần lớn điều này sẽ là tình huống, nhưng bạn cũng cần lưu ý về các vấn đề chặn và FOUT. Tôi đã đọc điều đó tại đây: paulirish.com/2009/fighting-the-font-face-fout & stevesouders.com/blog/2009/10/13/font-face-and-performance . Tôi sẽ chạy một số bài kiểm tra và đăng sự khác biệt về hiệu suất vào tối nay. Cảm ơn cho cái nhìn sâu sắc
darcher

11

Tôi nghĩ rằng bạn đã giải quyết rất tốt thời gian tải trong câu hỏi của mình. Theo quan điểm của tôi, có một số nguồn cần được thêm vào danh sách và một số cân nhắc khác cần được xem xét để có cái nhìn đầy đủ về các tùy chọn.


Một số nguồn font uy tín khác

cloud.typography

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

Từ những gì tôi có thể nói, các phông chữ được nhúng dưới dạng dữ liệu trong tệp CSS:

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

Đây là thông số kỹ thuật của tôi:

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)

Đây là mô tả cấp cao của họ về việc triển khai của họ .

Fonts.com

Tôi chưa sử dụng dịch vụ này, nhưng họ là một nhà cung cấp phông chữ rất lâu đời và thông tin họ liệt kê trên trang web của họ khá ấn tượng. Tôi không có thông số kỹ thuật về các phương pháp chính xác của họ, nhưng đây là những gì tôi biết họ có:

  • Một số phông chữ nổi tiếng nhất trên thế giới hiện có
  • Một thư viện phông chữ thực sự lớn (hơn 20.000)
  • Tải xuống phông chữ cho máy tính để bàn để tạo mô hình
  • Một công cụ tùy chỉnh để kiểm tra phông chữ web trong trình duyệt
  • Điều khiển kiểu chữ tốt và thiết lập con
  • Tùy chọn tự lưu trữ

FontSpring

Liên kết với FontSquirrel. Phông chữ có thể được mua ở đây với giá cố định. Các tệp phông chữ mà một CSS đi kèm được phân phối, sẽ được triển khai trên máy chủ của riêng bạn, giống như FontSquirrel.


Thông số kỹ thuật mở rộng

Về ưu và nhược điểm tổng thể của từng dịch vụ phông chữ, đây là một vài so sánh:

Kích thước thư viện phông chữ

  • Fonts.com : 20.000+
  • FontSpring : 1000+
  • FontSquirrel : 300+
  • Google : 600+
  • Bộ gõ : 900+
  • Typography.com (cloud.typography.com): có thể hơn 300 (35 họ)

Định giá

  • Fonts.com : $ 20 / tháng cho 500.000 lượt xem trang
  • FontSpring : Thay đổi theo phông chữ (mua phông chữ một lần)
  • FontSquirrel : Miễn phí
  • Google : Miễn phí
  • Typekit : $ 4 / tháng cho 500.000 lượt xem trang
  • Typography.com : $ 12,50 / tháng cho 1.000.000 lượt xem trang

Chất lượng phông chữ

Chất lượng của phông chữ web có thể thay đổi khá nhiều. Điều này có thể bao gồm những thứ như bản thân các mẫu chữ hoặc khoảng cách hoặc kích thước của bộ ký tự. Tất cả những điều này xác định ấn tượng tổng thể về chất lượng mà một phông chữ sẽ mang lại. Trong khi các tùy chọn miễn phí có một số tùy chọn tốt, chúng cũng có một số phông chữ có chất lượng không cao, vì vậy bạn muốn lựa chọn cẩn thận từ các nguồn đó.

  • Fonts.com : Cao
  • FontSpring : Hỗn hợp thành Cao
  • FontSquirrel : Hỗn hợp
  • Google : Hỗn hợp
  • Bộ gõ : Cao
  • Typography.com : Rất cao (Tôi cho đây là chỉ định "rất cao" vì Fonts.com, FontSpring và Typekit hỗ trợ nhiều xưởng đúc loại, trong đó đây chỉ là phông chữ từ xưởng đúc H&FJ, một trong những phông chữ tốt nhất trên thế giới)

Chất lượng phông chữ II: Kiểu chữ

Có rất nhiều cải tiến trong kiểu chữ trên máy tính để bàn mà rất khó có được trong phông chữ web. Một số dịch vụ này cung cấp những cách cung cấp những thứ đó.

  • Fonts.com : kerning, khoảng cách giữa các chữ cái, chữ ghép, ký tự thay thế, phân số, v.v.
  • FontSpring : Không có
  • FontSquirrel : Không có
  • Google : Không có
  • Typekit : Không có
  • Typography.com : chữ hoa nhỏ, chữ ghép, ký tự thay thế, kiểu số thay thế, phân số, v.v.

Hỗ trợ trình duyệt

Điều này chủ yếu phụ thuộc vào các định dạng phông chữ được hỗ trợ bởi từng dịch vụ. Những điều chính là:

  • EOT: dành cho Internet Explorer (IE 4+)
  • TrueType và OpenType: Các định dạng truyền thống (Safari 3.1+, FF 3.5+, Opera 10+)
  • WOFF: Tiêu chuẩn mới cho phông chữ web (FF 3.6+, Chrome 5+)
  • SVG: IOS <4,2

Thông tin thêm tại Quy tắc @ Font-Face và Thủ thuật Phông chữ Web Hữu ích

Tất cả các dịch vụ này đều hỗ trợ các định dạng phông chữ chính. Với phông chữ tự lưu trữ, miễn là bạn sử dụng đúng cú pháp, bạn sẽ được bảo vệ. Đây là bản cập nhật năm 2011 của cú pháp chống đạn từ FontSpring :

@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 */
  }

Hiệu suất I: Tải xuống

Theo như tôi hiểu, sử dụng cú pháp trên cho phép các trình duyệt lấy định dạng cụ thể phù hợp với chúng, vì vậy không có tải xuống lãng phí đối với các định dạng phông chữ không hoạt động.

Các dịch vụ trả phí như Fonts.com, Typekit hoặc Typography.com sử dụng các phương pháp để phát hiện định dạng chính xác và sau đó cung cấp định dạng phông chữ phù hợp, thường là dữ liệu base64 trong tệp CSS.

Từ những gì tôi có thể thấy, sự khác biệt trong các phương pháp bạn đã liệt kê ở trên là khá không đáng kể đối với người dùng internet tốc độ cao (có vẻ như chênh lệch <200ms), nhưng có thể đáng xem xét đối với các thiết bị trên mạng chậm hơn, đặc biệt là đối với các lần truy cập trang chưa được lưu trữ.

Hiệu suất II: Thiết lập con

Nếu bạn biết rằng sẽ chỉ có một số ký tự nhất định mà bạn muốn sử dụng, bạn có thể xây dựng phông chữ của mình bằng một nhóm ký tự con và do đó giảm kích thước tải xuống.

  • Fonts.com : Kiểm soát rất chi tiết
  • FontSpring : Có thể biên dịch lại thành tập con thông qua trình tạo webfont của FontSquirrel
  • FontSquirrel : Có thể biên dịch lại thành tập con thông qua trình tạo webfont
  • Google : Kiểm soát rất chi tiết
  • Bộ gõ : tùy chọn giới hạn của "tất cả các ký tự" hoặc "mặc định"
  • Typography.com : Kiểm soát rất chi tiết

Hiệu suất III: Giao hàng

  • Fonts.com : CDN toàn cầu hoặc máy chủ của riêng bạn
  • FontSpring : Dựa trên máy chủ của bạn
  • FontSquirrel : Dựa trên máy chủ của bạn
  • Google : Siêu CDN toàn cầu
  • Bộ gõ : CDN toàn cầu
  • Typography.com : CDN toàn cầu (125.000 máy chủ)

Hỗ trợ ngôn ngữ

  • Fonts.com : 40 ngôn ngữ, bao gồm cả Châu Á và Trung Đông
  • FontSpring : Phương Tây, tùy thuộc vào phông chữ
  • FontSquirrel : Phương Tây, tùy thuộc vào phông chữ
  • Google : Phương Tây, tùy thuộc vào phông chữ
  • Bộ gõ : Phương Tây, tùy thuộc vào phông chữ
  • Typography.com : Phương Tây, tùy thuộc vào phông chữ

Kiểm tra và Thực hiện

  • Fonts.com : Rất dễ dàng, với các công cụ mở rộng và có thể tùy chỉnh
  • FontSpring : Kỹ thuật (tự làm)
  • FontSquirrel : Kỹ thuật (tự làm)
  • Google : Dễ dàng
  • Bộ gõ : Dễ dàng
  • Typography.com : Thử nghiệm dễ dàng, thay đổi một chút sau khi triển khai

Điều này không trả lời câu hỏi OPs. Nó chỉ so sánh một số Webfonts.
stackErr

Đây là thông tin nhiều nhất về mỗi nhà cung cấp, cảm ơn vì tất cả thông tin đó!
darcher

10

Vâng, như bạn đang sau

... tìm kiếm các phương pháp hay nhất ở đây, hiệu suất là một điều lớn nhưng khả năng mở rộng và tính dễ sử dụng cũng vậy. Chưa kể, hãy nhìn và cảm nhận.

câu trả lời là (giống như mọi khi trong thiết kế web): Nó phụ thuộc!

Một điều chắc chắn là tôi không khuyên bạn nên sử dụng cách tiếp cận JS (được hiển thị trong ví dụ thứ hai của bạn).

Cá nhân tôi không thích tạo những thứ trình bày và kiểu CSS phụ thuộc vào Javascript, mặc dù đại đa số người dùng đã bật nó. Đó là một câu hỏi không trộn lẫn mọi thứ.

Và như bạn có thể thấy trong ví dụ đã cho của mình, có một số loại FOUC (nội dung chưa được định kiểu), bởi vì trang đã được trình duyệt hiển thị trước khi có phông chữ. Ngay sau khi nó được, trang được vẽ lại. Và trang web càng lớn thì tác động (hiệu suất) càng lớn!

Vì vậy, tôi sẽ không bao giờ sử dụng bất kỳ giải pháp JS nào để nhúng phông chữ.

Bây giờ chúng ta hãy xem xét các phương thức CSS thuần túy.
Vì khá lâu rồi đây là một cuộc thảo luận về "so với @import". Cá nhân tôi muốn tránh sử dụng @import và luôn <link>chỉ sử dụng . Nhưng đây chủ yếu là một câu hỏi về sở thích cá nhân. Một điều bạn không bao giờ nên làm thực sự là trộn cả hai!

Local so với CDN
Khi quyết định lưu trữ cục bộ các tệp phông chữ của bạn hay sử dụng CDN, thì điều đó chủ yếu phụ thuộc vào số lượng phông chữ khác nhau và các phông chữ tương ứng mà bạn muốn nhúng.

Tại sao điều này lại quan trọng hoặc đóng một vai trò nào đó?
Từ quan điểm hiệu suất, tôi khuyên bạn nên bao gồm phông chữ Base64 được mã hóa trong (một) biểu định kiểu của bạn. Nhưng chỉ định dạng .woff, vì định dạng này được sử dụng bởi gần như tất cả các trình duyệt hiện đại, có nghĩa là đối với phần lớn khách truy cập của bạn. Đối với tất cả những người dùng khác sống với yêu cầu bổ sung.

Nhưng do "chi phí" gây ra bởi mã hóa Base64 và kích thước của tệp phông chữ (ngay cả ở định dạng .woff), kỹ thuật này chỉ nên được sử dụng, nếu bạn có không nhiều hơn 3 hoặc 4 phông chữ khác nhau. Và luôn đảm bảo rằng máy chủ của bạn cung cấp các tệp (CSS) được gzip'ed.

Lợi thế lớn của việc làm như vậy là bạn không có yêu cầu bổ sung cho tệp phông chữ. Và sau khi tải trang đầu tiên (bất kể trang nào trên trang web của bạn), tệp CSS sẽ được lưu vào bộ nhớ đệm. Đây cũng là một lợi thế nếu bạn sử dụng bộ đệm ứng dụng HTML5 (mà bạn chắc chắn sẽ làm được).

Bên cạnh thực tế là một tác giả không nên sử dụng nhiều hơn tối đa 3 hoặc 4 phông chữ khác nhau trên trang web của mình, hãy cùng xem phương pháp sử dụng CDN của Google.

Trước hết, hãy lưu ý rằng bạn có thể (và luôn nên) gộp tất cả các phông chữ mong muốn vào một phông chữ duy nhất <link>, như sau:

<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'>

Điều này sẽ dẫn đến phản hồi sau:

@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');
}

Như bạn có thể thấy, có 9 tệp phông chữ khác nhau, có nghĩa là tổng cộng 10 yêu cầu (bao gồm một trong các phần tử liên kết), nếu người dùng không cài đặt cục bộ một hoặc nhiều phông chữ được yêu cầu. Và những yêu cầu này được lặp lại ở mỗi yêu cầu trang mới đến trang web của bạn (mặc dù không có thêm dữ liệu nào được chuyển)! Ngoài ra, phản hồi cho yêu cầu của <link>không bao giờ được lưu vào bộ nhớ đệm.

Đề xuất:
Sau cùng, tôi thực sự khuyên bạn nên bao gồm (các) tệp phông chữ của bạn ở định dạng .woff Base64 được mã hóa trong biểu định kiểu của bạn!

Hãy xem bài viết hay này để biết ví dụ và mô tả về cách thực hiện!


Cảm ơn rất nhiều, đã tìm kiếm giải pháp này!
ken

3

Tôi sử dụng phương thức css nội tuyến vì chi phí của yêu cầu bổ sung nhiều hơn mức tăng kích thước khi mã hóa bease64. Điều này cũng được bù đắp bằng cách nén gizip bởi máy chủ của các tệp css.

Tùy chọn khác là sử dụng tải không đồng bộ các phông chữ nhưng thông thường người dùng sẽ thấy các phông chữ xuất hiện sau khi tải.

Bất kể phương pháp nào, bạn có thể giảm kích thước của tệp phông chữ bằng cách chỉ bao gồm các bộ ký tự bạn sẽ sử dụng.


Không có thêm chi phí được đề cập ở trên khi sử dụng HTTP2.
Chris Gunawardena

1

Cá nhân tôi sử dụng Google Fonts. Họ có nhiều lựa chọn và gần đây họ đã cải thiện khả năng nén phông chữ bằng cách chuyển sang nén Zopfli . Google đang cố gắng làm cho web nhanh hơn, vì vậy tôi đoán rằng họ cũng sẽ tối ưu hóa nhiều hơn ở phần đó.

Dù bạn chọn phân phối phông chữ thuê ngoài, bạn sẽ luôn bị giảm tốc độ bởi các yêu cầu nhận phông chữ. Điều tốt nhất, nhìn từ góc độ tốc độ, sẽ là tự phục vụ các phông chữ. Nếu bạn không quan tâm đến những mili giây thừa đó mà nó cần để tải từ một giao hàng thuê ngoài, bạn nên làm theo điều đó nếu bạn nghĩ rằng sự dễ dàng sử dụng chúng đáng giá với mili giây.

Tôi không biết về Typekit và những cái khác, nhưng với Google Fonts, bạn có thể chọn được cung cấp các tập hợp con và phạm vi ký tự cụ thể để tăng tốc độ phân phối hơn nữa.

Chọn một tập hợp con:

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

Chọn một loạt các ký tự:

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

Bạn có thể sử dụng dns-prefetch để cải thiện tốc độ hơn nữa với phân phối phông chữ.

Tôi nghĩ và hy vọng rằng Google sẽ làm tất cả những gì có thể để tăng tốc độ phân phối phông chữ của họ nhiều nhất có thể. Thời gian tải chúng bằng mili giây không ảnh hưởng đến trang web của tôi, vì vậy tôi rất vui khi sử dụng chúng.

Mẩu chuyện dài:

Nếu thời gian phân phối phông chữ mili giây đang làm tổn hại đến trang web của bạn, chẳng hạn như khiến nó tải nhiều hơn 1 giây được đề xuất, tôi nghĩ bạn nên tự lưu trữ chúng.


1
Điểm tốt về <link rel=dns-prefetch href='//fonts.googleapis.com'>tôi sử dụng nó cho phân tích, ánh xạ nhiệt và tên miền phụ, vì một số lý do nó không đăng ký để chạy cho các webfonts bên ngoài. Và thời gian tải rất khác nhau giữa các phông chữ, tôi cho rằng nếu bạn đang sử dụng một phông chữ khá phổ biến (có thể được lưu trong bộ nhớ cache) hoặc chỉ một số phông chữ được chọn, sử dụng webfonts là một nguồn phông chữ khá nhanh. Tôi sẽ sớm đăng các bài kiểm tra tốc độ ở đây.
darcher

1

Các tùy chọn tốt nhất là nhập các phông chữ bằng ajax, giống như sau:

<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>

Tôi làm điều này trên trang web của mình và tăng 9 điểm trong bài kiểm tra Google Insights.


Hấp dẫn. Tôi sẽ phải xem xét Tốc độ trang bằng phương pháp này.
darcher

2
Còn asyncthuộc tính thì sao? Nó làm điều tương tự.
Tymek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.