日が経過しています。情報の鮮度にご注意ください
はじめに
GitHub Pagesで静的ブログを構築することを決めたとき、できるだけページの表示速度を向上させたいと考え、いくつかの小技を使って読み込み速度を速め、ユーザー体験を向上させました。
最適化
百度CDNサービスと七牛静的リソースホスティングの利用
このブログではBootstrap/jQuery/fontawsomeの3つのライブラリ/フォントファイルを使用しています。Bootstrapについては実際の状況に合わせて若干の修正を加え、より適切なレイアウトに適合させたため、サードパーティのCDNは使用せず、七牛のリソースサーバーに配置しました。jQueryについては百度の静的公開リソースサービスを利用しています。
ここで少し宣伝を。個人ユーザーにとって、七牛は支付宝での実名認証後、10GBの無料ストレージを提供しており、実際の効果を見ると速度もまずまずです。私はドメインimg.xheldon.com CNAMEを七牛のリソースサーバーに設定し、前述のカスタマイズ版Bootstrapや画像などの静的リソースをホストしています。利用時にはファイルをアップロードしてパスを記述するだけでよく、img.xheldon.com/path/filename.extを使用すればOKです:
2019年9月3日更新:私のドメインはGodaddyに置いており、国内でICP登録を行っていないため(国内だとブロックされる恐れがある)、未登録のドメインは七牛で解析できません。そのため、画像を記事と同じ場所に置くしかなく、記事を書く際にはできるだけ画像を使わないようにしています -_-
正直なところ、静的ブログなのでリクエストに伴うCookieは大きくなく、リソースを別のサブドメインに配置する最適化の効果は限定的ですが、ないよりはましです。
小規模リソースの直接ページ内埋め込み
小さなcssやjsは直接ページ内に埋め込みました。例えばhighlight.cssとsearch.jsは、styleとscriptタグを使って直接ページに記述しています。この方法には大きな利点があります。これらのファイルは小さいため、ダウンロード時間は無視でき、外部から読み込む場合の主な時間消費はTTFB(FQ必要)になります:

設定
若い頃は世間知らずだったため、このサイトのAに記録されたwwwを直接Github PagesのIP 192.30.252.154/192.30.252.153に向け、トップレベルドメイン@を誤ってCNAMEを使ってxheldon.github.io.に向けてしまいました。実際、MXを@に向ける必要がない場合、これはOKなのですが、履歴書を作成する際に少しクールにしたいと思い、自分のブログのドメインをメールアドレスとして使用し、QQメールが提供するドメインメールサービスを利用しました。そのため、MX解析を行う際には、トップレベルドメイン@をテンセントのmxdomain.qq.comに向ける必要があり、この時点でエラーが発生しました。アリババクラウドは、CNAMEとMXを同時にトップレベルドメイン@に向けることはできないと警告しました。具体的な理由はこちらで確認できますが、ブログを移行してから数か月が経ち、いくつかのリンクはすでに検索エンジンにクロールされているため、今からリンクを修正すると損失が大きすぎます。
私の最初の設定は以下の通りでした:
| レコードタイプ | ホストレコード | レコード値 |
|---|---|---|
| CNAME | @ | xheldon.github.io. |
| A | www | 192.30.252.154 |
| A | www | 192.30.252.153 |
テンセントドメインメールを使用するため、MXレコードを@に向ける必要がありました。しかし、MXの@とCNAMEの@は共存できません。そこで、私は非表示のURL転送を考え、CNAMEから@への指向を解除し、MXレコードを@に向けて追加し、さらに非表示のURLを新設しました:
| レコードタイプ | ホストレコード | レコード値 |
|---|---|---|
| A | www | 192.30.252.154 |
| A | www | 192.30.252.153 |
| MX | @ | mxdomain.qq.com. |
| CNAME | qqmailhash | mail.qq.com. |
| 非表示URL | @ | http://www.xheldon.com |
ブログのブランチディレクトリにあるCNAMEファイルをxheldon.comからwww.xheldon.comに変更したところ、検索エンジンからブログにアクセスすると、例えばxheldon.com/about/の場合、確かにブログにはリダイレクトされるものの、トップページのみに留まることが判明しました。つまり、以前に検索エンジンにクロールされたすべてのリンクは、単にトップページのwww.xheldon.comに留まってしまうのです。これは、ステルス転送が特定のアドレスに対してのみリダイレクトを行い、アドレス後のパスを自動的に追加しないことを意味します。私のケースでは、URLのステルス転送を設定し、xheldon.comからwww.xheldon.comへの転送を設定した後、すべてのxheldon.com/xxxxへのアクセスリクエストもwww.xheldon.comに転送され、期待していたwww.xheldon.com/xxxxには転送されませんでした。
この時点でdig xheldon.com:
1 | |
トップレベルドメインが阿里雲のIPを指していることがわかりました。
そこで考えた末、Aレコードの@を修正し、直接GitHub PagesのIPアドレスを指すようにしました。ブログのルートディレクトリにあるCNAMEファイルの内容は修正後のwww.xheldon.comです:
| レコードタイプ | ホストレコード | レコード値 |
|---|---|---|
| A | @ | 192.30.252.154 |
| A | @ | 192.30.252.153 |
| MX | @ | mxdomain.qq.com |
| CNAME | qqmailhash | mail.qq.com. |
| CNAME | www | github.xheldon.com. |
これが可能な理由は、Github Pagesが自動的に](https://help.github.com/articles/setting-up-an-apex-domain-and-www-subdomain/)をマッチングするためです。具体的には以下の通りです:
CNAMEファイルの内容がwww.xheldon.comで、xheldon.comからのリクエストが検出された場合(トップレベルドメイン@のAレコードをGitHub PagesのIPに向ける設定が必要)、www.xheldon.comに転送されます。CNAMEファイルの内容がxheldon.comで、www.xheldon.comからのリクエストが検出された場合(wwwのサブドメインAレコードをGitHub PagesのIPに向ける設定が必要)、xheldon.comに転送されます。
この時点でdig www.xheldon.comが確認されました:
1 | |
dig xheldon.comが確認されました:
1 | |
人生の重要な選択に直面したとき、最善の方法を誰かが教えてくれて、貴重な時間を無駄にせずに済めばと、私はよく願っています。だからこそ、自分の経験を踏まえて頻繁にブログを書き、広大なインターネットのこの小さな片隅に、私にとって一度きりの人生経験を記録し、助けを求める人々の力になれればと思っています。