2

サポートされていないブラウザ用の jQuery へのフォールバックで Zepto を使用することは、モバイル デバイスの JS サイズを数キロバイト削減する優れた方法です。ただし、現在の「推奨」条件付き負荷テストは次のとおりです。

<script>document.write('<script src=' + ('__proto__' in {} ? 'zepto' : 'jquery') + '.js <\/script>')</script>

Zepto と jQuery のどちらをロードするかを決定する方法としては、かなり信頼性が低くなります。サポートされていないブラウザー (古いモバイル ブラウザーを含む) の多くは、このテストに合格しますが、Zepto の実行に問題があります。

ブラウザの大部分を正確にカバーする、より信頼性の高い方法 (デバイス/ブラウザ スニッフィングではなく機能検出を使用することが望ましい) はありますか? 偽陰性 (つまり、Zepto が実際には機能するにもかかわらず、Zepto の代わりに jQuery がロードされている場合) は、偽陽性よりも確実に優れています。

4

1 に答える 1

0

それはトリッキーな質問です。ホワイトリストは、Zepto が使用するすべての特別な機能を知っている場合にのみ機能します。Array.prototype.forEachdocument.getElementsByClassName、などのスニファを追加できwindow.JSONますが、欠陥の原因と思われるもの、または欠陥の原因と思われるものをコード全体で検索する必要があります。Opera Mobile などの一部のサポートされていないブラウザは合格する可能性がありますが、これらのブラウザは、公式にサポートされているリストに含まれていなくても、おそらく実際には動作します。

最も信頼できる方法は、Zeptoをロードして、あとがきチェックがwindow.Zepto存在するかどうかを確認し、そのようなものが機能するかどうかを確認することです$('#test')。そうでない場合は、jQuery をロードします。もちろん、これは狂気でしょう。

しかし、私はあなたに質問をさせてください. モバイル ブラウザが Zepto をサポートしていない場合は、古いブラウザまたは堅牢性の低いブラウザを使用している可能性があります (例外として IE9 は例外です)。jQuery のような大規模で複雑なライブラリをロードしようとすると、ユーザー エクスペリエンスがさらに低下すると想定するのは合理的ではないでしょうか? ロード時間はひどいでしょう。アニメーションをしている場合、再描画速度は耐えられないでしょう。

より良いアプローチは、可能な限りプログレッシブ エンハンスメントの原則に基づいて設計することです。JavaScript なしで動作する Web サイトを構築し、Zepto がサポートされている場合はそれを使用して洗練させます。それが不可能な場合は、これらのブラウザーがますます一般的ではなくなってきており、実際にはユーザーのごく一部を表している可能性があることを考慮してください。私たちはこれらのブラウザーを少なくとも 2 年間使い続けていますが、IE6 よりもはるかに短い時間です。

于 2012-07-12T20:50:44.837 に答える