最近、実案件で実験していたのですが、仕様が固まってきたのでメモしておきます。 JavaScriptを特定のページで実行したいというニーズがあるけれど、head要素内に書くとか、body要素内に書くとか、そのページ限定でscript要素を使って読み込むとかいろんな方法があります。 ただ、コードが散らばると管理が面倒なので、一つのファイルにまとめたい派です。まとめれば、HTTPリクエストが減るし、キャッシュもされるし、何かと都合が良かったりします。 ひとつにまとめると、「そのページで実行するスクリプト」を一つのファイルから切り分けないといけなくなるので、ディスパッチャーが必要です。 @kyo_ago さんの「そこそこ規模が大きくても何とかなるjavascriptの設計(URL dispatcherの薦め) | tech.kayac.com - KAYAC engineers' blog」という
In JavaScript, every object is at the same time an instance and a class. To do inheritance, you can use any object instance as a prototype. In Python, C++, etc.. there are classes, and instances, as separate concepts. In order to do inheritance, you have to use the base class to create a new class, which can then be used to produce derived instances. Why did JavaScript go in this direction (protot
支給スクリプト(例. supplied_script.js)に手を加えることなくパラサイトしたい。 普通、自分で書いたスクリプト(my_script.js)の中に #include "supplied_script.js" を挿入したらいい。 my_script.jsを実行時にsupplied_script.jsも実行してくれる、関数ならそれを実行すればいい。 でも、同じような内容のスクリプトがバージョンごとに(sup4.js, sup5.js, sup6.js, sup7.js)なんてなっていると、この内容ならバージョン分岐してくれよという場合もあったりするわけですが(CS用は別格として)、支給品にそんなことをいっても仕方がないので、がんばってバージョン分岐させた自分のスクリプトの中でインクルードのバージョン分岐をしてみようと、何も考えずにswitch〜case 式、if 式などで s
選択したテキストオブジェクトや検索結果のテキストオブジェクトが何ページにある?はよく使うのですが、そのページの何行目?ってどうやるんだろうってことでテストしてみました。レポートをリスト出力するときとかみんなどうやってるんだろう? 色々考えてみて、 対象テキストの最初 LineObject の index と、その親 TextObject がもっている LinesObject(s) のそれぞれの index を比較していって、マッチしたところが何行目じゃないかと。(もっと簡単な方法ありますか?) 親を取得するのに parent を使うと連結テキストフレームの最初から数えた行数をだすので、代わりに parentTextFrames[0] を使うとテキストフレームごとになるとか、表組では親が CellObject になるので parent を使うとか、そんなこんなで割とすぐ出来たのでメモ。全
というJavaScriptのライブラリを作りました。 GitHub - monjudoh/ExDate: JavaScript Date class wrapper for using conbination with Date libraly which leads to prototype pollution. 何をするライブラリか ExDateというclassを定義しています。 やっていることは、インスタンスを作成すると同じコンストラクタ引数でDate objectを作成し、 内部に抱えて、Date objectのメソッドを呼ばれると処理を丸投げするだけです。 何が嬉しいのか Datejs(GitHub - datejs/Datejs: A JavaScript Date and Time Library)という大変使い勝手のいいライブラリがあるのですが、 Date,Date.pro
たとえば、数値「10.3」の小数点第一位を四捨五入すると「10」が得られます。しかし、「0.5」幅でフィットさせて「10.5」にしたい時にはどうしたらいいでしょうか? 算数チックに考えてみました。 ////////////////数値numを増減値fにフィットさせる。 function fit_num (num, f) { if ((isNaN(num)) || (isNaN(f))) {return num}//数値でないものはそのまま返す var isMinus = num < 0;//負の値かどうか num =Math.abs(num);//正の絶対値 f = Math.abs(f); if (num === 0) {return num}//numが0の時はそのまま返す if (f === 0) {return Math.round(num)}//fが0の時は単に整数に四捨五入する
InDesign で自動処理の途中で一度「復帰」してリセットした後に、なにか別な処理を継続的にしたいときに、今まではドキュメントのファイルパスを記憶して閉じて、そのファイルパスのドキュメントを開いて再開していた。さっきちらっとDOMヘルプで調べものしてたら、CS3 から revert() なんて便利なものが追加されてる……知らなかった。 ふつうにapp.documents[0].revert() などと使うと、確認のダイアログがでますのでUserInteractionLevel で出ないようにしておくといいかも。 revert()での復帰の処理はこんな感じ // //なんか処理 //ドキュメントをいじり倒す app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT; var rvt
think49 @think49 関数オブジェクトを代入した変数に null を代入しても、クロージャによる変数への参照は切れないらしい。 結論としては、参照を切る方法はない…のかな? http://ideone.com/gNwf8 #JavaScript 2010-10-11 17:58:35
2010年10月05日20:30 カテゴリLightweight Languages javascript - にも無限リストを 欲しいと思って書いてみたら案外さくっと出来たので。 Demo とりあえずこんな感じ。 var facts = new Array.Lazy([1,1],function(i){ return this[this.length-1] * i }); p( facts ); p( facts[10] ); p( facts.get(10) ); p( facts ); var fibs = new Array.Lazy([0,1],function(i){ return this[this.length-2] + this[this.length-1] }); p( fibs[10] ); p( fibs.take(10) ); var natural = new
などという煽り気味なタイトルをついつけてしまいたくなる記事がGoogleCodeBlogに掲載されていました。 最初のほうはごく普通にJavaScriptを使ったRIAアプリケーションはどうしても起動が遅くなるため、それをどう減らすか、というテーマにそって書かれています。 方法として挙げられているのは、最初にすべてを読み込まず、モジュール単位で分割して遅延ローディングすること。ただし、それだけだと回線速度が遅く不安定なモバイル環境では問題が生じるためHTML5のキャッシュ機能を利用するといいとのこと。 遅延ローディングのためのさまざまな手法の得失や、例えばユーザーデータを読み込むときには動的ロードしない、というようにユーザーの操作を妨害しないよう留意することなどについても述べられていてそれだけでもノウハウとして十分に有意義なのですが、決め手として最後に出てくる方法がすごいです。 その方法と
Is your JavaScript SLOW JavaScript? Amy Hoy氏およびThomas Fuchs氏がIs your JavaScript SLOW JavaScript?において、JavaScriptアプリケーションのパフォーマンスをチェックするためのチェックリスト [PDF]を公開している。印刷して利用できるように工夫されたチェックリストで、31のチェック項目がある。紹介されているチェック項目は次のとおり。 scriptタグは正しい位置に記述されているか DOM MonsterブックマークレットでDOMを分析しパフォーマンス問題を明かにする キャッシュヘッダを正しい状態にする 結合、インライン、事前キャッシュ ミニファイ、Gzip圧縮 Smush、CSS Script、Favicon フレームワークの確認 ラナウェイタイマの管理 DOMコード効率の最大化 ノードセレ
Selectors APIのDraftに、matchesSelectorというAPIが定義されていて、現在、WebKitとMinefieldのNightlyに搭載されている。 ただし、ドラフトなのでベンダープレフィックスがついていて、Element#webkitMatchesSelectorやElement#mozMatchesSelectorを使わなければいけない(というより、まだ直接使うには時期尚早だ)。 使い方は簡単。 var paragraphs = document.getElementsByTagName("p"); paragraphs.item(0).webkitMatchesSelector("p"); // true paragraphs.item(1).webkitMatchesSelector("div#main > p"); // <div id="main"><
昨日の続きです。 ブラウザで動作する JavaScript では、トップレベルオブジェクト(window)を省略できます。これにより、window.setTimeout や window.document と書くかわりに setTimeout や document と書いても動作します。 今日は、省略すると速くなるのか調べました。 window.userObject1 = 0; // プリミティブ型 window.userObject2 = []; // Array window.userObject3 = {}; // Hash // window.xxx でアクセス function job1(n) { for(var i = 0; i < n; ++i) { ++window.userObject1; window.userObject2.push(i); window.userOb
以前からある手法から順番に見ていきます。 ページの高さの監視 setIntervalでページの高さを監視して、増えていたらAutoPagerizeが動いたとみなして処理を行う var THRESHOLD = 300; var _height = window.innerHeight; setInterval(function(){ if (window.innerHeight - _height > THRESHOLD) { // 処理 } _height = window.innerHeight; }, 300); メリット AutoPagerizeだけでなく、はてなダイアリー・ブックマーク、Twitterなどでのサイト側でのページの継ぎ足しにも対応できる デメリット THRESHOLDをいくつにするかなど、一概に決められない。タイマーをたくさん回すと重くなる。Floatしている要素を継
JavaScript の勉強を開始したときに「文字列の連結には Array.join() を使え」といった記事を見た覚えがあります(ソース失念したけど、 Operaの技術文書だった気がする ⇒ IE の技術文書だったかも)。 一年ほど信じてて、念のためベンチとってみたら「うそやーん」でした。ってお話。 ベンチの条件は、 3種類の文字列連結方法を試す 1. + Operator 2. String.concat() 3. Array.join("") 文字列の要素数を 11個 と 55個で試す <!doctype html><html><head><title></title> </head><body> <script> window.onload = function() { var now = +new Date, lp = 100; while (lp--) { job(); } d
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く