どちらもWeb開発サークルで使用されているようです。たとえば、HTML5クロスブラウザポリフィルを参照してください。
ここでは、すべてのシム、フォールバック、およびポリフィルを収集しています...
または、es5-shimプロジェクトがあります。
私の現在のプロジェクトでは、これらの数を使用しています。それらをすべて同じディレクトリに貼り付けたいです。だから、私はこのディレクトリを何と呼ぶべきですか--- shims
、またはpolyfills
?
どちらもWeb開発サークルで使用されているようです。たとえば、HTML5クロスブラウザポリフィルを参照してください。
ここでは、すべてのシム、フォールバック、およびポリフィルを収集しています...
または、es5-shimプロジェクトがあります。
私の現在のプロジェクトでは、これらの数を使用しています。それらをすべて同じディレクトリに貼り付けたいです。だから、私はこのディレクトリを何と呼ぶべきですか--- shims
、またはpolyfills
?
回答:
シム
アダプターパターンに精通している場合は、シムとは何かを知っています。ShimsはAPI呼び出しをインターセプトし、呼び出し元とターゲットの間に抽象レイヤーを作成します。通常、シムは下位互換性のために使用されます。たとえば、es5-shim npmパッケージでは、ECMAScript 5(ES5)構文を記述でき、ブラウザーがES5を実行しているかどうかを気にする必要はありません。テイクDate.nowを例として。これはES5の新しい関数で、ES3の構文はnew Date()。getTime()になります。あなたが使用している場合はES5-シムを次のように書くことができDate.nowを、あなたが実行しているブラウザがサポートES5でそれだけで実行されます。ただし、ブラウザがES3エンジンを実行している場合、es5-shimはDate.nowへの呼び出しをインターセプトします代わりに単に新しいDate()。getTime()を返します。この遮断はシミングと呼ばれます。es5-shimからの関連するソースコードは次のようになります。
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
ポリフィル
ポリフィリングは実際にはシミングの特別なバージョンです。ポリフィルは欠落している機能をAPIに実装することですが、シムは欠落している機能の実装が機能の修正ほど重要であるとは限りません。これらは非常に曖昧に思われますが、shimがより広い用語として使用されている場合、polyfillは、古いブラウザーに下位互換性を提供するshimを説明するために使用されます。したがって、シムは古い罪を隠すために使用されますが、ポリフィルは将来の機能強化を元に戻すために使用されます。 例として、IE7でのsessionStorageのサポートはありませんが、sessionstorage npmパッケージのポリフィルは、ウィンドウのnameプロパティにデータを格納するなどの手法を使用するか、Cookieを使用することにより、IE7(およびそれ以前)でこの機能を追加します。
MyShim.Date.now();
います。間違っている場合は修正してください。
私が理解していることから:
ポリフィルは、特定の「予期された」APIがないかどうかを検出し、それを手動で実装するコードです。例えば
if (!Function.prototype.bind) { Function.prototype.bind = ...; }
シムは、既存のAPI呼び出しをインターセプトし、さまざまな動作を実装するコードです。ここでの考え方は、さまざまな環境で特定のAPIを正規化することです。したがって、2つのブラウザが同じAPIを異なる方法で実装している場合、それらのブラウザの1つでAPI呼び出しをインターセプトし、その動作を他のブラウザに合わせることができます。または、ブラウザのAPIの1つにバグがある場合、そのAPIへの呼び出しを再度インターセプトして、バグを回避することができます。
Axel Rauschmayer氏の著書、Speaking JavaScriptから引用:
- シムは、古い環境に新しいAPIをもたらすライブラリであり、その環境の手段のみを使用します。
- ポリフィルは、ブラウザAPIのシムです。通常、ブラウザがAPIをサポートしているかどうかをチェックします。そうでない場合、ポリフィルは独自の実装をインストールします。これにより、どちらの場合でもAPIを使用できます。ポリフィルという用語は、住宅改修製品に由来します。レミーシャープによると:
ポリフィラは、米国ではSpackling Pasteとして知られる英国の製品です。それを念頭に置いて、ブラウザを亀裂のある壁と考えてください。これらの[ポリフィル]は、亀裂を滑らかにし、ブラウザをスムーズに操作できるようにします。
これについてよく説明している数年前からこれについて書かれた素晴らしい記事:
この記事では、(2)は単にそのように対比されています。
Shim:JavaScript
機能を修正するために追加できる(つまり)コードの一部ですが、ほとんどの場合、独自のAPIを備えています。
ポリフィル:ドロップインできるもの(つまりJavaScript
)であり、サポートされていない既存のブラウザAPIを模倣するように静かに動作します。
shim.gif
)言及していると述べています。彼は言葉がこのように使用されることを非常に強く要求しておらず、「私に」と言うことにより、彼は自分の使用法が普遍的ではないことを暗黙のうちに認めています。