web-dev-qa-db-ja.com

シムとポリフィルの違いは何ですか?

どちらもウェブ開発サークルで使用されているようです。 HTML5クロスブラウザーポリフィル

そこで、ここではすべてのシム、フォールバック、ポリフィルを収集しています...

または、 es5-shim プロジェクトがあります。

私の現在のプロジェクトでは、これらの多くを使用しています。それらをすべて同じディレクトリに貼り付けたいと思います。それで、このディレクトリを何と呼ぶべきか---shims、またはpolyfills

364
Domenic
  • shimは、API呼び出しのインターセプトを実行し、抽象化のレイヤーを提供する任意のコードです。 WebアプリケーションまたはHTML5/CSS3に必ずしも限定されるわけではありません。

  • polyfillは、タイプのshimであり、通常はJavaScriptまたはFlashを使用する最新のHTML5/CSS3機能を備えたレガシーブラウザーを改良します。

特定の質問に答えて、ディレクトリを汎用にしたい場合は、ディレクトリをshimsと呼びます。

329
Arsalan Ahmed

シム

アダプタパターンに精通している場合は、シムとは何かを知っています。 ShimsはAPI呼び出しをインターセプトし、呼び出し元とターゲットの間に抽象レイヤーを作成します。通常、後方互換性のためにシムが使用されます。たとえば、es5-shimnpmパッケージを使用すると、ECMAScript 5(ES5)構文を記述でき、ブラウザーがES5を実行しているかどうかは気にしません。 Date.nowを例にとります。これは、ES3の構文がnew Date()。getTime()になるES5の新しい関数です。 es5-shimを使用する場合、Date.nowと記述できます。実行しているブラウザがES5をサポートしている場合は、ES5が実行されます。ただし、ブラウザがES3エンジンを実行している場合es5-shimは、Date.now代わりにnew Date()。getTime()を返すだけです。この傍受はシミングと呼ばれます。 es5-shimの関連するソースコードは次のようになります。

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

ポリフィル

ポリフィリングは、実際にはシミングの特殊バージョンです。ポリフィルはAPIで欠落している機能を実装することに関するものですが、シムは必ずしも機能を修正することほど欠落している機能を実装することではありません。これらは漠然としているように見えますが、シムがより広義の用語として使用される場合、ポリフィルは古いブラウザに後方互換性を提供するシムを記述するために使用されます。 つまり、古い罪をカバーするためにシムが使用されますが、ポリフィルは将来の拡張機能を戻すために使用されます。例として、IE7ではsessionStorageのサポートはありませんが、sessionstoragenpmパッケージは、ウィンドウのnameプロパティにデータを保存するなどの手法を使用するか、Cookieを使用して、IE7(およびそれ以前)にこの機能を追加します。

198
Kjetil Klaussen

私が理解していることから:

ポリフィルは、特定の「予想される」APIが欠落しているかどうかを検出し、それを手動で実装するコードです。例えば。

if (!Function.prototype.bind) { Function.prototype.bind = ...; }

シムは、既存のAPI呼び出しをインターセプトし、さまざまな動作を実装するコードです。ここでの考え方は、さまざまな環境で特定のAPIを正規化することです。そのため、2つのブラウザーが同じAPIを異なる方法で実装している場合、これらのブラウザーの1つでAPI呼び出しをインターセプトし、その動作を他のブラウザーに合わせることができます。または、ブラウザのAPIの1つにバグがある場合、そのAPIの呼び出しを再度インターセプトして、バグを回避できます。

95
Šime Vidas

引用 Axel Rauschmayer 彼の本から JavaScriptを話す

  • シムは、古いAPIを古い環境にもたらし、その環境の手段のみを使用するライブラリです。
  • ポリフィルは、ブラウザAPIのシムです。通常、ブラウザがAPIをサポートしているかどうかを確認します。そうでない場合、ポリフィルは独自の実装をインストールします。これにより、どちらの場合でもAPIを使用できます。ポリフィルという用語は、ホームセンター製品に由来します。 Remy Sharp

    Polyfillaは、米国ではSpackling Pasteとして知られる英国製品です。それを念頭に置いて、ブラウザをクラックのある壁と考えてください。これらの[ポリフィル]は、クラックを滑らかにし、操作するブラウザのすてきな滑らかな壁を提供します。

63
Bergi

シム。シムは、古いAPIを古い環境にもたらし、その環境の手段のみを使用するライブラリです。

ポリフィル。 2010年10月、Remy Sharpは「ポリフィル」という用語についてブログを書きました[Rick Waldron経由]:

ポリフィルは、開発者であるブラウザがネイティブに提供することを期待する技術を提供するコード(またはプラグイン)です。必要に応じて、APIランドスケープを平坦化します。

9
Sagittarius

これについて数年前から書かれた素晴らしい記事で、これをよく説明しています。

ポリフィルとは?

記事では、(2)は単にそのように対比されています:

Shim:いくつかの機能を修正するコード(つまりJavaScript)を追加できますが、ほとんどの場合は独自のAPI

Polyfill:ドロップできるもの(つまりJavaScript)を模倣すると静かに動作します既存のブラウザーAPIはサポートされていません。

6
atconway