この間書いたアーカイブページのやつをちょっとやろうと思って21時ごろからちょくちょくやってたものの、心からだるくなってきたので考えるのを止めました。

ベースの実装自体はレイアウトとかを除いて1時間もかからないうちにできたものの、困ったことにIE11で動かない。Polyfillしてないからだ。filterをAllow Functionを書いてたわけだけども、こいつが動かない。しょうがないのでAllow Functionを使うのを止めようかとおもったものの、すると次はスコープのコンテキストの問題に直面するわけで、もうこの時点でやる気がかなり爆散してしまった。

Polyfillしてないのは大きい理由があって、それはしてない、というよりはできない、もっというと後述する通りやりたくない事情があって、その事情によりJavaScriptはHTML内のscriptタグに、もうすこし正確に書くとアーカイブページ用のEJSテンプレートエンジンに記載していました。少なくとも自分はscriptタグ内に記載したものをPolyfillする方法は知らなくて、JavaScriptを別のファイルとして外だしして読み込むということはしたくないので頑張って調べたけれども、やっぱりなかった。

いちおう、自分も会社ではPolyfillとかそういうのはやってますし、まあ、深い知識はないけどザっと使うくらいの知識はあります。あるんですが、それでもJavaScriptをファイルとして分離せずにHTMLのscript内に意地でも書こうとしているのは理由があって、それはキャッシュのコントロールがめんどくさいからです。いちおう、このサイトで使用しているテーマはもともとそのキャッシュ対策としてCSSやJSといったリソースに対して生成時に一意のハッシュを付与するGruntのタスクが存在するので、JavaScriptのキャッシュの問題についてはそれらを弄れば任意のページに任意のキャッシュ対策が施されたJavaScriptをインジェクトするというのは実のところほんの10分もあれば解消できる。解消できるのですが、問題はそれに引きずれて発生するJSONのキャッシュの方です。

JSONについては前回の記事ではこれまた別のファイルとして分離しているのですが、そもそも分離してしまうとこれもキャッシュされてしまうわけです。このサイトのHexoのテーマは前述のとおりEJSテンプレートエンジンが用いられています。ここで閃いてしまったのがHTML生成時に記事一覧のJSONのデータもscrpitタグ内の、Vue.jsのdataに突っ込んでしまえばよいということで、そうすればリクエストも減るし、JSONのキャッシュも気にしなくていいし、そういう方向で進めたかった。進めたかったのですが、前述のIE問題にぶつかり、その対策のためにJavaScriptを外だししてPolyfillするということはこれすなわち 結局JSONも外だししなければならなくなってしまうわけです。 しなくても別のscriptタグに書けばいい話というのに気づきました。EJSでの生成時にJSONを埋め込むというのができなくなるからです。結局のところJavaScriptのキャッシュに引きずられてJSONのキャッシュ対策が必要になってきます。もちろんこれはnginxの設定を少しばかり変更すれば対応できます。できますが、なんというか、そういうことに気を使わないといけないということに絶望した。そこまでやりたくない。わざわざ古いブラウザのために。そうなると、つまり、結論的に残念ながらPolyfillを行う(か古い構文で書かない限り)古いブラウザで動かないんですね。

追記 Polyfillしました

最近、会社でなぜかフロントの人間とかフロントが好きなのではという疑惑をかけられているわけですが、私は正直言ってフロントは仕方なく、心から仕方なく、Sincerely仕方なく やっているわけです。好きでやってるわけではないです。もうJavaScriptというか、JavaScriptをもちいたフロントに、もっといえばもうJavaScriptをもちいたWebに対して[1]Sincerely辟易しています。なぜそんなにみんなJavaScript(を用いたWebのフロントを)やりたがるのでしょうか。私には厳しいです。私はSincerelyフロントをやりたくないんです。なぜこんなことで私の貴重な休日の時間が消滅するのか…。憎いです…。心から憎い…。Sincerely憎い…。

これは(JavaScriptをもちいた)フロントをやりたくない、そう心からやりたくないという気持ちを表明した記事[2]です。そんな…感じです。おわり。


  1. あくまでフロントにからむ部分のJSを使ったものに対してです ↩︎

  2. タイトルが部分的に英語なのはそういう気持ちが汚い言葉で出るのを頑張って誤魔化した結果です ↩︎