Polymerチームが,“1.0版API提案”を含むPolymer 0.8アルファ版を公開した。ただしこのAPIには多くの変更点があるため,“0.5 APIとは非互換”である。今回のライブラリでは,サイズとパフォーマンスの面での最適化が実施されているが,Feature Completeにはまだ到達していない。
Polymer 0.8には,元々webcomponents.js
で提供されていた,独自のShadow DOMのPolyfill実装であるShady DOMが含まれている。その結果,従来より小さいwebcomponents-lite.js
のインポートが可能になった。Shady DOMは,“実行速度の面で最適化”されていると同時に,“複雑性やサイズ,パフォーマンス上のペナルティ,Shadow DOM Polyillの侵襲性”の回避を意図して開発されている。
要素の定義と登録に使用されていたpolymer-element
タグは,以下のスニペットで示すようなdom-module
に置き換えられている。
<dom-module id="hello-world">
<style>
div { color: red }
</style>
<template>
<div>Hello World!</div>
</template>
</dom-module>
<script>
Polymer({is: "hello-world"});
</script>
この例にもあるように,style定義がtemplate
の外部に移された。
Polymer 0.8では,プロパティオブザーバと計算プロパティの定義に,どちらもproperties
オブジェクトを使用する。properties
オブジェクトにリストされているかどうかに関わらず,すべてのプロパティはデータにバインド可能だ。もっとシンプルなデータバインディングシステムもある。生成されるプロパティアクセサを使用すれば,デバッグも簡単で,動作も高速だ。デフォルト値は,properties
オブジェクト内でvalue
キーと値,または単一の値を返す関数を使って定義する。
Polymer({
is: "my-component",
properties: {
observed: {
type: Number,
value: 100,
observer: 'observedChanged'
},
product: {
computed: 'multiply(x,y)'
}
}
});
非互換変更の一覧については,マイグレーションガイドを参照するとよい。0.5の要素はまだ実装されていない点には注意が必要だが,今後実施される予定だ。この0.5機能のサポートに関して,チームでは次のように述べている。
0.5への依存を理由に,基本的な項目が揃うまで0.8への移行を希望しないプロジェクトが多数あることは理解しています。移植がすべて完了するまで,PRの検討と統合を続けていくつもりです。一方で0.8には,新たなベースラインとしての意味もあります。今回の高性能,実用性といった考え方の中で,今後の開発を続けていく予定です。必要があれば,0.5のインクリメンタルリリースも,ブランチとして公開する準備があります。
開発チームのベンチマークによると,Polymer 0.8では,Chromeを含めた起動時間が4から8倍高速化されている。メモリ使用量も削減された。0.8の新機能に関する詳細なレビューについては,開発者ガイドで確認するとよい。
コンテントセキュリティポリシ,ジェスチャ,Shady DOMの改良,クロススコープスタイリング,テンプレート機能の拡張,データバインディングのデバッグツール,ベンチマークなど,多くの機能は未開発ないし開発途中で,Polymer 1.0を目標に作業が進められている。0.8はHTML要素の継承をサポートしているが,カスタム要素の拡張サポートは,“0.5で実施したパフォーマンスの最適化などと比較して,解決の難しい問題である”ことから,1.1まで延期された。