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

关于前端业务代码一些见解

工作以来,一直写一些重复且交互复杂页面,也没有整理过自己思路,这篇文章是工作一年半来项目中总结出来一些经验。...分层 对于业务代码来说,大部分前端应用都还是以展示数据为主,无非是从接口拿到数据,进行一系列数据格式化显示页面当中。...+ controller.js + model.js Service 统一管理所有请求路径,并且将页面涉及到网络请求封装为class。...当处理一个请求时候,controller 会调用 service 里面对应方法,拿到数据调用formatter 方法,将格式化数据存入 store ,展示到页面上。...借助这个例子来说明,开始写页面之前,一定要对页面隐藏交互和数据流动很熟悉,也需要去设计更加合理数据结构。

58620

前端老牌框架衰退,IMVC(同构 MVC)成未来趋势?

小范围同构,例如原生js 浏览器和Node 中代码并没有差异,只是DOM API 和 Node API 不同而已,这就是函数层面的同构,即代码片段相同。...── home // 具体页面 │ │ │ ├── controller.js// 控制器 │ │ │ ├── model.js // 模型 │ │ │ └── view.js // 视图 │ │ ├─...服务端webpack 编译到内存模拟文件系统,再用 node.js 内置虚拟机模块执行得到新模块。...如何处理 css 按需加载 问题根源:浏览器只 dom-ready 之前会等待 css 资源加载再渲染页面 问题描述:当单页跳转到另一个 url,css 资源还没加载完,页面显示成混乱布局 处理办法...浏览器里require 被编译为加载函数,异步加载。node.js 里require 是同步加载。 如何处理静态资源版本管理 以代码 hash 为文件名,增量发布。

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

IMVC(同构 MVC)前端实践

因为, 2011 年,node.js 和 ECMAScript 都不够成熟,我们并没有很好基础设施,去满足同构目标。 现在是 2017 年,情况已经有所不同。...4、同构实现策略 要实现同构,首先要正视一点,全盘同构是没有意义为什么?...我们使用本地路由表 routes.js 和 nginx 配置协调 url 访问规则 每个 page controller.jsmodel.js 和 view.js 以及它们私有依赖,将会被单独打包到一个文件...webpack 编译到内存模拟文件系统,再用 node.js 内置虚拟机模块执行得到新模块 5.7.2、如何处理 CSS 按需加载?...问题根源:浏览器只 dom-ready 之前会等待 css 资源加载再渲染页面 问题描述:当单页跳转到另一个 url,css 资源还没加载完,页面显示成混乱布局 处理办法:将 css 视为预加载

1.3K60

干货 | IMVC(同构 MVC)前端实践

因为, 2011 年,node.js 和 ECMAScript 都不够成熟,我们并没有很好基础设施,去满足同构目标。 现在是 2017 年,情况已经有所不同。...4、同构实现策略 要实现同构,首先要正视一点,全盘同构是没有意义为什么?...我们使用本地路由表 routes.js 和 nginx 配置协调 url 访问规则 每个 page controller.jsmodel.js 和 view.js 以及它们私有依赖,将会被单独打包到一个文件...webpack 编译到内存模拟文件系统,再用 node.js 内置虚拟机模块执行得到新模块 5.7.2、如何处理 CSS 按需加载?...问题根源:浏览器只 dom-ready 之前会等待 css 资源加载再渲染页面 问题描述:当单页跳转到另一个 url,css 资源还没加载完,页面显示成混乱布局 处理办法:将 css 视为预加载

1.6K50

腾讯新闻React同构直出优化实践

为什么选择腾讯新闻 并非腾讯新闻业务相关方,可以比较大胆地作为例子使用 腾讯新闻页面更为丰富,可以做更多场景实践 验证全套脱胎手Q家校群react优化策略、实践方案和开发工具 由于只是实验,数据都是拉取腾讯新闻现网提供...是次实践,steamer-react下面新建了一个node文件夹,存放后台服务。后台服务包括返回数据api,还有直出controller层。...直出controller层和数据返回api都一律写在controller.js里面,然后去require存放在node/asset/下面具体直出逻辑文件,然后将yield出来值直接吐出来: exports.spa...plugin实质是定义global全局变量里一个函数,然后将它nodeUtilscontroller.jsrequire进来,就能达到保留原样效果。...兼顾后台没有的对象 除了以上提到,前端部份代码主要注意是一些后台没有的对象,例如window。可以通过构建手段注入全局变量去替换或者服务端渲染时候不执行部份代码。

2.2K50

后端实战教程:如何使用 Node.js 开发 RESTful API 接口(Node.js + Express + Sequelize + MySQL)

整个服务搭建起来,我们使用 Postman 对整个后端服务进行测试。本教程每段代码都亲手测过,保证百分百没有错误,请打开你 terminal 跟随本教程一起操作,从这里开始,成为一名后端工程师。...请先确认你计算机是否已安装 node.js 。如果尚未安装请前往 node 官网下载安装。...安装或准备可远程连接 MySQL 数据库本教程搭建 app 数据存放在 MySQL ,你可以本机安装 MySQL ,也可以准备一台可远程连接 MySQL 数据库。...运行 Node.js Express 服务器 node.js 服务器根目录,运行 node server.js图片控制台显示数据读写,每当前端调用后端时,这里就会给出对应后端操作了写什么 log...使用 Postman 调用 node.js 后端测试 API图片后端搭建起来,我们可以使用 postman 来对它进行测试。

10.4K21

thinkjs学习笔记

,应用配置路径是App/Conf/config.js, 配置程序是很方便读取和写入 //读取 var dbHost = C('db_host'); //写入 C('name', 'xxx');...lib/Common/common.js 通用函数库 lib/Common/extend.js js原生对象扩展 lib/Common/function.js 框架相关函数库 lib/Conf/alias.js...数据库基类 lib/Lib/Core/Dispatcher.js 路由分发类 lib/Lib/Core/Http.js 封装http对象类 lib/Lib/Core/Model.js 模型基类 lib.../Conf/tag.js自定义标签 ): /** * 系统标签配置 * 可以App/Conf/tag.js里进行修改 * @type {Object} */ module.exports =...,即可以按照/分组/控制器/操作/方式来分割参数了,如果第一个路净值分组列表不存在,则第一个路径值是分配到控制器上面。

1.2K71

thinkjs学习笔记

,应用配置路径是App/Conf/config.js, 配置程序是很方便读取和写入 //读取 var dbHost = C('db_host'); //写入 C('name', 'xxx');...lib/Common/common.js 通用函数库 lib/Common/extend.js js原生对象扩展 lib/Common/function.js 框架相关函数库 lib/Conf/alias.js...数据库基类 lib/Lib/Core/Dispatcher.js 路由分发类 lib/Lib/Core/Http.js 封装http对象类 lib/Lib/Core/Model.js 模型基类 lib.../Conf/tag.js自定义标签 ): /** * 系统标签配置 * 可以App/Conf/tag.js里进行修改 * @type {Object} */ module.exports =...,即可以按照/分组/控制器/操作/方式来分割参数了,如果第一个路净值分组列表不存在,则第一个路径值是分配到控制器上面。

87420

大前端自动化工厂(1)——Yeoman

实战:tiny-helper工具开发演示 在此演示如何制作一个小工具来生成标准化Component,示例工具使用generator-generator生成,为方便学习使用,放置本地node_modules...目录,示例generator只进行了两项基本操作: configuring阶段将.editorconfig文件直接拷贝至当前目录 writing阶段将controller.tpl.js模板占位符替换为用户输入关键词...,然后生成新controller.js文件 generator关键示例代码: //保存配置相关信息且生成配置文件(名称多为'.'...controller.tpl.js模板: [转换前模板] ? 转换loginPageController.js: [转换js文件] ?...可以看到我们已经使用关键词替换掉占位符并得到了新controller.js框架文件。

1.3K40

Vue2 源码解析

再深入思考一下这个问题,为什么需要数据变更监测?...一旦这个方法被调用,就表示 “你这个 Watcher 所依赖数据有更新,麻烦对对应模板进行更新 / 麻烦调用回调函数” 模板表达式也需要更新,但这里 Vue 采用策略是不精准地对应依赖关系,而是需要时候将模板全部重新渲染一遍...,数据处理逻辑就显得特别简单直接了: 调用 data() 方法获取数据值(Vue 推荐 data 写成一个函数来返回值,但源码也处理了 data 不是函数情况) 针对数据每个 key,检查有没有和...按上面的常识,JS 操作完 DOM ,DOM 渲染、更新是微任务。...; 当组件需要修改数据时,不能直接修改 State 状态数据,而是要使用 dispatch() 方法调用一个 Action; Action 可以进行各种操作,比如调用后端 API 等,操作完成需要修改状态数据

1.1K42

你不知道前端 MVVM 模式数据层(万字长文,教你造轮子)

前端工程里面的数据操作相对简单,基本都是以 API 调用为主,主要使用后端已经基本处理好数据 前端业务数据处理相对简单, ViewModel 层面进行处理就能满足需求 前端开发者普遍缺乏数据库操作经验和对数据管理方面的意识...前端工程 Model 需求和解决 在前端工程其实有很多数据抽取需求,以笔者所负责一个工程(Vue 项目)来举例,随着业务发展,工程里面代码里膨胀非常迅速,不同阶段会面临着不同问题,随着问题逐渐解决...Model 应该提供安全获取数据逻辑 我们先贴出 Model 代码设计: //Model.js import Axios from '.....,也无需分别调用接口,通过一次 Model 查询即可得到全部数据 开发者无需关注数据来源于哪个接口,只需要关注需要什么数据 需要提供便捷、聚合接口字段查询能力,最好是可视化界面 需要提供通过数据组合得到新数据能力...总结 至此我们实现了 Model 层抽离全部想法,这套轮子司多个项目当中使用,可以有效数据与模板、逻辑隔离开。

97420

salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型

执行结束调用回调函数去处理后期业务逻辑以及更新UI等操作; 4.server-controller 使用apex代码处理业务逻辑以及和数据交互,写法和VF Remoting后台写法类似,区别为需要在方法上添加标签...当我们点击按钮或者触发了注册事件,会执行controller.js里面的方法,需要写{!...介绍  如果是controller.js负责了component所有业务逻辑,那么helper js就承包了所有的业务细节处理或者公用方法(显示隐藏loading等)。...helper一般需要component这个参数,其他参数可以根据实际需要自动从controller.js获取以及传递。这里举例一个调用后台并对返回数据进行处理例子。...调用成功将这个item写入到前台camping列表

1.6K30

salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型

执行结束调用回调函数去处理后期业务逻辑以及更新UI等操作; 4.server-controller 使用apex代码处理业务逻辑以及和数据交互,写法和VF Remoting后台写法类似,区别为需要在方法上添加标签...当我们点击按钮或者触发了注册事件,会执行controller.js里面的方法,需要写{!...介绍  如果是controller.js负责了component所有业务逻辑,那么helper js就承包了所有的业务细节处理或者公用方法(显示隐藏loading等)。...helper一般需要component这个参数,其他参数可以根据实际需要自动从controller.js获取以及传递。这里举例一个调用后台并对返回数据进行处理例子。...调用成功将这个item写入到前台camping列表

1K00

起来,前端还没倒下,不能睡

1.2 created 实例创建完成被立即调用。在这一步,实例已完成以下配置:数据观测 (data observer),属性和方法运算,watch/event 事件回调。...然而,挂载阶段还没开始 1.3 beforeMount 挂载开始之前被调用:相关 render 函数首次被调用。...1.5 beforeUpdate 数据发生变化前调用 1.6 updated 数据发生变化调用 1.7 beforeDestroy 挂载完毕,数据更新完成之后;解除绑定,销毁子组件以及事件监听器之前调用...数据交互 vue.js 没有集成 ajax 功能,要使用 ajax 功能,可以使用 vue 官方推荐 axios.js 库来做 ajax 交互。...不同是,js 文件需要先导出 (export) ,才能被其他 js 文件导入(import) // model.js文件中导出 var person = {name:'tom',age:18} export

80710

原生 JavaScript + NodeJS(Express 框架) 做一个简陋登录注册项目

使用前后端分离,前端文件位于 front_end 文件夹 配置 config/default.js ,当然可以具体文件配置,但是这儿方便一点 在线 demo:https://auth.bilibilianime.com.../front_end 只开后端 node ....里写各种 api, 通过 model.js 里导出 User 进行数据增、查操作, 定义了一些中间件来对输入用户名,密码和,验证码进行检验....定义了 User 对象, 当 server.js 执行 User.create 操作时, 密码就会被加盐, 然后哈希, 存入数据库. bcrypt 盐无需存储....没有做 token 定期失效. token 加密需要用到 SECRET, 最好是做成环境变量, 此处定义成全局变量 app.post("/api/login",[nameValid,pwdValid

85020

干货 | 携程火车票Rematch框架实践

1)第一期:先在新页面来尝试使用rematch框架,我们找了一个与流程几乎没有什么耦合新页面来试水。...因此,我们将组件放置单独文件夹,其中包含两个文件index.js 以及 model.js, index文件主要是描述组件视图, model.js里封装了组件所有的逻辑。...2)model.js暴露显示或隐藏弹窗方法 const manualSpeedLayer = { state : false, reducers: { show...因此可以通过异步action来暴露一个函数出来,单独给页面设置数据源。这样一来,对组件来说,就屏蔽了调用细节,组件内只需要这个数据类型,而组件外具体是哪个页面使用,数据来源是什么,都不用关心。...RN开了预加载情况下,由于先前状态仍然保存着,下次再进入该页面会造成页面数据显示不准确问题,所以就需要在页面退出之前,清除掉之前状态。

84010

老项目 umi2 升级umi3 踩坑全记录

问题一:[app.model] namespace should be unique 我们umi2 项目目录现在是这样,都是文件夹业务模块里model.js 存放dva 逻辑层。...model.js 会有命名空间。 升级完umi3 之后报错model 命名重复,找了下也没有发现重复,但是dva 看到model 命名空间确实以model 文件名命名。...查看了umi3 dva 插件,确认了pages model.js 文件会以命名空间命名,但是现实不是,也提交了issue,现在没有得到回复: https://github.com/umijs/plugins.../issues/833 解决办法: 试了下把model 移动到models 文件夹,会以文件命名命名空间不会重复。...脚本目的: pages 下面业务文件夹里model.js 改名为 文件名.js 将改名文件移动到models/pages 文件夹 model.js 相对引用批量修改 第三部根绝业务定。

2K60

前端之Vue.js使用

beforeCreate 实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。 created 实例创建完成被立即调用。...然而,挂载阶段还没开始 beforeMount 挂载开始之前被调用:相关 render 函数首次被调用。...beforeUpdate 数据发生变化前调用 updated 数据发生变化调用 ?...Node.js如果安装成功,可以查看Node.js版本,终端输入如下命令: node -v  npm npm是node.js包管理器,安装了node.js同时会自动安装这个包管理器,可以npm命令来安装...跨域请求 vue自动化工具提供了开发服务器,我们在这个服务器环境下开发,改动代码可以马上更新显示,错误了还有代码提示,非常方便,但是,如果我们组件需要数据,而且数据另一个服务器环境下运行,我们就需要跨域请求数据

5.1K30
领券