1. Урок 1. 00:02:07
    1 - About this Course
  2. Урок 2. 00:03:25
    2 - What are Progressive Web Apps
  3. Урок 3. 00:06:08
    4 - PWAs vs Native Mobile Apps
  4. Урок 4. 00:06:25
    6 - A Demo PWA What Well Build in this Course
  5. Урок 5. 00:06:29
    7 - Our First Progressive Web App
  6. Урок 6. 00:03:20
    8 - PWA Core Building Blocks
  7. Урок 7. 00:03:18
    9 - Comparing PWAs and SPAs
  8. Урок 8. 00:03:24
    10 - What is Progressive Enhancement
  9. Урок 9. 00:04:25
    11 - Course Outline
  10. Урок 10. 00:06:11
    12 - Course Project Setup
  11. Урок 11. 00:02:12
    13 - How to get the Most out of this Course
  12. Урок 12. 00:01:03
    14 - Module Introduction
  13. Урок 13. 00:01:37
    15 - Using an App Manifest to Make your App Installable
  14. Урок 14. 00:03:41
    16 - Adding the Manifest
  15. Урок 15. 00:09:44
    17 - Understanding App Manifest Properties
  16. Урок 16. 00:09:45
    18 - Adding Properties to the App Manifest
  17. Урок 17. 00:02:17
    19 - PWAs and Browser Support
  18. Урок 18. 00:01:36
    20 - Using the Chrome Developer Tools
  19. Урок 19. 00:04:38
    21 - Simulating the Web App on an Emulator
  20. Урок 20. 00:02:31
    23 - Installing the Web App Prerequisites
  21. Урок 21. 00:05:51
    24 - Adding Properties for Safari
  22. Урок 22. 00:02:31
    25 - Adding Properties for the Internet Explorer
  23. Урок 23. 00:00:29
    26 - Wrap Up
  24. Урок 24. 00:00:42
    28 - Module Introduction
  25. Урок 25. 00:04:42
    29 - Why Service Workers Are Amazing
  26. Урок 26. 00:06:20
    30 - Understanding Service Worker Events
  27. Урок 27. 00:05:21
    31 - The Service Worker Lifecycle
  28. Урок 28. 00:01:25
    32 - Service Worker Browser Support
  29. Урок 29. 00:09:27
    33 - Registering a Service Worker
  30. Урок 30. 00:05:40
    34 - Reacting to Incoming Events in SW
  31. Урок 31. 00:03:01
    35 - Updating Activating Service Workers
  32. Урок 32. 00:04:51
    36 - NonLifecycle Events
  33. Урок 33. 00:02:41
    38 - Getting that App Install Banner
  34. Урок 34. 00:03:43
    40 - Testing the App on Real Device and Installing the App
  35. Урок 35. 00:06:44
    41 - Deferring the App Install Banner
  36. Урок 36. 00:01:21
    42 - Wrap Up
  37. Урок 37. 00:00:50
    45 - Module Introduction
  38. Урок 38. 00:03:55
    46 - Async Code in JavaScript
  39. Урок 39. 00:04:41
    47 - Promises Basics
  40. Урок 40. 00:04:06
    48 - Rejecting Promises
  41. Урок 41. 00:02:27
    49 - Where we Use Promises in our Project
  42. Урок 42. 00:06:12
    50 - Fetch Basics
  43. Урок 43. 00:04:24
    51 - Sending Post Requests via Fetch
  44. Урок 44. 00:03:13
    52 - Fetch and CORS
  45. Урок 45. 00:03:05
    53 - Comparing Fetch and Ajax
  46. Урок 46. 00:03:30
    54 - Adding Polyfills for Legacy Browser Support
  47. Урок 47. 00:02:06
    55 - Fetch Service Workers
  48. Урок 48. 00:08:04
    56 - OPTIONAL Assignment Solution
  49. Урок 49. 00:00:57
    57 - Wrap Up
  50. Урок 50. 00:00:45
    59 - Module Introduction
  51. Урок 51. 00:03:07
    60 - Why Caching
  52. Урок 52. 00:04:01
    61 - Understanding the Cache API
  53. Урок 53. 00:01:50
    62 - Browser Support
  54. Урок 54. 00:02:54
    63 - Adjusting the Course Project
  55. Урок 55. 00:03:08
    64 - Identifying PreCacheable Items
  56. Урок 56. 00:11:06
    65 - Static Caching Precaching
  57. Урок 57. 00:04:56
    66 - Retrieving Items from the Cache
  58. Урок 58. 00:03:07
    67 - Adding Retrieving Multiple Files to from Cache
  59. Урок 59. 00:09:11
    68 - Cache Multiple Files with addAll
  60. Урок 60. 00:01:55
    69 - Dynamic Caching The Basics
  61. Урок 61. 00:07:20
    70 - Implementing Dynamic Caching
  62. Урок 62. 00:02:14
    71 - Handling Errors
  63. Урок 63. 00:06:57
    72 - Adding Cache Versioning
  64. Урок 64. 00:06:38
    73 - Different Cache Versions Cleanup
  65. Урок 65. 00:02:43
    74 - Optimizing Cache Management
  66. Урок 66. 00:21:52
    75 - OPTIONAL Assignment Solution
  67. Урок 67. 00:00:36
    76 - Wrap Up
  68. Урок 68. 00:01:13
    78 - Module Introduction
  69. Урок 69. 00:04:05
    79 - Module Preparation Adding a Button
  70. Урок 70. 00:06:52
    80 - Offering Cache on Demand
  71. Урок 71. 00:06:22
    81 - Providing an Offline Fallback Page
  72. Урок 72. 00:01:44
    82 - Strategy Cache with Network Fallback
  73. Урок 73. 00:03:07
    83 - Strategy Cache Only
  74. Урок 74. 00:01:58
    84 - Strategy Network Only
  75. Урок 75. 00:06:22
    85 - Strategy Network with Cache Fallback
  76. Урок 76. 00:09:06
    86 - Strategy Cache then Network
  77. Урок 77. 00:05:12
    87 - Cache then Network Dynamic Caching
  78. Урок 78. 00:06:00
    88 - Cache then Network with Offline Support
  79. Урок 79. 00:03:10
    89 - Cache Strategies Routing
  80. Урок 80. 00:05:47
    90 - Applying Cache Only
  81. Урок 81. 00:25:53
    91 - OPTIONAL Assignment Solution
  82. Урок 82. 00:02:41
    92 - A Better Way Of Parsing Static Cache URLs
  83. Урок 83. 00:02:59
    94 - A Better Way Of Serving Fallback Files
  84. Урок 84. 00:03:19
    95 - Post Request and Cache API
  85. Урок 85. 00:06:08
    96 - Cleaning Trimming the Cache
  86. Урок 86. 00:03:50
    97 - Getting Rid of a Service Worker
  87. Урок 87. 00:00:30
    98 - Preparing the Project for the Next Steps
  88. Урок 88. 00:00:58
    99 - Wrap Up
  89. Урок 89. 00:01:02
    101 - Module Introduction
  90. Урок 90. 00:01:13
    102 - Understanding the Basics
  91. Урок 91. 00:07:20
    104 - Setting Up Firebase
  92. Урок 92. 00:08:32
    105 - Connecting Frontend to Backend
  93. Урок 93. 00:04:52
    106 - Dynamic Caching vs Caching Dynamic Content
  94. Урок 94. 00:03:35
    107 - Introducing IndexedDB
  95. Урок 95. 00:00:39
    108 - IndexedDB Browser Support
  96. Урок 96. 00:02:32
    109 - Adding the IDB File
  97. Урок 97. 00:13:12
    110 - Storing Fetched Posts in IndexedDB
  98. Урок 98. 00:03:57
    111 - Using IndexedDB in the Service Worker
  99. Урок 99. 00:06:41
    112 - Reading Data from IDB
  100. Урок 100. 00:03:41
    113 - Clearing IDB Handling ServerClient Mismatch
  101. Урок 101. 00:03:59
    114 - Implementing the Clear Database Method
  102. Урок 102. 00:04:06
    115 - Deleting Single Items from the Database
  103. Урок 103. 00:01:34
    116 - IndexedDB and Caching Strategies
  104. Урок 104. 00:00:46
    117 - Wrap Up
  105. Урок 105. 00:01:20
    119 - Module Introduction
  106. Урок 106. 00:02:52
    120 - Responsive Design in this Course
  107. Урок 107. 00:03:31
    121 - Understanding Responsive Design in our Project
  108. Урок 108. 00:09:47
    122 - CSS and Media Queries
  109. Урок 109. 00:08:53
    124 - Using Images in a Responsive Way
  110. Урок 110. 00:08:31
    125 - Adding Animations
  111. Урок 111. 00:01:47
    126 - The Viewport Scaling
  112. Урок 112. 00:00:47
    127 - Wrap Up
  113. Урок 113. 00:01:05
    129 - Module Introduction
  114. Урок 114. 00:03:35
    130 - How does Background Sync Work
  115. Урок 115. 00:04:05
    131 - Adding the Basic Setup to our Project
  116. Урок 116. 00:04:38
    132 - Registering a Synchronization Task
  117. Урок 117. 00:06:01
    133 - Storing our Post in IndexedDB
  118. Урок 118. 00:04:13
    134 - Adding a Fallback
  119. Урок 119. 00:15:53
    135 - Syncing Data in the Service Worker
  120. Урок 120. 00:02:17
    136 - Understanding Periodic Sync
  121. Урок 121. 00:15:12
    138 - Adding Server Side Code
  122. Урок 122. 00:05:22
    139 - Fixing Errors
  123. Урок 123. 00:00:50
    140 - Wrap Up
  124. Урок 124. 00:01:05
    142 - Module Introduction
  125. Урок 125. 00:01:57
    143 - Why we need Web Push Notifications
  126. Урок 126. 00:09:05
    144 - How Push Notifications Work
  127. Урок 127. 00:01:53
    145 - Displaying Notifications Some Theory First
  128. Урок 128. 00:02:03
    146 - Browser Support
  129. Урок 129. 00:08:08
    147 - Requesting Permissions
  130. Урок 130. 00:03:39
    148 - Displaying Notifications
  131. Урок 131. 00:03:34
    149 - Notifications from Within the Service Worker
  132. Урок 132. 00:08:50
    150 - Understanding Notifications Options
  133. Урок 133. 00:02:59
    151 - Advanced Options
  134. Урок 134. 00:02:24
    152 - Adding Actions to Notifications
  135. Урок 135. 00:05:22
    153 - Reacting to Notification Interaction Clicks
  136. Урок 136. 00:02:38
    154 - Reacting to Notification Interaction Closing
  137. Урок 137. 00:06:37
    155 - From Notifications to Push Messages
  138. Урок 138. 00:04:33
    156 - Creating a Push Subscription
  139. Урок 139. 00:10:52
    157 - Storing Subscriptions
  140. Урок 140. 00:01:46
    158 - Connecting Server Client PWA
  141. Урок 141. 00:09:56
    159 - Sending Push Messages from the Server
  142. Урок 142. 00:07:40
    160 - Listening to Push Messages
  143. Урок 143. 00:02:04
    161 - Displaying Push Notifications on a Real Device
  144. Урок 144. 00:05:46
    162 - Opening a Page upon User Interaction
  145. Урок 145. 00:04:29
    163 - Improving our Code
  146. Урок 146. 00:01:17
    164 - Wrap Up
  147. Урок 147. 00:00:57
    166 - Module Introduction
  148. Урок 148. 00:07:30
    167 - Preparing the Project
  149. Урок 149. 00:04:36
    168 - Getting DOM Access
  150. Урок 150. 00:08:05
    169 - Creating our own Polyfills
  151. Урок 151. 00:07:26
    170 - Getting the Video Image
  152. Урок 152. 00:06:26
    171 - Hooking Up the Capture Button
  153. Урок 153. 00:08:41
    172 - Storing the Image on a Server
  154. Урок 154. 00:14:37
    173 - Accepting File Upload Example with Firebase
  155. Урок 155. 00:04:52
    175 - Testing the Camera Upload
  156. Урок 156. 00:02:31
    176 - Implementing a Fallback
  157. Урок 157. 00:16:39
    177 - Getting the User Position
  158. Урок 158. 00:08:47
    178 - Fixing Bugs
  159. Урок 159. 00:01:45
    179 - Testing the App on a Real Device
  160. Урок 160. 00:00:48
    180 - Wrap Up
  161. Урок 161. 00:01:02
    182 - Module Introduction
  162. Урок 162. 00:00:56
    183 - Understanding the Basics
  163. Урок 163. 00:06:57
    185 - Installing Workbox Using It
  164. Урок 164. 00:05:03
    186 - Configuring Workbox Precaching
  165. Урок 165. 00:04:46
    187 - Customizing the Service Worker
  166. Урок 166. 00:06:42
    188 - Implementing Routing with the Workbox Router
  167. Урок 167. 00:03:32
    189 - Expanding Dynamic Caching
  168. Урок 168. 00:06:10
    190 - Options and Setting Up Strategies
  169. Урок 169. 00:03:47
    191 - Custom Handlers Example For IndexedDB
  170. Урок 170. 00:06:48
    192 - Providing an Offline HTML Fallback
  171. Урок 171. 00:03:27
    193 - Handling Background Synchronisation and Push Notifications
  172. Урок 172. 00:05:18
    194 - Understanding the Workbox Documentation
  173. Урок 173. 00:06:31
    195 - Enhancing the Build Workflow
  174. Урок 174. 00:03:57
    196 - Running our App on a Real Server
  175. Урок 175. 00:04:25
    197 - Auditing our Webpage with Lighthouse
  176. Урок 176. 00:01:12
    198 - Wrap Up
  177. Урок 177. 00:01:19
    200 - Module Introduction
  178. Урок 178. 00:09:30
    201 - React with createreactapp
  179. Урок 179. 00:01:29
    202 - A General Note about SPAs and PWAs
  180. Урок 180. 00:14:40
    203 - Angular with the CLI
  181. Урок 181. 00:06:50
    204 - Vue with Vue CLI
  182. Урок 182. 00:01:01
    205 - Wrap Up
  183. Урок 183. 00:00:56
    207 - Course Roundup