カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

「『はてなブログ遅い問題』問題」について思ったコト

概要: 主に自分の開発への思想の話をします


大体のところとしては、

  1. はてなブログが遅いのはだいたいJavaScriptのせい - もふぬこ戦記
  2. はてなブログのJavascriptコメント抽出してたら、なんだかプログラマあるあるネタになってた - Minecraftとタートルと僕
  3. 些末なコードレビュー - naoyaのはてなダイアリー

という辺りの記事を見て思ったコトを少し書きます。とは言っても、はてなDisとかそういう話ではなく、僕の開発へのスタンスでの話です。あと多分上記リンク先と本質はズレてます。たぶん。


1. そもそもプログラミングとかDevOpsとか言う文脈においては、『人間の作業は信用できない』という前提で、開発等を進めるべき

だと僕は思ってます。

まあこれは一応、その作業をした人が信用ならんとかそういう話ではなく、そもそもの話、僕の哲学じゃないけど、僕は基本的にプログラミング等に関しては、

  1. 人は皆、スキル(技術力)や勘(センス)がバラバラである
  2. また、ヒトというものは、常にSPoF唯一無二である
  3. よって、属人性 というモノを持った時点で、その作業はSPoF化する

という考え方を持っていて、だからこそ、

  1. テストはきちんと書くべし
  2. テストは自動で回すべし (継続CI)
  3. あとデプロイ等も自動化すべし

と考えています。あともう一つ、僕の根本的な考え方として、

  • 密結合な何か を作ると、 引き継いだ人が死ぬ (ような思いをする)

とも考えていて、これがまあ僕のCatalystやRuby on Railsの食わず嫌いに繋がってるのだろう、とは思ってます。

で、あと、この辺りの塩梅は難しいコトだとは思うのですが、プログラミングした何を、

  1. 属人性 と密結合させた場合:
    • → 引き継いだ人が死ぬ (ような思いをする)
  2. ライブラリやUI と密結合させた場合:
    • → メンテや改良する際に死ぬ (ような思いをする)
  3. 上記二つが組み合わさってた場合:
    • 綺麗だ……地獄が見える…… (と言いながら、死ぬような思いをする)

と思っていて、今回のはてなブログのJavascriptが、なんかカオスってたのは、その辺りの何かに引っかかったんだろうなぁ、と僕は勝手に思ってます。

で、次。

2. 自転車置場の議論を避ける為には、その辺りの瑣末な事柄のチェック等は、全部自動化して機械に任せるべきだ

とも思います。

まあこれはツールがないとちょっと厳しいなぁと思うんですが、例えはインデントのスタイルが云々、とかは、

で、統一すりゃ良い話だろ、って今だと言えますし、あと、コードの整形についても、例えばGolangであれば、

$ go fmt

すりゃ済む話なので、その辺りの、本当に瑣末なコーディングに関する問題は、

全部機械的に処理してしまえば良いんじゃない?

と思います。

が、いかんせんこの辺り、いい感じのツールやユーティリティが無いと、

  • 自動化を行うためのツールから作り始めないといけない!

という感じになって、激しくYak Shevingになる気がしているので、その辺り微妙ですけどね。ツールが無い場合は。

まあ基本的には、コードのタブ幅だとか、あるいはコーディングスタイルとかは、自動処理できるところは自動処理して、残りのクラス設計だとか、あるいはコンポーネントをどこまで結合させるべきか、みたいな話は、開発者が面倒みるしかないんじゃないかなーと思ってます。

で、最後。

3. Javascriptが遅い? なら、JSX (DeNA製の方)を使おう!

と、この、

  • 『はてなブログ遅い問題』問題

を知ったとき、一番最初に思いました。

っていうか、なんでそっちに話を持って行くねん! って感じではありますが、JSX、早いです。あと、クラス機構とかがデフォで実装されてますし、また、そもそもJSX自体、

スマートフォン等のシビアな環境で、素早く動作するJavascriptを吐き出す

という目的で作られた、という経緯があるので、モバイル開発も含め、Javascriptの実行速度命! っていう場合には、ぜひとも使うべきだと僕は思います!!!!!!


という半分ネタっぽいのはここまでにしておいて、真面目に思うところを書くと、そもそも、

  1. ページが動的生成である=サーバサイドでどうしてもレンダリング時間が必要となる
  2. 広告とかたくさん貼付けてる=外部のリソースをたくさん読み込む必要がある
  3. あと、結局のところ、Webページの重さは、最後はユーザーの回線とマシン環境に左右される

と思っていて、まあなんだろう、一概に、

Webページが重い

っていう話が有ったとしても、それが、

  1. リソースの読み込みが遅いのか
  2. UIのレンダリングが遅いのか
  3. 最後ユーザーの実行環境がそもそもクソではないのか

という辺りの区別が付かないと、まあ対応しようがないよね、と僕は思います。

まあその辺りについての改善の手法として、

  1. ロード時間とかUIのレンダリングタイムとかをFluentdへぶち込んだり
  2. あるいは、Webページの依存するリソースをdata URI化したり
  3. もしくは画像のスプライト化とかしてHTTP Requestを減らす

という方法があるんだろうなぁと最近思ったりしました。

4. という訳で本日なんとなく思ったコトは以上です。

あと、ぶっちゃけた話、僕のTumblr上のブログもそうはページのロードが軽くないのですが、これそもそもなんでかって言うと、

  1. ソーシャル系のボタン
  2. Javascriptを用いる広告
  3. DisqusとかZenbackとかその辺り
  4. 背景画像

辺りが主な原因で、Tumblr自体が重いというよりは、余計なモンゴテゴテとつけてるからだ、と思っていて、だからこそ、最近ちょっとTumblrのテンプレを見直してるんですが、まあ、はてなブログのレンダリングが重い件については、

  1. ソーシャルボタン外せ
  2. ヘッダと広告は金はらって取っ払え
  3. あと画像系はできるだけ使うな

でFAなのではないかと思います。っていうかアレだ。その辺りについては、まあ大体は、

  1. はてなブログProを契約し
  2. 自分でできる範囲でレンダリングが遅くなる要素を取っ払い
  3. 超シンプルなブログに仕上げる

という事をすれば良いだけやん? と思います。


ま、という事で本日の雑文は以上ですね。

あと、最後に一つ言っておくと、僕のブログも一緒なんですが、広告をベタっとページのトップ等に貼付けてる時点で、そのページはSlowlyになるのは当然の話なので、その辺り、はてな側の問題ではないのではないか?とか思いました。

まあ広告なしで重い! とかならはてな側の問題だけど、広告ありで重い! っていうのは、広告が足引っ張ってるんじゃねーの? とか僕は思います。っていうか俺のページもソレで重いし。

という事で、本日は以上です。結構長くなりましたが。