タグ

JavaScriptとalgorithmに関するrc-2のブックマーク (8)

  • JSDeferred 紹介

    JSDeferred について JSDeferred は JavaScript のコールバックによる非同期処理を直列的に書けるようにするために作られたライブラリです。 foofunc(function () { barfunc(function () { bazfunc(function () { }); }); }); foofunc().next(barfunc).next(bazfunc); 簡単な使いかた 読み込み まずは JSDeferred を使うために、HTML に script 要素を追加します。 <script type="text/javascript" src="jsdeferred.js"></script> <script type="text/javascript" src="my.js"></script> JSDeferred は外部ライブラリに依存しておら

  • 第4回 JSDeferredを使いJSアプリのパフォーマンスを最適化する | gihyo.jp

    前回まででJSDeferredの基的な使いかたを説明しました。 今回は「非同期処理を簡単にする」から一歩進んで、既存アプリケーションの「非同期処理でパフォーマンス改善する」ことや、その他応用できる部分について説明します。 UIスレッド JavaScriptが担当するアプリケーションユーザインターフェイスの「はやさ」とはなんでしょうか? 単純に、最速で処理が終わることというのも一つですが、それを含めて最も重要なのは、ユーザにストレスを与えないことでしょう。多少実行速度が遅くても大抵待っていられますが、インターフェイスがなんの反応もしないと大きなストレスになります。 JavaScriptを実行するブラウザには、UIスレッドを呼ばれる、システム入出力を処理する流れがあります。JavaScriptは、その性質上どうしてもUIスレッド上で動かす必要があります(JavaScriptを実行中にページの

    第4回 JSDeferredを使いJSアプリのパフォーマンスを最適化する | gihyo.jp
  • for 文を setTimeout に変換する(継続風) - llameradaの日記

    for 文を setTimeout に変換する - IT戦記が楽しそうだったので、久しぶりにJavaScriptを書いてみた。 継続風に書くと、通常のforループとsetTimeout付きforループが同じようになります。 JavaScriptも楽しいなぁ。また、書きたい。 // 通常版 forloop(0, 3, 1)(function(i, cont){ forloop(0, 7 ,1)(function(j, cont){ console.log('a' + i + "-" + j); cont(); }, cont); }, function(){}); // timeout版 to_forloop(0, 3, 1)(function(i, cont){ to_forloop(0, 7 ,1)(function(j, cont){ console.log('a' + i + "-"

    for 文を setTimeout に変換する(継続風) - llameradaの日記
  • for 文を setTimeout に変換する - IT戦記

    for 文で 100 項目とか 1000 項目とかあるテストケースを処理するとブラウザが固まる。 こんなダイアログが表示されます。 ということで for 文を setTimeout や setInterval に変換する事で定期的にブラウザに処理を戻すことができる。 // ここでは console.log のところでログを取ってますが // 通常は処理が入ります。 for (var i = 0; i < 3; i ++) { console.log('a' + i); } /* * 結果 * a0 * a1 * a2 */ これをまず while 文に変換 var i = 0; while (true) { if (!(i < 3)) break; console.log('a' + i); i ++; } /* * 結果 * a0 * a1 * a2 */ で、 setTimeout に

    for 文を setTimeout に変換する - IT戦記
  • [JavaScript] Nクイーン問題(ノンプリエンプティブマルチタスク風)

    有名な Nクイーン問題を解く JavaScript です。 アルゴリズムは、単純なバックトラックのみです。 ブラウザの動作をロックせずに、 処理状況をアニメーション表示させている点がミソです。 ノンプリエンプティブマルチタスク風に定期的に処理をブラウザ側に返すようにクラスを組むことで、 複数の処理を並列動作させる習作です。 盤の大きさ(デフォルトは8マス=8クイーン問題)を入力して、[開始] ボタンを押して下さい。 盤の大きさ: マス 0 個の解を検出しました。 [開始] ボタンを押して下さい。 アルゴリズム 深さ優先で、単純なバックトラックのみを使用しています。 また、再帰呼び出しもせずに、ぐるぐるループしています。 とりあえずなので、解の回転/反転すら使っていません。 試してませんが、JavaScript でビットマックを作ってマッチングさせると遅くなりそうですね。 上下反転くらいなら

  • javascript - でデータを圧縮/伸張する : 404 Blog Not Found

    2009年03月02日09:00 カテゴリLightweight Languages javascript - でデータを圧縮/伸張する これでもまだ税率が高かったので。 404 Blog Not Found:javascript - Yet Another Base64 transcoder Base64の利点は、なんといっても「固定税率」、それも比較的「税率が低い」ことにあります。Paddingなしなら、3バイトが4バイトにencodeされるので、33%ということになります。これに対してencodeURIComponentの税率は、UTF-8基準で最高で3倍、UTF-16基準で最高で4.5倍にも達します。 ついに負の税率、すなわち税還付を実現しました! まずはデモを。 Inflated + Base64-Decoded (Original): chars / bytes Deflate

    javascript - でデータを圧縮/伸張する : 404 Blog Not Found
  • はてなブックマークのコンテンツの JavaScript を高速化する - IT戦記

    はじめに 「新はてなブックマーク」になったということで、とっても便利になったのですが、ブックマーク一覧ページ*1が若干 JavaScript に時間が掛かっているみたいです。 というわけで 調査してみたいと思います。調査して、改善できそうなところは後で纏めて「はてなアイデア」にでも登録しようと思います。 この日記は調査しながら、過程を書いていくつもりです。 準備 まずは、人のサイトの JavaScript を書き換えて試してみるための環境を作ります。 作業用ディレクトリを作る とりあえず、ホームに HatenaJS というディレクトリを作ります。 $ mkdir HatenaJS $ cd HatenaJS CocProxy をダウンロードしてくる 以下から CocProxy というツールをダウンロードしてきます。 http://coderepos.org/share/wiki/CocPr

    はてなブックマークのコンテンツの JavaScript を高速化する - IT戦記
  • 最速インターフェース研究会 :: JavaScriptのデザインパターン - Singleton

    JavaScriptじゃねえと書けねえよ、ってやり方でデザインパターンを実装してみるコーナー。とはいってもデザインパターンとか良くわからないので適当に覚えながら作る。 間違ってる箇所あったらつっこんでくれるとありがたいです。 わかりやすい文章を書く能力が欠如してるのでデザインパターンって何だとかそういうのはこっち参照。 http://d.hatena.ne.jp/naoya/20050813/1123924312 JavaScriptのコンストラクタはPerl同様自在に定義できます。returnでobjectを返してやれば、newの結果としてそいつを使います。 普通にシングルトンなクラスを実装するにはこんな感じだと思います。 function Singleton(){ var self = arguments.callee; if(self.instance == null){ this.

  • 1