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

加载之——js 文件如何实现只加载执行

性能优化很常见的一个方式是提前加载文件,本文讨论如何在其他依赖未加载情况下提前加载一个.js文件。...1.导出一个函数 如果使用 加载一个js 文件,如果加载js 是一个自执行文件,那么会出现错误。...src="/test.js"> 使用标签会进行加载和执行,由于没有加载依赖函数bluer,控制台会出现以下问题: test.js:2 Uncaught...ReferenceError: bluer is not defined 如果要正确加载,可以在加载js 时是一个函数 //test2.js function test() { bluer(...使用preload 加载资源 preload 会强制浏览器立即获取资源,并且该请求具有较高的优先级。并且是在阻塞 document 的 onload 事件的情况下请求资源。具体是使用。

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

《移动端本地 H5 秒开方案探索与实现》

那么将 H5 相关页面和资源打包到客户端中,然后客户端将展示数据传给页面,通过webView加载展示,这样几乎不需要网络请求,webview 只要渲染页面,执行js即可,这样体验岂不是很完美?...然而这样的方案实现起来十分繁琐,原因是 H5 资源给到客户端打包时很分散,统一,管理困难。...四、细节优化 解决了上面的问题,本地 H5 确实可以达到秒开的加载速度,不过要达到和客户端一样的体验,还需要配上一些细节优化: 预加载 webView,预拉取数据 在联调本地 H5 页面过程中,发现首次加载页面时间比后续打开时间都慢很多...但是使用 WKWebView 加载本地的 HTML 时也有一些兼容问题,在 iOS8 不能在 HTML 文件中引用本地的 css 或者 js 或者图片文件,IOS8 以上的是正常的,可以引用远程资源。...为了兼顾兼容性和秒开体验,所以做降级方案,通过系统版本动态加载JS, IOS8 使用网络资源,IOS8 以上使用本地资源。

5.3K162

干货 | 近万字长文详述携程大规模应用RN的工程化实践

├── common_ios.js //iOS CRN框架代码,包括RN+CRN扩展JS组件+常用第三方组件 └── pack.config //打包日志文件,记录打包时间...图片资源目录,定制过资源打包/加载流程,iOS/Android目录一致 ├── fonts/ //字体文件目录,每个js模块一个文件,文件名为模块ID.js ├── js-diffs...按需加载方案是2017年,基于RN 0.41版本开发的,当时上线前我们也做过首屏性能测试, 数据是iOS模拟器上跑出来的,由于首次进入业务加载的页面数量猛降,所以首屏时间减少了2/3。...如果我们使用的RN是0.47版本,对这个库的依赖方式写成^0.2.0, 当组件版本发布到0.2.2时候,都使用的很正常,一旦0.2.3版本发布,如果再打包发布,则会出现兼容问题,线上会出大量JS报错。...分平台打包之后,先打包iOS,再打包Android,将差异代码存储在js-diff目录,加载时,Andorid先在js-diff中查找模块,查找得到直接使用,如果查找不到,再在默认的js-modules

1.4K40

React 16 加载性能优化指南

零、基础概念 我们先要明确一次页面加载过程是怎样的(这里我们暂时讨论服务器端渲染的情况)。 一次渐进式加载的全过程: ?...用户打开页面,这个时候页面是完全空白的; 然后 html 和引用的 css 加载完毕,浏览器进行首次渲染,我们把首次渲染需要加载的资源体积称为 “首屏体积”; 然后 react、react-dom、业务代码加载完毕...也就是说,这个时候: 首屏体积(首次渲染需要加载的资源体积) = html + js + css 1.1..../math'; console.log(add(16, 26)); 改写成动态 import 的形式,让首次加载时不去加载 math 模块,从而减少首次加载资源的体积。 import("....以这个用户主页为例,起码有三处组件是不需要首次加载的,而是使用动态加载:标题栏、Tab 栏、列表。首次加载实际上只需要加载中心区域的用户头像、昵称、ID即可。

96320

React 16 加载性能优化指南

零、基础概念 我们先要明确一次页面加载过程是怎样的(这里我们暂时讨论服务器端渲染的情况)。...一次渐进式加载的全过程 用户打开页面,这个时候页面是完全空白的; 然后 html 和引用的 css 加载完毕,浏览器进行首次渲染,我们把首次渲染需要加载的资源体积称为 “首屏体积”; 然后 react、...也就是说,这个时候: 首屏体积(首次渲染需要加载的资源体积) = html + js + css 1.1....首屏 -> 首次内容渲染 这一段过程中,浏览器主要在做的事情就是加载、运行 JS 代码,所以如何提升 JS 代码的加载、运行性能,就成为了优化的关键。...下面是一个具体的例子: 以这个用户主页为例,起码有三处组件是不需要首次加载的,而是使用动态加载:标题栏、Tab 栏、列表。首次加载实际上只需要加载中心区域的用户头像、昵称、ID即可。

57910

WebView性能、体验分析与优化

两者的总共后端时间并没有区别,但是可以提升首字节速度,从而让前端加载资源和后端加载API互相阻塞。 页面框架渲染 页面在解析到足够多的节点,且所有CSS都加载完成后进行首屏渲染。...JS加载 对于大型的网站来说,在此我们先提出几个问题: 将全部JS代码打成一个包,造成首次执行代码过大怎么办? 将JS以细粒度打包,造成请求过多怎么办?...将JS按 "基础库" + "页面代码" 分别打包,要怎么界定什么是基础代码,什么是页面代码;不同页面用的基础代码不一致怎么办? 单一文件的少量代码改的是否会导致缓存失效?...关闭WebView并重新访问测试页面,再次测试得到如下结果: 系统 Zepto.js Vue.js React.js + ReactDom.js iOS 0.9 / 1.9 5 / 7.4 3.5 /...后端处理慢,可以让服务器分trunk输出,在后端计算的同时前端也加载网络静态资源。 脚本执行慢,就让脚本在最后运行,阻塞页面解析。 同时,合理的预加载、预缓存可以让加载速度的瓶颈更小。

4.8K141

RN沙龙 | 携程是如何做React Native优化的

打包出来的JSBundle过大; 2. 首次进入RN页面加载缓慢; 3. 稳定性不够,有大量因为RN导致的crash; 4....,判断,如果已经在mapping文件里面的模块,不要打包到业务包中 改造页面加载流程: 1、因为要能够后台加载,所以需分离UI和JS加载引擎<iOS-RCTBridge, Android-ReactInstanceManager...相对应的,iOS开发了一个prepack的打包模式,简单点说,就是把所有的JS模块打包到一个文件里面,打包成一个二进制文件,并固定0xFB0BD1E5为文件开始,这个二进制文件里面有个meta-table...可以看出,iOS和android基本都比官方打包方式的加载时间,减少了50%。 这是自己单机测试的数据,那上线之后,数据如何呢?...从上文的优化可以看出,缓存了common.js部分的JS执行引擎(iOS RCTBridge, Android ReactInstanceManager),页面加载可以大大提速,那对于已经被业务使用过的

3.7K90

携程React Native实践

打包出来的 JSBundle 过大; 首次进入 RN 页面加载缓慢; 稳定性不够,有大量因为 RN 导致的 Crash; 大数据量时 ListView 加载卡顿。...改造页面加载流程: 因为要能够后台加载,所以需分离 UI 和 JS 加载引擎\; 进入业务 RN 页面时候,获取预加载好的...相对应的,iOS 开发了一个 prepack 的打包模式,简单点说,就是把所有的 JS 模块打包到一个文件里面,打包成一个二进制文件,并固定 0xFB0BD1E5 为文件开始,这个二进制文件里面有个 meta-table...可以看出,iOS 和 Android 基本都比官方打包方式的加载时间,减少了 50%。 这是自己单机测试的数据,那上线之后,数据如何呢?...从上文的优化可以看出,缓存了common.js部分的 JS 执行引擎(iOS RCTBridge, Android ReactInstanceManager),页面加载可以大大提速,那对于已经被业务使用过的

2.1K70

React Native热更新方案

热更新实现方案 当下选择使用 React Native 的项目大都是基于原有项目的基础上进行接入,即所谓的混合开发,而这些混合的代码中,为了增加带代码的难度(理解和维护难度),也只是将部分非核心的代码...首次启动、回滚 在每次更新完毕后的首次启动时,isFirstTime常量会为true。 你必须在应用退出前合适的任何时机,调用markSuccess,否则应用下一次启动的时候将会进行回滚操作。...发布iOS应用 按照正常的发布流程打包.ipa文件(Xcode中运行设备选真机或Generic iOS Device,然后菜单中选择Product-Archive),然后运行如下命令: pushy uploadIpa...发布安卓应用 Android打包的流程和原生打包apk的流程一样,然后在android文件夹下运行....要解决这个问题,主要有两个方案:1、将 js 源码中的逻辑进行修改,都从 res 中读取资源;2、将 React Native 使用到的资源打包到本地,跟随 jsbundle_*.zip 发布。

9.2K70

React 16 加载性能优化指南(下)

三、首次内容渲染 -> 可交互 ? 这一段过程中,浏览器主要在做的事情就是加载及初始化各项组件 ---- 3.1..../math'; console.log(add(16, 26)); 改写成动态 import 的形式,让首次加载时不去加载 math 模块,从而减少首次加载资源的体积。 import("....以这个用户主页为例,起码有三处组件是不需要首次加载的,而是使用动态加载:标题栏、Tab 栏、列表。首次加载实际上只需要加载中心区域的用户头像、昵称、ID即可。...切分之后,首屏 js 体积从 40KB 缩减到了 20KB. ---- 3.2....另外老旧的浏览器同样无法识别 nomodule 熟悉,会自动忽略它,从而加载 ES5 标准的代码。 简单地归纳为下图: ? 根据这篇文章,打包后的体积和运行效率都得到了显著提高。

1.6K20

微信小程序性能监控方式

一、小程序启动耗时1) 用户首次访问或小程序同步更新时,命中环境预加载 2) 用户非首次访问,命中环境预加载 3) 用户非首次访问,未命中环境预加载1、环境预加载​编辑切换为居中添加图片注释,超过 140...字(可选)2、用户首次访问或小程序同步更新时,命中环境预加载启动流程​编辑切换为居中添加图片注释,超过 140 字(可选)1) 资源准备信息获取: 小程序的头像、昵称、版本、配置、权限等基本信息(同步请求...二、页面切换耗时​编辑切换为居中添加图片注释,超过 140 字(可选)1、加载分包(若有)页面切换时需要下载分包,并在逻辑层注入执行分包内的 JS 代码2、视图层页面初始化每个页面都是由独立的 WebView...接口统计数据, 即采用evaluateScript耗时, 逻辑层 JS 代码注入(含编译和执行)耗时四、页面渲染时间直观感受, 用户能完全看到首屏内容的加载时间可以采用小程序原生页面首次渲染耗时计算,...、资源加载优化 | 微信开放文档建议采用如下统计方式:代码里自己计算, 首页配置获取完成时刻 - 首页组件onShow时刻, 误差比较大, 分析原因如下:统计时刻不包括app的加载、中间件生命周期的处理等时间

1.8K20

React 16 加载性能优化指南(上)

---- 零、基础概念 我们先要明确一次页面加载过程是怎样的(这里我们暂时讨论服务器端渲染的情况)。 ?...用户打开页面,这个时候页面是完全空白的; 然后 html 和引用的 css 加载完毕,浏览器进行首次渲染,我们把首次渲染需要加载的资源体积称为 “首屏体积”; 然后 react、react-dom、业务代码加载完毕...也就是说,这个时候: 首屏体积(首次渲染需要加载的资源体积) = html + js + css ---- 1.1....接下来你会看到,css in js 的模式带来的好处远大于这么一丁点缺点。 ---- 二. 首屏 -> 首次内容渲染 ?...但实际上我们打包时还是会打包 Promise 的 polyfill,也就是说,我们为了 6% 的用户兼容性,增大了 94% 用户的加载体积。 ?

1.7K50

React Native 按需加载 手 Q 狼人杀探索之路

通过对狼人杀的测试来看,首次从 RN 启动到渲染,耗时基本有 1.7s 左右。而这些耗时数据还是在 iPhone6s 中测试得出,可想低端局的情况可能会更加糟糕。...而我们想要达成按需加载的效果,可能会面临着三个挑战。 1.js 在动态运行的时候,代码注入的问题。 2.js 模块与模块之间相互引用的问题。 3.打包工具改造的问题。我们来依次看下这三个问题。...我们通过分析打包后的 JS 代码得知,必须要在_d(verboseName 模块名称)作用域下面。 从 native 层面分析,想要达到 JS 代码的动态注入。...不过 unbundle 命令不能打出 iOS 平台的,解释是因为 iOS 上面对小文件有 IO 性能的瓶颈。不过,这里我就没有亲自测试过了。...不过个人感觉,真正做到按需加载,就得根据业务做不同的打包,不易过大,也不易过小。平衡才是王道。 后续 大家从上文耗时表可以了解到,预加载和按需加载,只是优化了启动耗时的一部分。

2.7K10

React Native按需加载 手Q狼人杀探索之路

还得从源头着手,根据常规做法,都会将React Native打包js拆分成Base Bundle和业务Bundle。...而我们想要达成按需加载的效果,可能会面临着三个挑战。 1.js在动态运行的时候,代码注入的问题。 2.js模块与模块之间相互引用的问题。 3.打包工具改造的问题。我们来依次看下这三个问题。...1.从JS层面分析,想要达到JS代码的动态注入。必须要和运行的JS在相同运用域下面。我们通过分析打包后的JS代码得知,必须要在__d(verboseName + 模块名称)作用域下面。...不过unbundle命令不能打出iOS平台的,解释是因为iOS上面对小文件有IO性能的瓶颈。不过,这里我就没有亲自测试过了。...不过个人感觉,真正做到按需加载,就得根据业务做不同的打包,不易过大,也不易过小。平衡才是王道。 后续 大家从上文耗时表可以了解到,预加载和按需加载,只是优化了启动耗时的一部分。

1.1K40

单页应用首屏问题

刚开始用vue的时候就听有人一直说打包出来的包太大了,导致首次加载特别慢,之后采用了路由懒加载,把每个页面都单独打包首次加载从来没有觉得慢过。或许是自己做的项目太少不够大,所以没有考虑过这件事。...因为我们经常在mainjs里面引入很多插件和UI库,虽然路由懒加载了,首次加载只是加载某一个页面,但是引入的插件和UI库第一次还是要加载的,这就导致首次加载很慢。...我全局引入elementUI,打包出来之后首次加载的chunk-vendors.js和去掉之后的chunk-vendors.js大小将近2M。...5、优先加载,或者说按模块加载,这一个方法看情况把,像淘宝那些有必要,本人是建议去做,因为没有必要。简单来说就是一进入页面就把马上看到的先加载,其他的通过滚动也好通过监听也好,进行懒加载。...,只是首次加载全局引入的那些库,所以比较慢。

1.5K20

你所不知道的React| 趋势解读、底层逻辑、学习路径、实战应用

你需要一个JavaScript打包工具来将这些模块打包成一个.js文件,在网页中引入这个打包后的文件就可以在浏览器中运行了。 典型的打包工具有Webpack和browerify。...有一个误区需要避免:CommonJS利用require()方法来加载模块,因此很多人会下意识地认为他们需要一个require.js来完成这项工作。...当然,使用React代表一定要使用ES6,你大可以跳过ES6,将重点放在React本身。...这会加快首次加载的速度,因为用户不需要等待浏览器下载JS即可看到初始的UI,而且React可以重用服务端渲染的HTML,因此不需要在客户端创建。...如果你发现你的首次渲染速度太慢或者你想提升你的搜索引擎排名的话,你可以尝试一下服务端渲染。

69310
领券