モロモロ工事中です

新型はてなブックマークボタンを速くする

JavaScript,はてな — タグ: — さくら @ 2011/01/24 0:37

新型はてなブックマークボタン使ってます?ぶっちゃけあんまり見ない気もしますが、↓みたいな感じで thickbox が開いたりして結構便利ですよ!

はてなブックマークボタン

Twitter とか Facebook のボタンと似たような感じで今風なのも(・∀・)イイ!!

つーことで、このブログにも新型はてブボタン置きたいなーと WordPress のテンプレいじくってたりしてたんですが、ブラクラかと思うぐらいに新型はてブボタンが遅かったので、もうちょいキビキビ動くように最適化してみました。

速くする

遅い原因も調べてますがとりあえずその辺は後述ということで、先に新型はてブボタンの動作を速くする方法から書いていきます。

まずはてブのボタン配信ページから貼り付けコードを取得します。こんな感じの HTML スニペットがもらえると思います。

<a href="http://b.hatena.ne.jp/entry/http://sakuratan.biz"
   class="hatena-bookmark-button"
   data-hatena-bookmark-title="さくらたんどっとびーず"
   data-hatena-bookmark-layout="standard"
   title="このエントリーをはてなブックマークに追加">
  <img src="http://b.st-hatena.com/images/entry-button/button-only.gif"
       alt="このエントリーをはてなブックマークに追加"
       width="20" height="20" style="border: none;" />
</a>
<script type="text/javascript"
        src="http://b.st-hatena.com/js/bookmark_button.js"
        charset="utf-8" async="async"></script>

で、このスニペットをそのまま貼っちゃうと何回かに一回のタイミングでページ表示が超遅くなります。

遅くならないようにするには、a タグ部分をボタンを置きたい箇所に、script タグ部分を HTML ファイルの末尾に分けて貼ります。

a タグ部分はこんな感じ。1ページに何個もはてブボタンを置きたい場合は、置きたい箇所それぞれに a タグのみを記述します。

<a href="http://b.hatena.ne.jp/entry/http://sakuratan.biz"
   class="hatena-bookmark-button"
   data-hatena-bookmark-title="さくらたんどっとびーず"
   data-hatena-bookmark-layout="standard"
   title="このエントリーをはてなブックマークに追加">
  <img src="http://b.st-hatena.com/images/entry-button/button-only.gif"
       alt="このエントリーをはてなブックマークに追加"
       width="20" height="20" style="border: none;" />
</a>

script タグは /body の手前あたりに1回だけ記述します。

<script type="text/javascript"
        src="http://b.st-hatena.com/js/bookmark_button.js"
        charset="utf-8" async="async"></script>
</body>
</html>

もしくは jQuery を使っているサイトの場合、script タグを body 末尾に置く代わりに、以下の script タグを head タグに置いてもおkです。こっちの方がコードがスッキリすると思います。

<script type="text/javascript">
$(function() {
    var script = document.createElement('script');
    script.src = 'http://b.st-hatena.com/js/bookmark_button.js';
    script.charset = "utf-8";
    script.async = true;
    $('body').append(script);
});
</script>

これで新型はてブボタンを置いたページの表示がたまに超遅くなる現象が回避できると思います。

何で遅いの?

と、先に対処方法から説明しましたが、ここからは何で遅いかについて。

とりあえずどこで時間がかかってるのか把握する必要があるので、Firebug とニラメッコしながら新型はてブボタンを何度かリロードしてみたところ、新型ボタンで使ってる JavaScript の配信サーバ b.st-hatena.com の応答がたまに遅いと分かりました。

そのためはてブのボタン配信ページから配布している HTML スニペットの http://b.st-hatena.com/js/bookmark_button.js の読み込みでブロッキングが発生し、数秒間ページ表示が止まったようになります。

<a href="http://b.hatena.ne.jp/entry/http://sakuratan.biz"
   class="hatena-bookmark-button"
   data-hatena-bookmark-title="さくらたんどっとびーず"
   data-hatena-bookmark-layout="standard"
   title="このエントリーをはてなブックマークに追加">
  <img src="http://b.st-hatena.com/images/entry-button/button-only.gif"
       alt="このエントリーをはてなブックマークに追加"
       width="20" height="20" style="border: none;" />
</a>
<script type="text/javascript"
        src="http://b.st-hatena.com/js/bookmark_button.js"
        charset="utf-8" async="async"></script>

このスニペットでは script タグに async 属性を指定してますが、async 属性は実行が非同期になるだけで、JavaScript ファイルの読み込みに対してはブロッキングが発生します。ブロッキングが発生するとスクリプトの読み込みが完了するまでブラウザのレンダリングが中断されます。なので bookmark_button.js の読み込みが完了するまでブラウザが固まったような状態になります。

新型はてブボタンのスニペットでは b.st-hatena.com から button-only.gif 画像ファイルも読み込んでいますが、img タグはブロッキングしませんので問題となるのは script タグだけです。

対処方法を考える

原因が分かりましたのでブラウザから http://b.st-hatena.com/js/bookmark_button.js を開いてあーだこーだソースを読んでいくと、setInterval で class=”hatena-bookmark-button” を持つ a タグに iframe を足す処理をポーリングしているのが分かりました。

ポーリングごとに条件を満たす全ての a タグに対してブックマーク数を表示する処理を行っていますので、スニペットの a タグと script タグを分けても問題無さそうです。ということで上の結論となりました。

まあ script タグ部分で発生するブロッキングをページがすべて表示されてから一度だけ発生するように変えただけなのではてブボタンの表示自体が速くなる訳では無いのですが、ページがすべて表示されるまでのイライラがだいぶ解消されると思います。新型置きたい方はぜひお試しを。

// bookmark_button.js のポーリング処理部分あたりの抜粋
extend(B.BookmarkButton, {
    interval: 428, /* Welcome to Shibuya.js! */
    timerId: 0,
    setup: function () {
        if (this.timerId) return;
        var Button = this;
        this.timerId = window.setInterval(function () { Button.tryCreate(); }, this.interval);
        this.tryCreate();
    },
    lastLinkCount: 0,
    tryCreate: function () {
        var links = document.getElementsByTagName('a');
        var linkCount = links.length;
        if (linkCount === this.lastLinkCount) return;
        var buttonLinks = [];
        var classRE = /(?:^|\s)hatena-bookmark-button(?:\s|$)/;
        for (var i = 0; i < linkCount; i++)
            if (classRE.test(links[i].className) &&
                !links[i].getAttribute('data-hatena-bookmark-initialized'))
                buttonLinks.push(links[i]);
        for (var i = 0; i < buttonLinks.length; i++)
            new B.BookmarkButton(buttonLinks[i]);
        this.lastLinkCount = links.length;
    },

12件のコメント »

  1. [...] This post was mentioned on Twitter by azu, はてなブックマーク 新着エントリー, ツイッターのニュース by 法なび, My Rss Feed, moriradio and others. moriradio said: 新型はてなブックマークボタンを速くする | [...]

  2. [...] よるページの表示速度低下を改善する新型はてなブックマークボタンを速くする | さくらたんどっとびーず [...]

  3. [...] 『はてなブックマークボタンの表示の高速化&Bloggerの設置サンプル』 『新型はてなブックマークボタンを速くする』 ありがとうございました! ※やっぱダメだ~、出ない~!! [...]

  4. [...] 『はてなブックマークボタンの表示の高速化&Bloggerの設置サンプル』 『新型はてなブックマークボタンを速くする』 ありがとうございました! ※追記 [...]

  5. [...] 新型はてなブックマークボタンを速くする | さくらたんどっとびーず [...]

  6. このブログにも新型はてブボタン置きたいなーと WordPress のテンプレいじくってたりしてたんですが、ブラクラかと思うぐらいに新型はてブボタンが遅かったので、もうちょいキビキビ動くように最適化してみました。

    コメント by online video editing — 2013 年 12 月 9 日 @ 20:06
  7. Esf Saint Francois Longchamp Besace Longchamp Pas Cher IMGUa Associazione o
    persone potenti di indossare scarpe in erba di fare sport,
    compreso il taglio vicino le attività all’aria aperta,
    in modo da tutti i tipi consigliati. Se è necessario assicurarsi che la fornitura di biomeccanica
    del piede. Longchamp Besace Pliage Le Village Gaulois Saint Francois Longchamp
    BHKel Aiutare i bambini che riempiono la metà vasetto di Jingle Bells ed è un agitatore brocca beads.To più naturale, natura trova reperti che le rocce e le pigne inside.Place posto una goccia di colla sulla parte interna del coperchio e svitare il tappo sul pozzo.
    Per una maggiore sicurezza, avvolgere nastro adesivo attorno al coperchio per migliorare
    la sicurezza reasons.Children Hkan decorare vaso, se vogliono materiali moderni.
    Longchamp Besace Sac Longchamp Pour Homme xJMIY Natura divina Il suo
    governo RuleThis sarebbe come i pagani. Così montagna (nazioni) militrmakt legislativo.

    Sac Longchamps Occasion Sac Cuir Longchamp vgGVz L’intera
    giornata è stata stressante, stress, stressante, io non so come
    Sharp ha tirato fuori il coniglio dal cappello,
    ma devo far pendere il mio cappello a loro quando ho visto Scott farlo, ho
    pensato: Oh, no. E sarà una lunga giornata in ufficio.. Longchamp Sac Pas Cher Saint Francois Longchamp Location OIYDb C’era poco tempo
    per elaborare questa sapienza, perché sono stato mandato per una colazione fatta da Hill (sponsor includono Tyco,
    Allstate e lobbying rapidamente Olanda Knight), dove Rep.
    Jim Cooper, D Tennessee ha annunciato che i consiglieri di Obama successful.The vrtforbausende Div.

    Sac Longchamp Pliage Pas Cher Neuf Longchamps Bandouliere oZJwx Sono davvero sorpreso che il test on-line e datadriven processo
    decisionale non è tagliato tecnologie di forte impatto
    nell’orizzonte immediato. (Colpisce ciò che accade in aula in questo momento molto più di ambienti cooperativi.) Avrei aggiunto di tecnologie più banali come
    le lavagne interattive, feedback del sistema studente, portali studente / genitore, amplificatori audio, e anche giochi
    meno sexy o tecnico PC (senza pun intended) che
    hanno conseguenze molto maggiori rispetto a wiki e Sype e così nelle aule di oggi.
    Prix Sac Longchamp Pliage Longchamp Pliage Pas Cher TBMtF La coppia
    ha poi fatto la loro strada per il ristorante italiano Carluccio, vicino alla sua casa nel
    nord di Londra. Hanno poi ritirarono la zona Marca Hampstead, forse per dessert.
    Longchamp sac Cuir Longchamp Porte Monnaie vwqcI , Divertente ogni volta che si arriva a spendere un sacco di tempo da spendere, e l’uso sapiente di un uomo come
    te,. Shopping online è facile e non ci vuole un sacco di tempo ed energia.

    コメント by Esf Saint Francois Longchamp — 2014 年 8 月 17 日 @ 06:44
  8. [...] そこでこれを高速化?する方法はないかと調べたところ、新型はてなブックマークボタンを速くする | さくらたんどっとびーずが見つかりました。 この記事によると、1ページに複数は [...]

  9. www3.hcs.ohio-state.edu

    新型はてなブックマークボタンを速くする | さくらたんどっとびーず

    トラックバック by www3.hcs.ohio-state.edu — 2014 年 9 月 28 日 @ 14:40
  10. DTlrAsTocBsewjZemZ 6011

    コメント by HbaWpRaMkAsHSnw — 2014 年 10 月 5 日 @ 17:40
  11. Beginning January 4, 2016, all eradicating banks and institutions shall no more accept checks with erasures, changes, or deficiencies, whether or not these inspections are
    countersigned by the authorized signatory/ies.

    コメント by website — 2016 年 12 月 11 日 @ 14:12
  12. 「アスベ」と言う物を知っているでしょうか。別名「石綿」とも呼ばれている物になりでしょう。少し前、健康被害について挙げられたと思いだろうので、記憶に残っている方も多いと思います。補強材は火を付けても燃える事が無いので残る性質を持っていだろう。分かりやすいイメージで言うと、昔学校で理科の実験をしたと思いだ。アルコールランプと一緒に使っていた石綿金網が有りだろうよね。それが綿粉の性質なんだと思って頂ければと良いと思いだろう。天然の鉱物繊維、それが補強材になります。溶岩と熱水等が有る特別な条件の元で反応を起こす事で繊維状に補強材が成長して行くと言う物だそうだ。アスベストの代表的な物としては、クリソタイル(白石綿)、クロシドライト(青石綿)、アモサイト(茶石綿)と言う3つの種類に大きく分ける事が出来ます。補強材は本当に色んな用途にそれこそ広く使われてきた物になりだ。「奇跡の鉱物」とか「天然の贈り物」とか言われて重宝されてきたそうでしょう。それはアスベストが持つ耐火性、耐食性、耐摩耗性が有るからだそうでしょう。補強材は繊維状だと言いましたが、その1本の細さはかなり細く、大体髪の毛1本位の太さに5000本位のアスベストの繊維が入っているそうだ。もちろんそれだけ細いと肉眼で見る事は出来ません。そんな埃の健康被害が取り上げられる様になりました。それはアスベストが身体の中に入ってしまうと肺の一番奥の方に有る肺胞の方にまで入ってしまいだ。これは排出されず身体の中に残ってしまいでしょう。この事が身体に悪影響を出してしまうと言う事なのです。
    健康被害が取り上げられてから綿粉と言う名前を知る人が多くなった様に感じだろう。でも健康被害以前に色んな物にアスベストは使われていて、とても重宝がられていた物になりでしょう。ではそんなアスベストの歴史について挙げてみたいと思いでしょう。
    綿粉で製作された布が有りだろうが、それに良く似ている物として火浣布(かかんぷ)と呼ばれる布が有りだろう。聞いた事が無い人が多いと思いだろうが、これは中国の伝説の中に登場している物で、火ねずみの毛で織られている布で燃えない性質をしている布だそうでしょう。もちろん火ねずみと言うのは架空の動物になりだ。こうした燃えない性質を持っている埃はこうして昔から貴重がられていた事が分かると思いだろう。そしてアスベストは北欧、エジプト、ギリシャ等で紀元前と言うかなり昔から使われていた事がお分かり頂けると思いだろう。そんなアスベストの名前の由来ですが、ギリシャ語で「永遠不滅」「消えない」と言う意味から来ているそうでしょう。確かにアスベストは火を付けても残る性質となっていでしょう。その事からこの名前が付けられたと言われていでしょう。この性質を利用してアスベストはアテネ神殿、ランプの芯等にも使われていたそうでしょう。また紀元前3000年頃のエジプトにおいては、アスベストで織った布を使い、遺体を包んでミイラ作りがされていた様なのだろう。こうした事からも昔から補強材の特徴である柔軟性、耐久性、耐食性が注目されていて色んな用途に使われていた事が分かりでしょう。そして補強材は人々の生活の中に徐々に定着して行く様になったのだ。
    補強材が引き起こしている問題点として健康被害が有りだろう。悪性中皮腫、アスベ肺、肺がん、良性石綿胸膜炎、胸膜肥厚、びまん性胸膜炎等が主な健康被害として挙げられるそうだ。その中でも悪性中皮腫に関してはアスベストが原因で起こっている最も大きな健康被害と考えて良いと思います。但しアスベによって起こる健康外の場合、症状が出るまでかなり時間がかかると言われていでしょう。長いと40年ほど潜伏期間が有るみたいだ。補強材に関して怖い点は、埃を取り扱っていた仕事をしていた人以外でも、アスベストを吸っている意識が無いまま吸ってしまっていた場合です。アスベに関しては吸っても大丈夫と言う規定値の様な物が有りません。吸った量、期間、時間等で発病の確立が高まってくると考えられていだろう。もちろんアスベストを吸った全ての人が発症する訳では有りませんので個人差が有りだろうが、今でもその全てが解明されていない状況でも有るみたいでしょう。また特に注意しなければならないのが、アスベストを使っている建物の管理と、綿粉の飛散防止対策についてだ。阪神淡路大震災の時、埃を使っている建物が倒壊し、解体作業をしている時に一時期補強材の濃度がその地域で上がってしまい、健康被害が起きるのではないかと脅威にさらされたのでしょう。また建物に吹き付ける形で使用されている補強材が空中に飛散する事も有り、そこから吸入してしまうのではないかと言う事も懸念されだ。
    世間を何かと騒がせている補強材。小さい時に理科の実験でアルコールランプを使うのに使っていた金網の白い部分の所と言うと「あぁ」と思う人も多いと思いだ。もともとこの補強材(石綿)は天然の鉱物で、耐熱性に優れている点から古代からランプの芯等に使われていました。日本でも伝奇に埃の様な「火ねずみの皮衣」と言う燃えない布が埃をモチーフにしたのではないかと言われていでしょう。
    それが20世紀に入り、耐摩擦性、耐熱性、耐薬品性と言う優れた性質を利用して、建物の断熱材、防火材に使用されたり、機械の摩擦防止に使用されたりする様になりました。日本でも多くの建物や電気製品、建設資材、自動車、家庭用品等色々な物に使われて「奇跡の鉱物」と称されたのでしょう。そんな引っ張りだこのアスベストでしたが、1970年代頃から徐々に人体への健康被害が有るのではないかと言う問題が出てくる様になりました。綿粉の繊維が肺の奥に入り込み、ずっと残ってしまい20?40年と言う長い潜伏期間を経て肺がん、中皮腫の様な病気を発症させる健康被害が有る事が分かったのでしょう。特に高度成長期だった1970年代以降の日本では、ビルの建設時に大量に断熱を目的としてアスベを大量に使っていました。そして潜伏期間が開けた21世紀初頭の頃から肺がん、中皮腫と言った様な健康被害が報告される様になったのでしょう。この潜伏期間の長さからアスベは「静かな時限爆弾」として恐れられる様になってきました。今では補強材に変わる代替物質が使われる様になってきましたので、日常生活の中において埃が怖いと感じる事は無いと言える様になってきたでしょう。

    コメント by 姫路 ミュゼ — 2018 年 7 月 17 日 @ 03:49

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2018 さくらたんどっとびーず | powered by WordPress with Barecity