angular惰性加载拓展剖析】的更多相关文章

最近把一个比较旧的业余项目重新升级了下,将主文件进行了剥离,增加了些惰性加载的配置,将过程中一些零散的知识点做个总结,同时尽量深入原理实现层面. 项目环境: 前端框架:angular2.0.0-beta.21 构建工具:webpack4.11.0 加载惰性模块: 跑了下环境,再次验证了每次回头看以前自己写的东东的时候都会不能忍这一潜在的法则,发现首屏的加载事件竟然超过了1s,于是果断切割主资源包,进行按需加载 如果使用angular-cli命令工具,该需求基本自动化实现,只需要在对应的路由下配置…
一:Angular-CLI建立应用 cmd命令:ng new lazy-app --routing    (创建一个名叫 lazy-app 的应用,而 --routing 标识生成了一个名叫 app-routing.module.ts 的文件) cd lazy-app     (进入lazy-app项目) 二:创建一个带路由的特性模块 cmd命令:ng generate module customers --routing    (创建一个 customers 目录,其中有两个文件:Custom…
需要修改至少四个地方1. 将子组件进行模块化操作2.生成子组件module .子组件router3.配置主路由 信息 改为loadChild4.配置appModule 删除引入 以product组件 为例 这个组件是一个一级菜单所以需要给这个页面生成一个module 1.生成 product.module组件2.生成routers 路由列表(这里可以分为两个文件写) import { NgModule } from '@angular/core'; import { CommonModule }…
之前为了测试一个模块优化问题,于是用angular-cli快速搭建了个ng5的脚手架demo,在应用惰性加载功能的时候发现浏览器报错如下: ERROR Error: Uncaught (in promise): TypeError: __webpack_require__.e is not a function TypeError: __webpack_require__.e is not a function at webpackAsyncContext (eval at ./src/$$_l…
写在前面 最近在工作中接触到angular模块化打包加载的一些内容,感觉中间踩了一些坑,在此标记一下. 项目背景: 项目主要用到angularJs作为前端框架,项目之前发布的时候会把所有的前端脚本打包压缩到一个文件中,在页面初次访问的时候加载,造成页面初始载入缓慢,在此基础上,提出按需加载,即只有当用户访问某个模块的时候,该模块的脚本才会加载. 工具类: 项目使用grunt打包根据AMD规范,使用grunt-contrib-requirejs来压缩合并模块,同时用ocLazyLoad来完成ang…
推荐一个简单的 Angular 图片加载插件:vgSrc,插件根据图片资源的不同加载状态,显示不同图片,亲测兼容IE-8. 使用 推荐使用 bower 加载: bash bower install vgSrc --save 并引入: html <script src="/bower_components/vgSrc/dist/vgSrc.min.js"></script> 也可下载源码,在页面引入: html <script src="/libs…
关于PDF在线阅读问题,比较普遍的做法是转换成swf文件来浏览:由于项目需要,就用 flexpaper 来实现了下,功能比较简单:但是文件的惰性加载确实让笔者挠头了一把! 下面是笔者的方法: 采用流的方式来读取每一页的swf文件,然后展示(pdf转换成多个swf文件网上一大把):亲自测试,100M的pdf文档,转换后在线浏览,延迟不超过1s; JSP页面 : <%@ page language="java" import="java.util.*" pageE…
Angular - 预加载延迟模块 在使用路由延迟加载中,我们介绍了如何使用模块来拆分应用,在访问到这个模块的时候, Angular 加载这个模块.但这需要一点时间.在用户第一次点击的时候,会有一点延迟. 我们可以通过预加载路由来修复这个问题.路由可以在用户与其它部分交互的时候,异步加载延迟的模块.这可以使用户在访问延迟模块的时候更快地访问. 本文将在上一个示例的基础上,增加预加载的功能. 在上一节中,我们的根路由定义在 main.routing.ts,我们在 app.module.ts 中使用…
jQuery EasyUI 树形菜单 - 树形网格惰性加载节点 有时我们已经得到充分的分层树形网格(TreeGrid)的数据. 我们还想让树形网格(TreeGrid)按层次惰性加载节点. 首先,只加载顶层节点. 然后点击节点的展开图标来加载它的子节点. 本教程展示如何创建带有惰性加载特性的树形网格(TreeGrid). 创建树形网格(TreeGrid) data-options=" url: 'data/treegrid_data.json', method: 'get', rownumbers…
1.angular 图片加载失败 情况处理 在directive中定义组件,在ng-src错误时,调用err-src app.directive('errSrc',function(){ return { link: function(scope, element, attrs){ if(attrs.src == 'undefined'){ attrs.$set('src', attrs.errSrc); } element.bind('error', function() { if (attr…
看登录中间件的时候发现request.user返回的是SimpleOject对象,往下看翻到了LazyObject,看源码看了半天没看懂 网上搜了一堆资料了解下惰性加载实现是的什么功能,再回去看源码,大概知道了LazyObject实现的原理 Django的惰性加载,就是生成对象的时候先不实例化,等到需要调用对象的属性或方法的时候再做实例化的操作 LazyObject源码: empty = object() #为类方法实现通用的惰性加载方法,即查看对象是否实例化 #若还未实例化,调用子类实例化方法…
利用函数的惰性载入提高 javascript 代码性能 原文:利用函数的惰性载入提高javascript代码性能 作者:阿安 在 javascript 代码中,因为各浏览器之间的行为的差异,我们经常会在函数中包含了大量的 if 语句,以检查浏览器特性,解决不同浏览器的兼容问题. 例如,我们最常见的为 dom 节点添加事件的函数: function addEvent (type, element, fun) { if (element.addEventListener) { element.add…
今天在项目中遇到一个很奇怪的问题,使用oclazyload来懒加载angular的模块,刷新页面后,单击回退按钮无法返回上一个页面.估计是使用懒加载机制销毁了angular内部的state关联,导致无法回到上一个state(单击回退按钮  ui-routre的 $stateChangeStart 事件都不会触发),当然这只是猜测,由于事件关系也没有去深入的探究源码. 解决方案 : 通过查看angular(ionic)的源码发现$browser这个服务上有个onUrlChange方法,当我们从an…
Angularjs作为mvc(或者说mvvm)框架,同样具备模板这一基本概念. NG加载模板的顺序为 内存加载---AJAX加载. 如果排版乱掉,请查阅https://www.zybuluo.com/bornkiller/note/6023 内存加载 如果之前使用过Bootstrap 插件的ng版,即angular-ui,就会了解到这种方式的具体应用.模板本质上是字符串,把字符串直接写入内存,加载时直接从内存获取,速度会更快,有两种方式显式启用内存加载. 通过使用$templateCache s…
由于公司服务器架构不行,每次加载数据都要很久,但是都是使用angular来渲染数据,不像jquery有beforsend什么的方法, 这是一个github上找的,很轻使用也很简单 1.安装  npm intall nagular-buys 2.引入 <script src="../bower_components/angular/angular.js"></script> <script src="../bower_components/angu…
在做Angular项目时,经常会遇见在浏览器上闪烁表达式({{ express }} ),及模块(div)的闪烁,会闪现/闪烁隐藏的数据,之前用过vue.js,可以通过v-clock解决,同理Angular也可以通过ng-cloak来实现防止闪烁的方案. <div id="template1" ng-cloak>河马家</div> <div id="template2" ng-cloak> {{hema}}</div>…
这系列文章会对Cocos Creator的资源加载和管理进行深入的剖析.主要包含以下内容: cc.loader与加载管线 Download部分 Load部分 额外流程(MD5 Pipe) 从编辑器到运行时 场景切换流程 前面4章节介绍了完整的资源加载流程以及资源管理,以及如何自定义这个加载流程(有时候我们需要加载一些特殊类型的资源)."从编辑器到运行时"介绍了我们在编辑器中编辑的场景.Prefab等资源是如何序列化到磁盘,打包发布之后又是如何被加载到游戏中. 准备工作 在开始之前我们需…
基于angular4写的一个指令,在ionic3.x项目在用.因为加载图片超时等原因导致图片显示不出来,需要替换成默认或者指定图片 1.err-src.ts import { Directive,Input } from '@angular/core'; @ Directive({ selector: '[err-src]', // Attribute selector host: { '(error)': 'onError($event.target)' } }) export class E…
1.前言 有时我们会有这样的需求,当网页有很多张图片的时候,我们不希望一次性就把图片加载完,而是希望当浏览器滑动到指定位置的时候再加载,这样可以节省带宽,它也能帮助减轻服务器负载.那么这种需求就需要利用lazyload了. jquery_lazyload.js是基于jq的一个扩展,需要引入jq后使用. 2.使用方法 2-1.引入jquery和lazyload拓展 <script src="jquery-1.11.0.min.js"></script> <s…
转载于 作者:海底苍鹰地址:http://blog.51yip.com/jsjquery/1599.html 我希望页面加载的时候,我能马上处理页面的数据,如请求API .... 所以这样设置 在某个页面的控制器中 监听页面load  phonecatControllers.controller('registerctr', ['$scope', '$routeParams', function($scope, $http,$routeParams) { $scope.login = "&quo…
在一个项目还是单体架构的时候,所有的js,css,image都会在一个web网站上,看起来并没有什么问题,比如下面这样: 但是当web网站流量起来的时候,这个单体架构必须要进行横向扩展,而在原来的架构中静态资源这羊毛是出在单体架构这头羊身上,所以横向多少 个单体,就有多少个静态资源文件夹,比如下面这样的架构. 那这种架构有什么问题呢? 总的来说会有如下二个问题: 1.   浏览器对单一域名的请求有并发限制. 在同一个域名下,一般来说有js,css,img,media,html等等静态资源,如果资…
Download流程的处理由Downloader这个pipe负责(downloader.js),Downloader提供了各种资源的"下载"方式--即如何获取文件内容,有从网络获取.从磁盘获取,不同类型的资源在不同的平台下有不同的获取方式. 比如脚本在原生平台使用require方法获取,而在H5平台则使用动态添加的HTML标签,指定src进行加载. 又比如json在原生平台使用jsb.fileutils进行加载,而在H5平台则使用XMLHttpRequest从网络下载. Downloa…
我们平时写的导入包的方式都是同步方式,有时候会显得过于卡顿,这样我们就可以使用异步加载的方式. script.js方式: 执行结果为: 异步加载还可以加载多个即为script([,,,],function(){})的形式,这样有可能会出现的问题是如果一个包比较小的话那么会率先加载下来而如果这个包依赖与其他未被下载下来的包的话就会出现找不到文件的错误. 一种解决方案为嵌套方式决定先后顺序: 还有一种方式就是引入angular-loader.js库这个库只需要你在上面引入后则会自动处理script(…
这里讨论场景切换的完整流程,从我们调用了loadScene开始切换场景,到场景切换完成背后发生的事情.整个流程可以分为场景加载和场景切换两部分,另外还简单讨论了场景的预加载. 加载场景的流程 loadScene主要做了3件事,通过_getSceneUuid获取要加载场景的信息,对于原生平台的非启动场景执行了cc.LoaderLayer.preload(但查询了所有的代码,并没有发现LoaderLayer的实现,也没有发现任何对cc.runtime赋值的地方),最后通过_loadSceneByUu…
我们在编辑器中看到的资源,在构建之后会进行一些转化,本章将揭开Creator对资源进行的处理. 资源处理的整体规则 首先我们将Creator的开发和运行划分为以下几个场景: 编辑器 当我们将资源放到编辑器中时,Creator会为每个资源生成唯一的uuid以及meta文件,并在项目的library目录下生成对应的json文件来描述这个资源的信息,而uuid与资源的映射关系被放在library目录下的uuid-to-mtime.json文件中.由于资源的引用关系是靠uuid来维系的,所以我们可以在C…
Load流程是整个资源加载管线的最后一棒,由Loader这个pipe负责(loader.js).通过Download流程拿到内容之后,需要对内容做一些"加载"处理.使得这些内容可以在游戏中使用.这里并不是所有的资源都需要进行一个加载处理,目前只有图片.Json.Plist.Uuid(Prefab.场景)等资源才会执行加载的流程,其他的资源在Download流程之后就可以在游戏中使用了. Loader处理 Loader的handle接收一个item和callback,根据item的typ…
问题: 懒加载无法找到模块 解决办法: 在app-routing.module.ts中引入该模块…
①通过ng new angular-module创建一个全新的angular应用,默认不选路由 ②通过一下命令分别创建2个模块和1个组件 ng g m hx1 ng g c hx1 ng g m hx2 ng g c hx2 ng g c hx3 创建完成目录如下 ③将app.module和app.component改造 app.module如下: import { BrowserModule } from '@angular/platform-browser'; import { NgModu…
[前言] Rally是一个开源测试工具,用于测试openstack各个组件的性能 在使用Rally测试完毕后,一般会生成测试报告,这点很重要.但是原生态的Rally报告模板angular js框架是从Google下载的. <%block name="libs"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/nvd3/1.1.15-beta/nv.d…
rails console后: 2.1.4 :001 > User # => User (call 'User.connection' to establish a connection) 这是因为Active Record 建立连接是惰性的lazily. 直接用查询语法就好. gem 'faker'后就直接可以用了. 顶多写一句require 'faker'…