javascript

Promiseで逐次実行する時のテスト

var Promise = require('es6-promise').Promise; var tasks = { first: function(value) { return new Promise(function(resolve, reject) { if (value < 2) { resolve(value + 1); } else { reject(new Error('failed at first')); } }); }, second: functi…

Ampersand.js所感

ちょっと前に紹介されてたAmpersand.jsを使ってみたので、ざっくりとした紹介。 Ampersand.jsはView, Model, Routerなど複数のモジュールに分割されていて、個別に読み込んで使うことができる。 $ npm i --save ampersand-model で var AmpModel = require('…

SPA(Single Page Application)制作時のチェックリスト

メモリリークは起きていないか 初期化時に無駄な通信はないか ページ移動時に保持するデータと破棄するデータの分別ができているか 読まれたくないロジックを置いてないか 直接叩かれて困るAPIやルーティングはないか バリデーションの項目はサーバー側と揃…

semverとnpm

semverとは? semver(Semantic Versioning)は依存関係のもつれを解決するべく制定されたバージョニングの標準仕様です。 Semantic Versioning 2.0.0 npmに登録されているモジュールのバージョンもsemverに沿った形式で設定されています。 The semantic versi…

フロントエンドのビルドツール、Grunt以外の選択肢

フロントエンドのビルドツールというとGruntが デファクトスタンダードになっている感ありますが、 それ以外の選択肢って何があるかなという話です。 Gulp Gulpはストリーミング式のビルドツールです。 設定はgulpfileに記述します。 gulp = require 'gulp' …

Marionette.jsについてあれこれ

Marionette.jsはBackbone.jsのラッパー的なライブラリです。 Backbone.jsの問題点 Backbone.jsは割と自由度が高いフレームワークなのですが、 それ故に中規模以上のプロジェクトで使おうとすると 設計が難しい(ベストプラクティスがわからずオレオレ実装に…

最近の○○.jsをざっくりまとめてみた

一口に○○.jsと言っても、単純にクライアント側で読み込むライブラリではないものが増えてきています。 有名なものをいくつかまとめてみました。 Node.js JavaScriptの実行環境です。実行にはGoogleのV8エンジンが使われています。 主にサーバーサイドの実装…

NodeListのイテレーション比較

document.querySelectorAllなどで取得するNodeListはArrayのインスタンスではないため forEachやmapといったメソッドを持っていません。そのためループで展開したいときは普通にfor文使うとか、 Array.prototype.forEachをcallで呼び出すとか ライブラリの関…

CanvasをRetinaディスプレイに対応させる

imgタグやCSSのbackgroundに設定した画像の場合、2倍サイズの画像を用意してやればいいのですが、 Canvasは例えば2倍サイズの画像をdrawImage()で縮めて貼付けてもRetinaディスプレイ上ではボケボケです。 canvas.widthとcanvas.style.widthは別物 canvas.wi…

シングルトンにするやつ

CoffeeScriptっぽい実装のクラスを、シングルトンパターンにする