surfnperf 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0c65e50b4eeb919e418862f9841b3f3ed7e6dd80
4
- data.tar.gz: 6e81022eac756e5eac332ebd2ed73a939f8d5488
3
+ metadata.gz: 3e499ab1d6b9b7d29973f1e10d460d421321cfb9
4
+ data.tar.gz: 1fcf4b9dd3948674360a60ec588978dafd2b227a
5
5
  SHA512:
6
- metadata.gz: 2c411bcec8cf7ac6d148d0addb2074612ffac622078e9d0ba09cc363e1fabaa73dd80b74a99cea64c7e301abe86510b0167dc144b4b8e1143a1f107a40574062
7
- data.tar.gz: 4f847eb324ef4a10c62a6c25d7bd3ebc8a30ea4083b34af78324f6126953677b0fd4725fd16836f03c46c8d128bb834e748ef4dd399351e7e402e8c587b4ab34
6
+ metadata.gz: 5cde83613540a1fefe3e35aa643468fd7b49e5097c32aaa1494b15b84a4e3955865452ab67237feb7254e572b546425f78f80b4355f80dfcb74733e362600756
7
+ data.tar.gz: f5a81ee7bd8296abd6968fd9f2f3306c6e3d761c76aa5fb1bf7330fd013b78deea3f798bf8a8e3de2713b1554e6a7120f189fa8bb5761976519b88bf10c76e8e
data/README.md CHANGED
@@ -49,11 +49,26 @@ There are 2 pieces of code that need to be included in your webpage:
49
49
  }
50
50
  };
51
51
 
52
+ SURF_N_PERF.setFirstPaint = function() {
53
+ SURF_N_PERF.marks.firstPaintFrame = (new Date()).getTime();
54
+
55
+ if(window.performance && window.performance.now) {
56
+ SURF_N_PERF.highResMarks.firstPaintFrame = window.performance.now();
57
+
58
+ if(window.performance.mark) {
59
+ window.performance.mark('firstPaintFrame');
60
+ }
61
+ }
62
+ };
63
+
52
64
  if(window.addEventListener) {
53
65
  window.addEventListener('load', SURF_N_PERF.setPageLoad, false);
54
66
  } else {
55
67
  window.attachEvent('onload', SURF_N_PERF.setPageLoad);
56
68
  }
69
+ if (window.requestAnimationFrame) {
70
+ window.requestAnimationFrame(SURF_N_PERF.setFirstPaint);
71
+ }
57
72
  </script>
58
73
  ```
59
74
 
@@ -62,6 +77,7 @@ That provides support for the following:
62
77
  - "pageStart" marks for browsers that support [High Resolution Time](http://www.w3.org/TR/hr-time/) and/or [User Timing](http://www.w3.org/TR/user-timing/) so that "pageStart" can be used as a consistent starting point for duration calculations across all browsers regardless of their supported features
63
78
  - A "loadEventEnd" mark for browsers that do not support [Navigation Timing](http://www.w3.org/TR/navigation-timing/) which can be used to compute durations from when the load event of the document is completed ([loadEventEnd](http://www.w3.org/TR/navigation-timing/#dom-performancetiming-loadend))
64
79
  - A "loadEventEnd" [DOMHighResTimeStamp](http://www.w3.org/TR/hr-time/#sec-DOMHighResTimeStamp) mark for calculating high resolution durations between a Navigation Timing mark and a user mark in browsers that support [High Resolution Time](http://www.w3.org/TR/hr-time/) but don't support [User Timing](http://www.w3.org/TR/user-timing/)
80
+ - A "firstPaintFrame" mark (available in the best possible format for the browser, either a [User Timing Mark](http://www.w3.org/TR/user-timing/#performancemark), [DOMHighResTimeStamp](http://www.w3.org/TR/hr-time/#sec-DOMHighResTimeStamp), or [DOMTimeStamp](https://developer.mozilla.org/en-US/docs/Web/API/DOMTimeStamp)) that approximates the Time To First Paint in browsers that [support `window.requestAnimationFrame`](http://caniuse.com/#feat=requestanimationframe).
65
81
 
66
82
  **2.** Then just drop the [surfnperf.min.js](https://github.com/Comcast/Surf-N-Perf/blob/master/surfnperf.min.js) in your codebase and reference that JavaScript file in your HTML document. If you're using [RequireJS](http://requirejs.org/) or [Browserify](http://browserify.org/), it registers itself as 'surfnperf'.
67
83
 
@@ -23,9 +23,26 @@
23
23
  }
24
24
  };
25
25
 
26
+ SURF_N_PERF.setFirstPaint = function() {
27
+ SURF_N_PERF.marks.firstPaintFrame = (new Date()).getTime();
28
+
29
+ if(window.performance && window.performance.now) {
30
+ SURF_N_PERF.highResMarks.firstPaintFrame = window.performance.now();
31
+
32
+ if(window.performance.mark) {
33
+ window.performance.mark('firstPaintFrame');
34
+ }
35
+ }
36
+ };
37
+
26
38
  if(window.addEventListener) {
27
39
  window.addEventListener('load', SURF_N_PERF.setPageLoad, false);
28
40
  } else {
29
41
  window.attachEvent('onload', SURF_N_PERF.setPageLoad);
30
42
  }
43
+
44
+ if (window.requestAnimationFrame) {
45
+ window.requestAnimationFrame(SURF_N_PERF.setFirstPaint);
46
+ }
47
+
31
48
  </script>
@@ -356,6 +356,52 @@
356
356
  return this.duration('navigationStart', 'loadEventEnd');
357
357
  };
358
358
 
359
+ /**
360
+ * Time to first paint (browser-reported time for the first pixels to be rendered on the page)
361
+ *
362
+ * @returns {integer} time in ms
363
+ * @memberOf SurfNPerf
364
+ */
365
+ SNPProto.getFirstPaint = function(options) {
366
+ if(this.chromeLoadTimes()) {
367
+ return this._roundedDuration(this.getTimingMark('navigationStart', 'DOM'), this.chromeLoadTimes().firstPaintTime * 1000, options);
368
+ } else if(this.msFirstPaint()) {
369
+ return this._roundedDuration(this.getTimingMark('navigationStart', 'DOM'), this.msFirstPaint(), options);
370
+ } else {
371
+ return null;
372
+ }
373
+ };
374
+
375
+ /**
376
+ * Time to first paint (Time calculated based on window.requestAnimationFrame() for the first pixels to be rendered on the page)
377
+ *
378
+ * @returns {integer} time in ms
379
+ * @memberOf SurfNPerf
380
+ */
381
+ SNPProto.getFirstPaintFrame = function(options) {
382
+ if(window.requestAnimationFrame) {
383
+ return this.duration('navigationStart', 'firstPaintFrame', options);
384
+ } else {
385
+ return null;
386
+ }
387
+ };
388
+
389
+ SNPProto.chromeLoadTimes = function() {
390
+ if(window.chrome && window.chrome.loadTimes) {
391
+ return window.chrome.loadTimes();
392
+ } else {
393
+ return undefined;
394
+ }
395
+ };
396
+
397
+ SNPProto.msFirstPaint = function() {
398
+ if(window.performance && window.performance.timing && window.performance.timing.msFirstPaint) {
399
+ return window.performance.timing.msFirstPaint;
400
+ } else {
401
+ return undefined;
402
+ }
403
+ };
404
+
359
405
  return new SurfNPerf();
360
406
 
361
407
  }));
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: surfnperf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Riviello
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-13 00:00:00.000000000 Z
11
+ date: 2015-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler