どちらもWeb開発サークルで使用されているようです。たとえば、HTML5 CrossBrowserPolyfillsを参照してください。
ここでは、すべてのシム、フォールバック、およびポリフィルを収集しています...
または、es5-shimプロジェクトがあります。
私の現在のプロジェクトでは、これらの多くを使用しており、それらすべてを同じディレクトリに貼り付けたいと思います。それで、私はこのディレクトリを何と呼ぶべきですか--- shims
、またはpolyfills
?
どちらもWeb開発サークルで使用されているようです。たとえば、HTML5 CrossBrowserPolyfillsを参照してください。
ここでは、すべてのシム、フォールバック、およびポリフィルを収集しています...
または、es5-shimプロジェクトがあります。
私の現在のプロジェクトでは、これらの多くを使用しており、それらすべてを同じディレクトリに貼り付けたいと思います。それで、私はこのディレクトリを何と呼ぶべきですか--- shims
、またはpolyfills
?
シムは、API呼び出しのインターセプトを実行し、抽象化レイヤーを提供するコードの一部です。必ずしもWebアプリケーションやHTML5/CSS3に限定されるわけではありません。
ポリフィルは、通常JavascriptまたはFlashを使用する最新のHTML5/CSS3機能を備えたレガシーブラウザを改良する一種のシムです。
shims
特定の質問に答えて、ディレクトリを汎用的に保ちたい場合は、ディレクトリを呼び出します。
シム
アダプターパターンに精通している場合は、シムが何であるかを知っています。シムはAPI呼び出しをインターセプトし、呼び出し元とターゲットの間に抽象レイヤーを作成します。通常、下位互換性のためにシムが使用されます。たとえば、es5-shim npmパッケージを使用すると、ECMAScript 5(ES5)構文を記述でき、ブラウザーがES5を実行しているかどうかは関係ありません。例としてDate.nowを取り上げます。これはES5の新しい関数であり、ES3の構文はnew Date()。getTime()になります。es5-shimを使用する場合は、Date.nowと記述できます。実行しているブラウザーが、ES5をサポートしている場合は、実行されます。ただし、ブラウザがES3エンジンを実行している場合、es5-shimはDate.nowへの呼び出しをインターセプトします。代わりにnewDate()。getTime()を返します。この傍受はシミングと呼ばれます。es5-shimの関連するソースコードは次のようになります。
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
ポリフィル
ポリフィリングは、実際にはシミングの特殊なバージョンにすぎません。ポリフィルはAPIに不足している機能を実装することですが、シムは必ずしも機能を修正することほど不足している機能を実装することではありません。これらは非常にあいまいに見えることは知っていますが、シムがより広い用語として使用されている場合、ポリフィルは、古いブラウザーに下位互換性を提供するシムを表すために使用されます。したがって、シムは古い罪を隠すために使用されますが、ポリフィルは将来の強化を時間に戻すために使用されます。例として、IE7ではsessionStorageはサポートされていませんが、 sessionstorage npmパッケージ のpolyfillは、ウィンドウのnameプロパティにデータを格納する、またはCookieを使用するなどの手法を使用して、IE7(およびそれ以前)にこの機能を追加します。
私が理解していることから:
ポリフィルは、特定の「予期される」APIが欠落しているかどうかを検出し、手動で実装するコードです。例えば
if (!Function.prototype.bind) { Function.prototype.bind = ...; }
シムは、既存のAPI呼び出しをインターセプトし、さまざまな動作を実装するコードです。ここでの考え方は、さまざまな環境で特定のAPIを正規化することです。したがって、2つのブラウザーが同じAPIを異なる方法で実装する場合、それらのブラウザーの1つでAPI呼び出しをインターセプトし、その動作を他のブラウザーと一致させることができます。または、ブラウザのAPIの1つにバグがある場合は、そのAPIへの呼び出しを再度インターセプトして、バグを回避することができます。
彼の著書SpeakingJavaScriptからAxelRauschmayerを引用:
- シムは、その環境の手段のみを使用して、古い環境に新しいAPIをもたらすライブラリです。
- ポリフィルは、ブラウザーAPIのシムです。通常、ブラウザがAPIをサポートしているかどうかを確認します。そうでない場合、polyfillは独自の実装をインストールします。これにより、どちらの場合でもAPIを使用できます。ポリフィルという用語は、リノベーション製品に由来します。レミーシャープによると:
Polyfillaは、米国ではSpacklingPasteとして知られている英国の製品です。そのことを念頭に置いて、ブラウザをひびの入った壁と考えてください。これらの[ポリフィル]は、ひび割れを滑らかにし、操作するブラウザーの壁を滑らかにするのに役立ちます。
これについてよく説明している数年前から書かれた素晴らしい記事:
この記事では、(2)は単純に次のように対比されています。
シム:一部の機能を修正するために追加できる(つまりJavaScript
)コードの一部ですが、ほとんどの場合、独自のAPIがあります。
ポリフィル:ドロップインできるもの(つまり)で、他の方法ではサポートされていない既存のブラウザーAPIJavaScript
を模倣するためにサイレントに機能します。
Polyfillは、ブラウザに特定のAPIが存在するかどうかを確認するスクリプトです。APIがブラウザに存在しない場合、polyfill(単純なスクリプト)は次のように動作します。
たとえば、ブラウザでBluetooth APIを使用しますが、一部のブラウザにはそのようなAPIがないことがわかっているので、APIの存在を確認するために次のように記述します。
if(!navigator.bluetooth) { // write polyfill here }
Shimもスクリプトであり、主にプラグインまたはライブラリとして提供され、どのように機能しますか?
実際には、既存のAPIをオーバーライドし、古いブラウザで新しいAPIをサポートするために異なる動作を実装します。シムは主に下位互換性のために使用されることに注意してください。