123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- Object.defineProperty(exports, '__esModule', { value: true });
- const bindReporter = require('./lib/bindReporter.js');
- const getActivationStart = require('./lib/getActivationStart.js');
- const getVisibilityWatcher = require('./lib/getVisibilityWatcher.js');
- const initMetric = require('./lib/initMetric.js');
- const observe = require('./lib/observe.js');
- const onHidden = require('./lib/onHidden.js');
- /*
- * Copyright 2020 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- const reportedMetricIDs = {};
- /**
- * Calculates the [LCP](https://web.dev/lcp/) value for the current page and
- * calls the `callback` function once the value is ready (along with the
- * relevant `largest-contentful-paint` performance entry used to determine the
- * value). The reported value is a `DOMHighResTimeStamp`.
- */
- const onLCP = (onReport) => {
- const visibilityWatcher = getVisibilityWatcher.getVisibilityWatcher();
- const metric = initMetric.initMetric('LCP');
- let report;
- const handleEntries = (entries) => {
- const lastEntry = entries[entries.length - 1] ;
- if (lastEntry) {
- // The startTime attribute returns the value of the renderTime if it is
- // not 0, and the value of the loadTime otherwise. The activationStart
- // reference is used because LCP should be relative to page activation
- // rather than navigation start if the page was prerendered.
- const value = Math.max(lastEntry.startTime - getActivationStart.getActivationStart(), 0);
- // Only report if the page wasn't hidden prior to LCP.
- if (value < visibilityWatcher.firstHiddenTime) {
- metric.value = value;
- metric.entries = [lastEntry];
- report();
- }
- }
- };
- const po = observe.observe('largest-contentful-paint', handleEntries);
- if (po) {
- report = bindReporter.bindReporter(onReport, metric);
- const stopListening = () => {
- if (!reportedMetricIDs[metric.id]) {
- handleEntries(po.takeRecords() );
- po.disconnect();
- reportedMetricIDs[metric.id] = true;
- report(true);
- }
- };
- // Stop listening after input. Note: while scrolling is an input that
- // stop LCP observation, it's unreliable since it can be programmatically
- // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75
- ['keydown', 'click'].forEach(type => {
- addEventListener(type, stopListening, { once: true, capture: true });
- });
- onHidden.onHidden(stopListening, true);
- return stopListening;
- }
- return;
- };
- exports.onLCP = onLCP;
- //# sourceMappingURL=getLCP.js.map
|