最新ブラウザAPI - パート1
15707 ワード
現代のブラウザーは、開発者がよりよく実行することができるアプリケーションを構築し、オフラインで動作し、より良いユーザー体験を提供することができるAPIの一握りを作成しています.今日、我々はWebアプリケーション開発のために使用できる現代的なブラウザの5つのAPIをチェックし、多くの作品やトラブルから自分自身を保存します. ウィンドウ.リクエストアニメーションフレーム リソースプリフェッチ リソースプリロード ナビゲータ.センダビコン 交差点オブザーバ
ウィンドウ.リクエストアニメーションフレーム ブラウザには、パフォーマンスを最適化する機能があります 無効なブラウザのタブの実行を停止します settimeout/setintervalより正確です デモ:
リソースプリフェッチ
リソースプリフェッチは、ユーザーがアクセスする前に、ブラウザやページやリソースをダウンロードするよう指示するためのテクニックです.このテクニックは、ユーザーが最も訪問しそうなページに使用することができます.ブラウザはダウンロードし、低優先度でバックグラウンドでリソースをキャッシュするので、それはより重要なリソースを妨げることはありません.
リソースプリロード
リソースプリロードはリソースプリフェッチに似ていますが、違いは、プリフェッチはブラウザに次のナビゲーションとプリローディングでアクセスされる可能性があるリソースをダウンロードするリソースをダウンロードする方法です.構文は似ていますが、リソース型を
ナビゲータ.センダビコン
時々、訪問者がページを去るとき、サーバーにデータを送る必要があるかもしれません.ユーザーがページを離れると、JavaScriptはイベントと呼ばれるイベントを発生させる
私たちは
交差点オブザーバ
ビューポート内に要素が見えるかどうかを調べるためにコードを書きませんでした開発者を見つけるのは難しいです.
通常、関数を作成し、
ウィンドウ.リクエストアニメーションフレーム
Window.requestAnimationFrame()
APIは、毎秒約60以上の表示フレームの変更/更新を毎回関数を呼び出すために使用することができます.このメソッドを使用すると、スムーズなアニメーションを作成するか、ポーリング機能を作成できます.requestAnimationFrame
次の利点があります.function animate() {
// your code goes here
//the will be called repeatedly by requestAnimationFrame
requestAnimationFrame(animate);
}
// Intial call to the function
animate();
また、アニメーションを停止することができますwindow.cancelAnimationFrame
メソッド:window.cancelAnimationFrame(animate);
HTML要素を待機するポーリング関数requestAnimationFrame
:const waitForElement = function (elem) {
if (typeof elem === 'string') {
return new Promise(function (resolve) {
var wfelem = function () {
if (null != document.querySelector(elem)) {
resolve(document.querySelector(elem));
} else {
window.requestAnimationFrame(wfelem);
}
};
wfelem();
});
}
};
// You can use the function in following way:
waitForElement('body').then(function(body){
body.style.background = 'red';
});
リソースプリフェッチ
リソースプリフェッチは、ユーザーがアクセスする前に、ブラウザやページやリソースをダウンロードするよう指示するためのテクニックです.このテクニックは、ユーザーが最も訪問しそうなページに使用することができます.ブラウザはダウンロードし、低優先度でバックグラウンドでリソースをキャッシュするので、それはより重要なリソースを妨げることはありません.
<link rel="prefetch" href="/your-resource-link" />
リソースプリロード
リソースプリロードはリソースプリフェッチに似ていますが、違いは、プリフェッチはブラウザに次のナビゲーションとプリローディングでアクセスされる可能性があるリソースをダウンロードするリソースをダウンロードする方法です.構文は似ていますが、リソース型を
as
属性.<link rel="preload" href="/images/background.jpg" as="image" />
ナビゲータ.センダビコン
時々、訪問者がページを去るとき、サーバーにデータを送る必要があるかもしれません.ユーザーがページを離れると、JavaScriptはイベントと呼ばれるイベントを発生させる
unload
そして、このイベント中にAJAXリクエストを送信するのは簡単なことではありません.私たちは
XMLHttpRequest
インunload
ハンドラ.しかし、要求が完了するまで、ブラウザは次のページを読み込むのを妨げます.window.addEventListener("unload", function() {
var xhr = new XMLHttpRequest();
xhr.open("POST", "/log", false); // third parameter of `false` means synchronous
xhr.send(data);
});
でもNavigator.sendBeacon()
その問題を解決するためにここにある.Ajaxを通してデータを送る必要があるが、応答を期待しないとき、このメソッドは役に立ちます.そして、リクエストがアイドル処理時間の間、データを送る機会を得るときに、非同期に実行される.Navigator.sendBeacon()
つのパラメータがあります:最初の1つのURLと2番目のデータです.この関数はtrue
データがサーバーに正常に送信された場合の応答false
を返します.window.addEventListener("unload", function() {
if (navigator.sendBeacon) {
// Send the beacon
var status = navigator.sendBeacon(url, data);
// Log the result
console.log(status);
}
};
交差点オブザーバ
ビューポート内に要素が見えるかどうかを調べるためにコードを書きませんでした開発者を見つけるのは難しいです.
通常、関数を作成し、
scroll
イベントとターゲット要素が画面にポップアップかどうかを確認します.jQueryで次のスニペットをチェックします$(window).scroll(function() {
var top_of_element = $("#element").offset().top;
var bottom_of_element = $("#element").offset().top + $("#element").outerHeight();
var bottom_of_screen = $(window).scrollTop() + $(window).innerHeight();
var top_of_screen = $(window).scrollTop();
if ((bottom_of_screen > top_of_element) && (top_of_screen < bottom_of_element)){
// the element is visible, do something
} else {
// the element is not visible, do something else
}
});
ホロウ!計算の多くは、私は覚えていることがないことが起こっている.しかし、我々は今持っているIntersectionObserver()
これらのすべてのトラブルから私たちを救うことができる方法.const observer = new IntersectionObserver(function(elements) {
console.log(elements);
});
observer.observe(document.querySelectorAll('p'));
最初の引数IntersectionObserver
はHTML要素の配列を取ることができる関数です.オプションの引数をとる第2のオプション引数があります.const observer = new IntersectionObserver(function(elements) {
elements.forEach(function(element) {
if (element.intersectionRatio >= 0.5 && element.intersectionRatio < 1) {
element.style.opacity = "0.5";
} else if (element.intersectionRatio >= 1) {
element.style.opacity = "1";
}
});
}, {
// You can use a single value
threshold: 0.5 // The observer's callback will be once the target element is 50% visible
// Or you can use an array of value
threshold: [0.5, 1.0] // The callback will run when target element is 50% and 100% visible
});
observer.observe(document.querySelectorAll('p'));
Reference
この問題について(最新ブラウザAPI - パート1), 我々は、より多くの情報をここで見つけました https://dev.to/meghsohor/modern-browser-apis-part-1-3noaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol