首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Web性能优化之Worker线程(上).md

任何与「创建」共享工作者线程的脚本「同源」的脚本,都可以向共享工作者线程发送消息或从中接收消息 服务工作线程Service Worker:主要用途是「拦截」、「重定向」和「修改页面发出的请求」,充当「网络请求...WorkerGlobalScope 在网页上,window 对象可以向运行在其中的脚本「暴露各种全局变量」。...工作线程和父上下文间」传输信息,以及「捕获」专用工作线程发出的事件。...,也包括「全局变量」。...---- 共享工作线程Shared Workers 从行为上讲,共享工作线程可以看作是专用工作线程的一个「扩展」。线程创建、线程选项、安全限制和 importScripts()的行为都是相同的。

1.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Workbox5+Webpack4构建离线应用

    上图从深入理解浏览器缓存处参考 http缓存依赖于服务端配置,memory cache和disk cache缓存内容不可控,而且只缓存一些静态资源,push cache是临时缓存,localstorage...引入方式 有两种方式可以引入workbox: 第一种最为方便,就是通过importScripts()方法从谷歌官方CDN中引入。...通过以下四个步骤,我们能将webpack引入到一个由webpack构建的应用中并实现缓存。...console.log("注册sw") register(`/${swDest}`, { ready(registration) { // 此方法是我们项目中自己封装的创建自定义事件的公共方法...,需要在src目录下创建一个sw.js(命名自定义,但需要和webpack配置中一致),在这个文件中我们可以进行预缓存等操作。

    1.4K10

    Web Worker 初探

    它的作用就是给JS创造多线程运行环境,允许主线程创建worker线程,分配任务给后者,主线程运行的同时worker线程也在运行,相互不干扰,在worker线程运行结束后把结果返回给主线程。...,worker线程无法读取本地文件,它所加载的脚本必须来自网络,且需要与主线程的脚本同源 DOM操作限制 worker线程在与主线程的window不同的另一个全局上下文中运行,其中无法读取主线程所在网页的...脚本限制 worker线程不能执行alert、confirm,但可以使用 XMLHttpRequest 对象发出ajax请求。...worker线程中加载脚本的api: importScripts('script1.js') // 加载单个脚本 importScripts('script1.js', 'script2.js')...使用教程 JavaScript 工作原理之七-Web Workers 分类及 5 个使用场景 Web Worker在项目中的妙用 怎么在 ES6+Webpack 下使用 Web Worker

    1.1K40

    性能优化篇---Webpack构建代码质量压缩

    , //是否删除代码中所有的console语句,默认为不删除,开启后,会删除所有的console语句 drop_console...collapse_vars: true, // 提取出现多次但是没有定义成变量去引用的静态值 reduce_vars:true...;但是它依赖于ES6静态花模块语法import\export的导入和导出 webpack接入 修改.babelrc保留ES6模块话语句 注意新版本babel-preset-env已经预设babel-preset-es2015...,babel推荐使用babel-preset-env取代babel-preset-es2015,并且继续使用babel-preset-es2015会发出警告信息。...接入好处: 代码体积减少 代码在运行时因为创建的函数作用域更少了,内存开销也随之变小 webpack接入ModuleConcatenationPlugin内置插件 const ModuleConcatPlugin

    1.1K00

    Webpack 原理系列九:Tree-Shaking 实现原理

    ,若变量没有被其它模块使用则删除对应的导出语句 标记功能需要配置 optimization.usedExports = true 开启 也就是说,标记的效果就是删除没有被其它模块使用的导出语句,比如:...示例中,bar.js 模块(左二)导出了两个变量:bar 与 foo,其中 foo 没有被其它模块用到,所以经过标记后,构建产物(右一)中 foo 变量对应的导出语句就被删除了。...方法生成代码 在 apply 方法内,读取 ModuleGraph 中存储的 exportsInfo 信息,判断哪些导出值被使用,哪些未被使用 对已经被使用及未被使用的导出值,分别创建对应的 HarmonyExportInitFragment...3.3 禁止 Babel 转译模块导入导出语句 Babel 是一个非常流行的 JavaScript 代码转换器,它能够将高版本的 JS 代码等价转译为兼容性更佳的低版本代码,使得前端开发者能够使用最新的语言特性开发出兼容旧版本浏览器的代码...Webpack 无法对转译后的模块导入导出内容做静态分析,示例: 示例使用 babel-loader 处理 *.js 文件,并设置 Babel 配置项 modules = 'commonjs',将模块化方案从

    2.5K11

    CommonJS与ES6 Module的本质区别

    /calculator.js'; ES6 Module的导入、导出语句都是声明式的,它不支持导入的路径是一个表达式,并且导入、导出语句必须位于模块的顶层作用域(比如不能放在if语句中)。...中的count是对calculator.js中count的一份值拷贝,因此在调用add函数时,虽然更改了原本calculator.js中count的值,但是并不会对index.js中导入时创建的副本造成影响...ES6 Module中导入的变量其实是对原有值的动态映射。...但实际情况往往是A依赖于B,B依赖于C,C依赖于D,最后绕了一大圈,D又依赖于A。当中间模块太多时就很难发现A和B之间存在着隐式的循环依赖。 因此,如何处理循环依赖是开发者必须要面对的问题。.../foo.js'; 执行结果如下: value of foo: undefined value of bar: This is bar.js 很遗憾,在bar.js中同样无法得到foo.js正确的导出值

    41110

    探索 模块打包 exports和require 与 export和import 的用法和区别

    ;第二种写法则是先进行变量声明,然后再用同一个export语句导出。.../api/module/es6_export.js'   ES6 Module的导入、导出语句都是声明式,它不支持导入的路径是一个表达式,并且导入、导出语句必须位于模块的顶层作用域(比如不能放在if语句中...中count的值,但是并不会对PageModule.vue中导入时创建的副本造成影响。...3.3  循环依赖    循环依赖是指模块A依赖于B, 同时模块B依赖于模块A。...但实际情况往往是A依赖于B,B依赖于C,C依赖于D,最后绕了一圈,D又依赖于A。当中间模块太多时就很难发现A和B之间存在着隐式的循环依赖。   因此,如何处理循环依赖是开发者必须要面对的问题。

    1.9K10

    Webpack 概念

    什么是 webpack 模块 对比 Node.js 模块,webpack 模块能够以各种方式表达它们的依赖关系,几个例子如下: ES2015 import 语句 CommonJS require() 语句...AMD define 和 require 语句 css/sass/less 文件中的 @import 语句。...: 操作符 对常用值使用常量或变量 编写并执行函数来生成部分配置 依赖图表(Dependency Graph) 任何时候,一个文件依赖于另一个文件,webpack 就把此视为文件之间有依赖关系。...入口(entry) webpack 将创建所有应用程序的依赖关系图表(dependency graph)。图表的起点被称之为入口起点(entry point)。...站在编译器(webpack) 的角度 除了普通资源,编译器(compiler)需要发出 "update",以允许更新之前的版本到新的版本。"

    1.5K80

    你的web应用支持离线访问和策略缓存吗?

    使用 service worker 前,需要创建一份注册文件,不妨在项目下创建一个名为 sw.js 的文件 console.log('Hello, I am sw.js file') 然后在应用中通过这个文件进行注册...###导入Workbox 首先在 sw.js 第一行导入 workbox.js 语法如下 importScripts('https://storage.googleapis.com/workbox-cdn...接下来的重点便是放在如何基于路由,如何体现策略。 前端的大多资源都是通过 HTTP 请求得来的,包括 js 、css 、 图片等等,既然这些内容都需要请求,那我能不能在请求发出后,做一些处理呢?...中使用workbox 首先安装 workbox-webpack-plugin ,选择使用npm安装 npm install --save-dev workbox-webpack-plugin 在webpack...配置文件中配置该插件 const workboxPlugin = require('workbox-webpack-plugin'); // ... webpack({ plugins: [

    1.1K20

    Web Worker使用教程

    Web Worker的作用就是为JavaScript创建多线程环境,允许主线程创建Worker线程,将一些任务分配给后者运行,两者互不干扰。等到Worker线程完成计算任务,再把结果返回给主线程。...:Worker线程所在的全局对象,与主线程的不一样,无法读取主线程所在的网页的DOM对象,也无法使用document、windown、parent这些对象。...(4) 脚本限制:Worker线程不能执行alert()和confirm(),但可以使用XMLHttpRequest对象发出Ajax请求 (5) 文件限制:Worker线程无法读取本地文件,即不能打开本机的文件系统...接着,主线程通过worker.onmessage指定监听函数,接收子线程发出来的消息。...Worker加载脚本 Worker内部如果需要加载其他脚本,有一个专门的方法importScripts()。

    1.7K00

    前端er来学习一下webWorker吧

    在项目中:我们可以把worker线程的逻辑写在js文件里面,然后字符串化,然后再export、import,配合webpack进行模块化管理,这样就很容易使用了。 主线程的其他 API: 1....importScripts('http~.js','http~2.js'); 脚本中的全局变量都能被 worker 线程使用。...脚本的下载顺序是不固定的,但执行时会按照传入 importScripts() 中的文件名顺序进行,这个过程是同步的。...在 worker 线程内再新建 worker 线程就不能使用window.URL.createObjectURL(blob),需要使用同源的脚本文件来创建新的 worker 线程,因为我们无法访问到window...一旦数据转移到其他线程,原先线程就无法再使用这些二进制数据了,这是为了防止出现多个线程同时修改数据的麻烦局面 下方栗子出自浅谈 HTML5 Web Worker // 创建二进制数据 var uInt8Array

    53320

    专用工作者线程

    使用 Worker 对象Worker()构造函数返回的 Worker 对象是与刚创建的专用工作者线程通信的连接点。它可用于在工作者线程和父上下文间传输信息,以及捕获专用工作者线程发出的事件。...importScripts():用于向工作者线程中导入任意数量的脚本。...这几个状态对其他上下文是不可见的。虽然 Worker 对象可能会存在于父上下文中,但也无法通过它确定工作者线程当前是处理初始化、活动还是终止状态。...该构造函数同样创建了专用工作者线程。在工作者线程中动态执行脚本工作者线程中的脚本并非铁板一块,而是可以使用 importScripts()方法通过编程方式加载和执行任意脚本。...在支持传统多线程模型的语言中,可以使用锁、互斥量,以及volatile 变量。

    26310
    领券