微信

前端

用加载画面改善用户体验

毋庸置疑,单页面应用(Single Page Application,以下简称 SPA)正在变得越来越流行。SPA 具有前后端分离、接口重用度高、操作响应快速等优点,在用户体验上相比传统的网站也更接近原生应用。但与此同时,SPA 的体积却在不断增大,导致加载所需的时间越来越长,而这个问题在微信里面特别突出。 微信中的加载问题 首先,微信通常安装在移动设备上,网络的速度并不像固定宽带那么有保障,虽然 4G 已经普及,但总有些地方或某些时候网络没那么理想。在网络状况不佳时,加载较大的 SPA 耗时较长,屏幕表现为长时间白屏。 然后,微信对网页的缓存机制跟一般的浏览器不同。即使你没在服务器上进行特别的配置,它默认就会缓存 html、css、javascript 等它认为是“静态”的内容,而且在缓存有效期间“拒绝”去服务器上看看是否有更新,给不少新接触微信开发的程序员造成困扰。反过来,当你希望它将某个内容长期缓存,并通过响应头部的信息明确告知时,它也不能很好的遵守。说实话,

By 熊立丁

前端

Hash, PushState 和微信 JSSDK 授权

最近将 riot.js 升级到了 3.0,并用上了新版本的 riot-route,原先用了一年多的 2.2.4 版本内置的 riot.route 只支持 hash 形式的 SPA 单页面应用,riot-route 则支持 pushState。 Hash 方式有个缺点,就是服务器不知道地址栏中 # 之后的内容,放在微信里,就导致了未授权用户授权后想返回原界面需要借助 JS 来实现,导致历史记录多了一条,用户按返回键无法退出(返回上一页面后又被 JS “前进”了)。 PushState 方式就没有这个问题,可以直接用 HTTP 302 重定向过来,不影响历史记录和返回按钮功能。 于是在新项目中开始采用 pushState 方式。 不过等到应用到了微信环境中,又冒出来一个问题,通过

By 熊立丁

前端

微信 JSSDK 在 Android 和 iOS 的一处不一致

今天在使用微信的 JSSDK 时遇到一个诡异的问题:同一套代码,在 Android 中正确,在 iOS 中却失效。 于是开启了 debug,发现在执行 wx.config() 函数时就出现了不同的结果,Android 是 {"errMsg":"config:ok"},而 iOS 是 {"errMsg":"config:fail"}。即使此时我修改了代码确保传入完全相同的参数。 最终发现是在参数 nonceStr 上出了问题,这是一个用于生成签名的随机字符串,为了方便,我直接使用了一个随机数,因此其真正的类型并不是字符串,结果就出现了 Android 和 iOS 中的不同表现。 我想这处不一致,微信开发团队都未必知道。

By 熊立丁

前端

微信 JSSDK 在 Android 和 iOS 的一处不一致

今天在使用微信的 JSSDK 时遇到一个诡异的问题:同一套代码,在 Android 中正确,在 iOS 中却失效。 于是开启了 debug,发现在执行 wx.config() 函数时就出现了不同的结果,Android 是 {"errMsg":"config:ok"},而 iOS 是 {"errMsg":"config:fail"}。即使此时我修改了代码确保传入完全相同的参数。 最终发现是在参数 nonceStr 上出了问题,这是一个用于生成签名的随机字符串,为了方便,我直接使用了一个随机数,因此其真正的类型并不是字符串,结果就出现了 Android 和 iOS 中的不同表现。 我想这处不一致,微信开发团队都未必知道。

By 熊立丁
浙ICP备15043004号-1