2016年9月,微信小程序开始内测。

消息一出,整个前端圈都沸腾了。朋友圈、微博、知乎、技术社区,到处都在讨论小程序。有人兴奋,有人焦虑,有人已经开始学习小程序开发,有人在唱衰小程序。

我也是前端开发者,听到小程序的消息,心情很复杂——既觉得这是一个新的机会,又担心这是一个危机。

今天就来聊聊,微信小程序来了,到底是前端开发者的机会还是危机?

一、微信小程序是什么

在聊机会和危机之前,先说说微信小程序是什么。

微信小程序(WeChat Mini Program)是腾讯在2016年推出的一种新的应用形态,它运行在微信内部,不需要下载安装,用户扫一扫或者搜一下就能打开。

小程序的特点:

  • 无需下载安装:用户不需要在应用商店下载,扫一扫或搜一下就能用
  • 触手可及:用户可以通过扫码、搜索、分享、公众号关联等多种方式打开小程序
  • 用完即走:用户用完之后就可以关掉,不需要卸载,不占用手机存储空间
  • 体验接近原生APP:小程序的运行速度和流畅度接近原生APP,比H5好很多
  • 微信生态内:小程序运行在微信内部,可以调用微信的能力(如登录、支付、分享、位置、相机等)

小程序的目标,是连接一切——线下服务、线上内容、商家和用户。张小龙说,小程序是"一种不需要下载安装即可使用的应用,它实现了应用'触手可及'的梦想,用户扫一扫或者搜一下即可打开应用,也体现了'用完即走'的理念,用户不用关心是否安装太多应用的问题。"

二、小程序和传统Web/APP的区别

小程序是一种新的应用形态,它和传统的Web、原生APP都不一样。

1. 和传统Web(H5)的区别:

特性传统Web(H5)微信小程序
运行环境浏览器微信内置的运行环境
渲染方式DOM渲染类似React Native的双线程渲染(逻辑层+视图层)
性能受浏览器限制,性能一般接近原生APP,性能较好
系统能力受浏览器限制,能调用的系统能力有限能调用微信提供的API,系统能力较强
开发语言HTML/CSS/JavaScriptWXML/WXSS/JavaScript(类似但不完全相同)
发布方式部署到服务器,用户通过URL访问提交审核,通过后在微信内发布
开放性开放,任何浏览器都能访问封闭,只能在微信内运行

2. 和原生APP的区别:

特性原生APP微信小程序
下载安装需要在应用商店下载安装不需要下载,扫一扫或搜一下就能用
占用空间占用手机存储空间不占用存储空间(微信会缓存,但很小)
性能最好,能调用所有系统能力接近原生,但受微信限制,不能调用所有系统能力
开发成本高(iOS+Android两套,或者用跨平台框架)较低(一套代码,运行在微信内)
发布审核应用商店审核(App Store审核严格)微信审核(相对宽松,但也有规范)
获客方式应用商店搜索、广告、推广微信生态内(扫码、搜索、分享、公众号、社群)
独立性独立应用,有自己的品牌和用户依附于微信生态,用户是微信的用户

简单说,小程序是介于Web和原生APP之间的一种应用形态——比Web性能好、能调用更多系统能力,比原生APP开发成本低、获客容易、不用下载安装。

三、小程序的技术特点

作为前端开发者,我最关心的是小程序的技术特点。

小程序的开发技术,和传统的Web开发很像,但又不完全一样。

1. WXML(WeiXin Markup Language)

WXML是小程序的标记语言,类似HTML,但是有一些区别:

  • 标签不同:小程序用<view><text><image>等标签,而不是<div><span><img>
  • 数据绑定:用{{}}语法,类似Vue和Angular
  • 列表渲染:用wx:for,类似Vue的v-for
  • 条件渲染:用wx:if/wx:elif/wx:else,类似Vue的v-if
  • 模板:用<template>定义模板,用is引用
  • 事件:用bindtapbindinput等绑定事件,类似Vue的@click

一个简单的WXML示例:

<view class="container">
  <text class="title">{{title}}</text>
  <view wx:for="{{list}}" wx:key="id" class="item">
    <text>{{item.name}}</text>
  </view>
  <button bindtap="handleClick">点击我</button>
</view>

2. WXSS(WeiXin Style Sheets)

WXSS是小程序的样式语言,类似CSS,但是有一些扩展:

  • 尺寸单位:新增了rpx(responsive pixel),可以根据屏幕宽度自适应
  • 样式导入:用@import导入外部样式
  • 全局样式和局部样式:app.wxss是全局样式,页面的.wxss是局部样式
  • 选择器:支持大部分CSS选择器,但是不支持通配符*、不支持部分伪类

一个简单的WXSS示例:

.container {
  padding: 20rpx;
}

.title {
  font-size: 32rpx;
  font-weight: bold;
  color: #333;
}

.item {
  padding: 10rpx 0;
  border-bottom: 1rpx solid #eee;
}

3. JavaScript逻辑层

小程序的逻辑层用JavaScript,但是运行环境和浏览器不同:

  • 没有DOM和BOM:小程序的逻辑层没有windowdocument等对象,不能操作DOM
  • 模块化:用requiremodule.exports,类似CommonJS
  • 页面逻辑:每个页面有一个.js文件,定义页面的数据、方法、生命周期
  • App实例:app.js定义全局的App实例,有全局数据和生命周期
  • API:微信提供了丰富的API,如wx.request(网络请求)、wx.login(登录)、wx.getUserInfo(获取用户信息)、wx.navigateTo(页面跳转)等

一个简单的页面JS示例:

Page({
  data: {
    title: '我的小程序',
    list: []
  },

  onLoad() {
    this.loadData();
  },

  loadData() {
    wx.request({
      url: 'https://api.example.com/list',
      success: (res) => {
        this.setData({ list: res.data });
      }
    });
  },

  handleClick() {
    wx.showToast({ title: '点击了' });
  }
});

4. 双线程架构

小程序的渲染架构是双线程——逻辑层和视图层分离:

  • 视图层:由WebView渲染,负责WXML和WXSS的渲染
  • 逻辑层:由JSCore运行,负责JavaScript逻辑
  • 两个线程通过微信客户端(Native)进行通信

这种架构的好处是:

  • 逻辑层和视图层互不阻塞,JS执行不会阻塞UI渲染
  • 性能更好,流畅度接近原生APP
  • 安全性更好,JS不能直接操作DOM,避免了一些安全问题

但是也有一些限制:

  • JS不能操作DOM,不能用jQuery等操作DOM的库
  • 逻辑层和视图层通信有开销,频繁的数据更新可能有性能问题
  • 不能用浏览器的API(如window、document、location等)

四、对前端开发者的机会

说了这么多技术细节,回到正题:小程序对前端开发者来说,有哪些机会?

1. 新的就业机会

小程序推出之后,大量的企业和商家需要开发小程序——电商、餐饮、零售、服务、教育、医疗、金融……几乎所有行业都需要小程序。

这就创造了大量的就业机会——小程序开发工程师、小程序产品经理、小程序设计师、小程序运营等。前端开发者因为有HTML/CSS/JavaScript基础,学习小程序很快,是小程序开发的主力军。

据我了解,2016年小程序内测之后,很多公司都在招小程序开发者,薪资也不低。这对前端开发者来说,是一个新的就业方向。

2. 新的创业机会

小程序降低了应用开发的门槛——不需要开发iOS和Android两套,不需要上架应用商店,不需要用户下载安装。一个前端开发者,加上一个设计师,就能开发一个小程序。

这给了前端开发者更多的创业机会——可以自己开发小程序,做工具、做内容、做电商、做服务,不需要依赖大公司,不需要大量的资金和人力。

我身边就有朋友,辞职做小程序创业,做了一个工具类小程序,用户量很快就起来了,虽然还没赚大钱,但是已经能养活自己了。

3. 技术能力的迁移和提升

小程序的开发技术(WXML/WXSS/JS)和传统的Web开发技术(HTML/CSS/JS)很像,前端开发者学习小程序的成本很低。

而且,小程序的一些技术理念(数据绑定、组件化、双线程架构)和现代前端框架(Vue、React)很像,学习小程序也能提升前端开发者的技术能力。

另外,小程序的开发涉及到微信生态、移动端开发、产品思维等,能让前端开发者拓宽视野,不仅仅是"切图仔",而是能独立开发一个完整的应用。

4. 自由职业和副业机会

小程序开发需求大,但是很多小公司和商家没有自己的开发团队,需要外包。这给了前端开发者自由职业和副业的机会。

前端开发者可以在业余时间接小程序外包项目,赚外快。一个简单的小程序,外包价格可能几千到几万,对于有经验的前端开发者来说,可能一两周就能做完。

我认识一个前端开发者,上班之余接小程序外包,一个月能接一两个项目,副业收入比工资还高。

五、对前端开发者的危机

当然,小程序也带来了一些危机,不能只看到机会。

1. 封闭生态,技术受限

小程序是封闭的——它运行在微信内部,只能用微信提供的API和组件,不能随意使用浏览器的API,不能随意引入第三方库,不能操作DOM。

这种封闭性,限制了前端开发者的技术能力。在小程序开发中,你不能用jQuery、不能用DOM操作、不能用很多前端库和框架,只能用微信提供的那一套。

长期做小程序开发,可能会让前端开发者的技术视野变窄,脱离主流的前端技术生态。

2. 去APP化,可能减少原生开发需求

小程序的目标之一是"替代一部分低频APP"——用户不需要下载那么多APP,用小程序就够了。

如果小程序真的能替代一部分APP,那么原生APP开发的需求可能会减少。这对原生开发者(iOS/Android)是危机,对前端开发者来说,虽然小程序开发需求增加了,但是整体的应用开发市场可能会被压缩。

而且,小程序依附于微信生态,开发者没有自己的用户和品牌,用户是微信的,不是你的。微信可以随时改变规则、限制能力、甚至封杀你的小程序,你没有话语权。

3. 门槛降低,竞争加剧

小程序的开发门槛比原生APP低,比Web开发也高不了多少。这意味着,更多的人可以进入小程序开发领域——前端开发者、后端开发者、设计师、甚至产品经理,都能学一学就做小程序。

门槛降低,竞争就会加剧。小程序开发者越来越多,但是需求是有限的,薪资可能会被拉低,外包价格可能会下降。

而且,小程序的开发越来越标准化、模板化,很多简单的小程序,用模板和可视化工具就能做,不需要专业的开发者。这可能会让低端的小程序开发者失去竞争力。

4. 技术栈碎片化

小程序是微信的,但是其他平台也推出了类似的产品——支付宝小程序、百度小程序、字节跳动小程序(抖音/头条)。

每个平台的小程序,技术栈都不完全一样——API不同、组件不同、审核规范不同。如果你要做多平台小程序,就要维护多套代码,或者用跨平台框架(如Taro、uni-app)。

这就导致了技术栈的碎片化——前端开发者要学微信小程序、支付宝小程序、百度小程序、字节小程序,还要学各种跨平台框架,技术栈越来越乱,学习成本越来越高。

六、前端开发者应该如何应对

面对小程序带来的机会和危机,前端开发者应该如何应对?

1. 拥抱变化,学习小程序

小程序是一个新的机会,不要抗拒,要拥抱变化。前端开发者有HTML/CSS/JavaScript基础,学习小程序很快,花一两周时间就能上手。

学习小程序,不仅能获得新的就业和创业机会,还能提升自己的技术能力,拓宽视野。

2. 夯实基础,不局限于小程序

虽然小程序是机会,但是不要只做小程序,不要把自己局限在小程序的技术栈里。

前端开发者的核心能力,是HTML/CSS/JavaScript基础、是工程化能力、是架构能力、是解决问题的能力。这些能力,在任何前端领域(Web、小程序、APP、桌面端)都是通用的。

夯实基础,提升核心能力,不要只做"小程序开发者",要做"前端工程师"。这样,无论技术怎么变,你都有竞争力。

3. 关注跨平台方案

小程序技术栈碎片化,是一个问题。关注跨平台方案(如Taro、uni-app、mpvue),用一套代码编译到多个平台,能提高开发效率,减少维护成本。

但是,跨平台框架也有局限性——性能可能不如原生、部分API可能不支持、调试可能不方便。要根据项目需求,选择合适的方案。

4. 拓宽技能栈,向全栈发展

小程序开发不仅仅是前端,还涉及到后端、数据库、产品、运营等。前端开发者可以拓宽技能栈,向全栈发展——不仅能做前端,还能做后端、做产品、做运营。

全栈开发者,能独立开发一个完整的小程序,从前端到后端,从产品到运营,都能搞定。这样的开发者,竞争力更强,创业的可能性也更大。

5. 保持学习,关注趋势

技术在不断变化,小程序也在不断进化。前端开发者要保持学习,关注技术趋势——小程序的新功能、新框架、新玩法,以及其他前端领域的新技术(如WebAssembly、PWA、Serverless等)。

只有不断学习,才能跟上技术的变化,不被淘汰。

七、写在最后

微信小程序来了,对前端开发者来说,既是机会,也是危机。

机会在于:新的就业机会、新的创业机会、技术能力的迁移和提升、自由职业和副业机会。

危机在于:封闭生态技术受限、去APP化可能减少原生开发需求、门槛降低竞争加剧、技术栈碎片化。

但是,机会和危机总是并存的。关键在于,你如何应对。

我的建议是:拥抱变化,学习小程序;夯实基础,不局限于小程序;关注跨平台方案;拓宽技能栈,向全栈发展;保持学习,关注趋势。

小程序不是洪水猛兽,也不是万能灵药。它只是一个新的技术、新的平台、新的机会。对于有准备、有能力、愿意学习的前端开发者来说,小程序是机会;对于不思进取、固步自封的开发者来说,小程序是危机。

最后,用一句话总结:技术在变,但是核心能力不变。夯实基础,保持学习,无论技术怎么变,你都能立于不败之地。

愿每一个前端开发者,都能在小程序的浪潮中,找到属于自己的机会。愿我们都能不断学习、不断成长,不被技术的浪潮淘汰。

小程序来了,你准备好了吗?