タグ

javascriptとdomに関するpipeheadのブックマーク (74)

  • DOM操作のパフォーマンス - Qiita

    backbone.jsなどのjsライブラリで画面生成されるアプリだと、javascript部分のパフォーマンスがアプリのさくさく感にすごい影響を与える。特に、レンダリング部分がトロいと、画面スクロールとか最初の画面生成にもたつきが発生して、いちいち引っ掛かりを感じるアプリとなってしまう。 では実際のところ、どう書いたら性能良くなるの?、ということでネットをさまよってると、「DOM操作を極力なくせ」、というのが共通の見解のようだ。 例えば、イテレーションの中で一つ一つappendするのではなくてまとめてappendしたほうが良いとか、そもそもappendじゃなくて文字列でinnerHTMLに入れたほうが良い、一度作ったDOM構成をcloneして使うと良い、cloneしたDOMを操作してからreplaceしたほうが良い、とかいろいろTIPSが出てくる。 そんなわけで、自分として気になるtips

    DOM操作のパフォーマンス - Qiita
    pipehead
    pipehead 2014/02/11
    > 「DOM操作を極力なくせ」、というのが共通の見解のようだ。
  • MutationObserverを使った高速setImmediate/nextTick - 素人がプログラミングを勉強していたブログ

    MessageChannel / setTimeout / requestAnimationFrame / postMessageを使ったものより異様に速い。 というのも、setTimeout等は、次のサイクル(すなわちnextTick)の開始時に実行する関数を登録し、DOMや画面の更新後に実行されるのだが、 MutationObserverのコールバックは、現在の(同期的な)JS実行が完了した時点でコードを走らせるためである。さらに、MutationObserverは同じ実行サイクルでのDOM上の変更を次回のサイクルにすべてまとめてrecordsとしてコールバックに渡すので、これもsetImmediateの実装には非常に都合が良い。 MutationObserverのような実行タイミングをmicrotaskといい、setTimeout / postMessage / MessageCha

    MutationObserverを使った高速setImmediate/nextTick - 素人がプログラミングを勉強していたブログ
    pipehead
    pipehead 2013/10/24
    > MutationObserverのような実行タイミングをmicrotaskといい、setTimeout / postMessage / MessageChannelなどの実行タイミングをmacrotaskというらしい。
  • デザイナーが知っておきたいDOMの読み込みとjQuery | スマートフォンアプリ開発会社のエンジニアブログ

    こんにちは。ビンゴ豊島です。デザイナーという立場ですがJavaScriptもちょいちょいと書かせていただいております。 今回はDOM操作をする前に知っておきたいDOMの読み込みについて記事を書かせていただきます。対象はDOM操作ばかり、もしくはDOM操作しかしないんですけど?といったデザイナーさんになります。これを読むと今までなんとなく使っていたjQueryも意味を理解した上で使えるようになれるかもしれません。 Webページが表示されるまで ブラウザがページを表示するまで簡単に書くと下記のようになります。 サーバにページをリクエスト サーバから返されたHTMLをダウンロード DOM構築をしつつ描画と画像等のダウンロード 表示完了 このうち「3. DOM構築をしつつ描画とダウンロード」のタイミングでどのような順番でイベントや処理が発生するかを検証します。 DOMの読み込みを確認するサンプルコ

    デザイナーが知っておきたいDOMの読み込みとjQuery | スマートフォンアプリ開発会社のエンジニアブログ
    pipehead
    pipehead 2013/10/22
    スクリプトが実行される順番
  • DOM操作の最適化によるJavaScriptチューニング(後編)

    連載「Webサイト・アプリ高速化テクニック徹底解説」の第5回は、前回の「DOM操作の最適化によるJavaScriptチューニング(前編)」に続く後編です。後編では、createElement()などのDOM操作メソッドを使ったさまざまなテクニックや、パフォーマンスを劣化させるよくあるパターンについて詳しく解説します。 CodeIQとの連動企画! この記事で学べるJavaScriptチューニングのテクニックを、実際にCodeIQの問題で試すことができます。もう既に自信がある方は腕試しに、もしくは理解度チェックのための復習として是非ご活用ください!こちらから問題にチャレンジ! 前回は、DOM操作が遅い原因と仕組みについて簡単に説明し、チューニングのサンプルをいくつか解説しました。その中で、innerHTMLを利用したコードをサンプルにあげていますが、innerHTMLを利用する場合、いくつかの

    DOM操作の最適化によるJavaScriptチューニング(後編)
  • DOM操作の最適化によるJavaScriptチューニング(前編)

    連載「Webサイト・アプリ高速化テクニック徹底解説」の第4回は、JavaScriptのチューニングのうち、ボトルネックになりやすいDOM操作の最適化について解説します。前編・後編にわたって、DOM操作が遅くなる原因と仕組み、その解決策について詳しく解説します。 CodeIQとの連動企画! この記事で学べるJavaScriptチューニングのテクニックを、実際にCodeIQの問題で試すことができます。もう既に自信がある方は腕試しに、もしくは理解度チェックのための復習として是非ご活用ください!こちらから問題にチャレンジ! DOM(Document Object Model)とは、HTMLをアプリケーション(ここではJavaScript)から利用するためのAPIです。JavaScriptによるユーザーインターフェースの構築やレスポンスの表示など、インタラクティブな部分はほとんどがDOM操作によるも

    DOM操作の最適化によるJavaScriptチューニング(前編)
  • Custom Elements: HTML に新しい要素を定義する - HTML5 Rocks

    Web Platform Dive into the web platform, at your pace.

    Custom Elements: HTML に新しい要素を定義する - HTML5 Rocks
  • 非推奨になった Mutation events を Mutation Observers に置き換えよう

    前からDOM3(黒い三連星じゃないよ)で実装されたDOMAttrModifiedや、DOMNodeInsertedをGreasemonkeyスクリプト内で使用していたのだが、これらのMutation eventsが非推奨となってしまったらしい。 じゃあ何を使ったらいいの?ということで、Mutation ObserversというAPIが提供されているらしい。 Mutation Observersの利用方法をまとめてみた。

    非推奨になった Mutation events を Mutation Observers に置き換えよう
  • イベントハンドラの this と event.target, +α - hogehoge @teramako

    [JavaScript]for 内でイベントリスナとか登録するときにやっちゃいがちな間違い. とその対処法を3つほど. | TM Life 対応その2: event.targetを使う と 対応その4 : this を使う について 上記サイトで書いてあることが間違っているというわけじゃないんだけど、少し補足したい。 event.target その Event オブジェクトには発火元となった要素を target プロパティとして保持しています. 合っています。 が、on* や addEventListener した要素と target は必ずしも一致しない点には注意した方が良いと思います。 <ul id="list"> <li>foo <b>hoge</b></li> <li>bar <b>hoge</b></li> </ul> var list = document.getElement

    イベントハンドラの this と event.target, +α - hogehoge @teramako
  • 最近のDOMの取得について整理してみた

    自分は普段からJavascriptを書く機会が多いのですが、Webサイト構築ではDOMを扱うことがほとんどです。 最近はjQueryなどのライブラリを利用する方が多いのではないでしょうか。 今回はDOMを取得する際のパフォーマンスに着眼して、今一度整理してみたいと思います。 とりあえずテストしてみた JSPerfで要素を取得するメソッドをそれぞれ追加しました。 basic DOM selector test | JSPerf そして、自分の所持している PC , SP の各ブラウザからRUNボタンをポチポチ押します。 テスト項目 テスト項目は以下の通りです。 ピュアなJSでの取得とjQueryでの取得を選択しています。 getElementById getElementsByTagName getElementsByClassName querySelector querySelector

    最近のDOMの取得について整理してみた
  • 動的に追加されるDOM要素に対応する方法あれこれ - Qiita

    Chrome拡張を作っていると,最近のモダンなWebサイトが後から動的にDOM要素を追加してきて困ることがある.毎度対処方法をぐぐっているので,ここにまとめておく. 追加される要素にイベントハンドラを付加したい jQueryのonメソッドにselectorを渡すことで,あとから動的に追加された子要素に対してもイベントを発火することができる. liveメソッドでも同様のことが出来たが,1.7で廃止された. 要素が追加されたことそのものを検出する DOMNodeInserted: 非推奨 要素が追加されたときに発火するDOMNodeInsertedというイベントが存在する.少し前に試した時はモダンなブラウザでは動いた. DOMに要素が挿入される度にイベントを起こすDOMNodeInsertedの扱い方 - 三等兵 にあるように,処理をブロックしないように非同期処理を行うべきだろう. 現在,DO

    動的に追加されるDOM要素に対応する方法あれこれ - Qiita
    pipehead
    pipehead 2013/03/25
    MutationObserver, webkitAnimationStart
  • NodeListを配列に変換するのにArray.applyを使うのはどうか - rikubaのブログ

    NodeListやHTMLCollectionを配列(Array)に変換する方法の一つに、Array.prototype.sliceを使う方法がある。 var array = Array.prototype.slice.call(document.getElementsByTagName('A')); でも、最近の実装であればArray.applyもその用途に使える。 var array = Array.apply(null, document.getElementsByTagName('A')); ES3ではFunction.prototype.applyの第二引数には配列(Array)かargumentsしか取れなかったけど、ES5でその制限が緩和され、NodeListなどの array like オブジェクトも渡せるようになった。 なお、IE8以下ではどちらの方法でもエラーになるので

    NodeListを配列に変換するのにArray.applyを使うのはどうか - rikubaのブログ
    pipehead
    pipehead 2013/03/22
    > argumentsの配列化にArray.applyは使えない。argumentsは要素が単一の数値だけになる可能性があり、その場合意図しない結果になる。
  • Shadow DOM 301  |  Articles  |  web.dev

    This article discusses more of the amazing things you can do with Shadow DOM! It builds on the concepts discussed in Shadow DOM 101 and Shadow DOM 201. Using multiple shadow roots If you're hosting a party, it gets stuffy if everyone is crammed into the same room. You want the option of distributing groups of people across multiple rooms. Elements hosting Shadow DOM can do this too, that is to say

    Shadow DOM 301  |  Articles  |  web.dev
  • Learn web development  |  web.dev

    Web Platform Dive into the web platform, at your pace.

    Learn web development  |  web.dev
  • Learn web development  |  web.dev

    Web Platform Dive into the web platform, at your pace.

    Learn web development  |  web.dev
  • エデンの園でおきたこと - steps to phantasien

    有給を駆使し一足早くクリスマス休暇に突入、ヒャッホイ Ingress やるぜーと 意気込んでいた矢先ノロウイルスにやられダウンした。かなしい。鎮まれ俺の胃袋・・・ そんな腹痛日和の気晴らしとして今日は Garbage Collection Advent Calendar に参加してみることにしました。 Advent Calendar 初体験につきよくわかってないけど勝手に参加していいんですよね? GC というとジェネレーショナルだのパラレルコンカレントだのといった話が目立ちがちだけれど、 現実の問題というかブラウザを相手にするとそれ以外の細々とした面倒が目につく。 GC つき言語 (JavaScript) のコードと C++ で書かれたコードとの連携は最たる面倒の1つ。 たとえば WebKit の DOM は C++ で実装されており、 C++ のオブジェクトは JavaScript 処理

  • 1分でわかるreturn false; preventDefault(); stopPropagation() の違い

    クリックイベントのサンプル .innerを子、.outerを親にしてそれぞれにクリックイベントのサンプルを作成した。リンクをクリックするとalertの".inner", ".outer"が表示されてからiwb.jpに遷移する。 $(".inner").click(function(){ alert(".inner"); }); $(".outer").click(function(){ alert(".outer"); }); alertの".inner", ".outer"が表示されてからiwb.jpに遷移するサンプル preventDefault()を使用するとリンクの遷移などのイベントを無効にできる。 $(".inner").click(function(e){ e.preventDefault(); alert(".inner"); }); $(".outer").click(fu

    1分でわかるreturn false; preventDefault(); stopPropagation() の違い
  • 俗人プログラマ : DOM:JavaScriptからHTMLを操作する

    2012/1/94:13 DOM:JavaScriptからHTMLを操作する 前回まで、JavaScriptによってウィンドウ(タブ)を生成し、そこに文字を直接書き込むことによりHTMLを作成していた。 この方法では、仮に一度作成したHTMLの途中に要素をはさもうとした場合、一度documentオブジェクトをclose()した後open()しなおし、再度新しいHTMLを一から書き直さなければならない。 例えば、<body>要素に<div>要素を追加する。というような形でHTMLを操作で きないだろうか。 まぁ、こんな書き方をするくらいだからできるのである。 DOM -Document Object Model- HTMLは元々文字に過ぎないが、ブラウザは文字を元に内部でデータをオブジェクト化する。 これによりHTMLは一連の文字列ではなく、各要素のツリー状の集合のようにあつかうことができる

    俗人プログラマ : DOM:JavaScriptからHTMLを操作する
    pipehead
    pipehead 2012/01/09
    document.head
  • [javascript][jQuery] jQueryでマウスの右クリック、左クリックを判断する答えを知りたい | 答えを知りたい

    jQuery を使って 「クリックされた時に左なら要素を消して、右なら何もしない。」 という動作をさせようと思ったら日語だと検索してもすぐに答えが出てこなかったので、また stackoverflow から解説を紹介します。 実際のコードがこちら。 $('#element').mousedown(function(event) { switch (event.which) { case 1: alert('Left mouse button pressed'); break; case 2: alert('Middle mouse button pressed'); break; case 3: alert('Right mouse button pressed'); break; default: alert('You have a strange mouse'); } });

    pipehead
    pipehead 2012/01/07
    > mousedown の時に渡されるイベントを確認して場合わけすればよい
  • ふじこのプログラミング奮闘記 jQueryのバブリングと、「return false;」「e.stopPropagation();」「e.preventDefault();」について

    jQueryのバブリングと、「return false;」「e.stopPropagation();」「e.preventDefault();」についてTweet どうも(o´ω`o)ノ 今年もあと10週間ですねー。 今日はjQueryの、イベントのバブリングについてです。 バブリングの「バブル」は泡です。たぶん。 jQueryはHTMLで書かれた要素(DOM)を、以下のようにツリー形式で持っています。 そして、一番下のA要素をクリックすると、それが一番親のwindowまで伝わります。 これがイベントのバブリング(「伝達」とでも言うのかな)です。 クリックイベントは、例え自分がクリックされていなくても、子孫要素がクリックされれば発動します。 イベントは子供から順番に起きます。 よくAタグの「href="#"」を無効にするために、Aタグのクリックイベントの最後で 「return false;

  • DOMに要素が挿入される度にイベントを起こすDOMNodeInsertedの扱い方 - 三等兵

    DOMに要素が挿入されたときを検出できるのがDOMNodeInsertedイベント。 たとえばajaxで特定の場所が表示されたらDOMに要素が挿入されたときや、ページング系のアドオンやユーザースクリプトでスクロールバーが下にきたら要素が挿入されたときなど、そういったときにイベントを発生させることができます。 要素が挿入されたかどうか検出するには自前でDOMを監視するコードを書く必要がありますが、このイベントを使えば簡単ですね。IE以外の主要なブラウザには実装されています。 しかしこれどうも確認してみたら非推奨になってるらしいんだけど。 http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeInserted あれか。同期的だからかな。何もしらずに使うと面倒なことなりますからね。というかなりました。とはいえ、これに変わるものはない

    DOMに要素が挿入される度にイベントを起こすDOMNodeInsertedの扱い方 - 三等兵
    pipehead
    pipehead 2011/02/24
    > タイマーを使って、一定の間隔でイベントが発生するようにしています。無駄なものはタイマーの登録前にはじくので、それ以下の処理は実行されません。