Mobile App 缓存设计逻辑
出了什么问题?
最近在用 PhoneGap 做手机端 App,第一个版本出来后,给人的整体感觉就是:卡!慢!非常卡!非常慢!
每次切换 tab 都要5秒左右,这个实在是无法接受啊。
慢不是你的错
本来,用 PhoneGap 就会让人产生质疑,它会不会很慢?
所以一出现慢的问题,大部分人一开始都会怪到 PhoneGap 头上吧?我一开始也在质疑自己,用 PhoneGap 是正确的选择吗?
最近在用 PhoneGap 做手机端 App,第一个版本出来后,给人的整体感觉就是:卡!慢!非常卡!非常慢!
每次切换 tab 都要5秒左右,这个实在是无法接受啊。
本来,用 PhoneGap 就会让人产生质疑,它会不会很慢?
所以一出现慢的问题,大部分人一开始都会怪到 PhoneGap 头上吧?我一开始也在质疑自己,用 PhoneGap 是正确的选择吗?
现象很简单,调用某个 WebService 的时候返回了如下的错误信息:
The request failed with HTTP status 417: Expectation failed.
实在是搞不懂这个错误是什么原因啊!解决办法很简单,按照如下文章在 web.config 中加入一段配置即可。
注意,不是在服务提供方那边加(加了也没用),而是在服务调用方那边加上。
解决方法:http://www.codeproject.com/Articles/94235/The-request-failed-with-HTTP-status-417-Expectatio
记得以前我很喜欢一句话:“当你觉得以前的代码很2的时候,就说明你进步了。”
好赞的一句话是不是?大学的时候,每隔一段时间就会有这样的感觉,感觉自己越来越NB了。
但是,总觉得自己还不算大师,可是差在哪?
最近有那么一段 js 代码,困扰了很久很久,开发环境又是 PhoneGap,所以没办法调试 js…
代码大致逻辑如下:
var options
options.error = function (model, xhr, options) {
if (xhr.status === 401) {
//todo: login
Backbone.sync(method, model, options)
return
}
}
options.success = function (model, xhr, options) {
//todo:
}
Backbone.sync(method, model, options)
逻辑很简单,就是如果登陆的时候返回401错误,就重新登陆一下,登陆完成后重新请求数据。
这段代码没有问题,但是这个逻辑 + zepto + backbone 就有问题了。
代码在第二次请求的时候,就会报一个错误: xhr 是一个对象而不是一个函数。
在距离正式关闭Google Reader还有4周左右的时间里,谷歌决定对外解释公司为何会关掉这一平台的原因。谷歌新闻与社交产品主管Richard Gringars告诉Wired.com,Google Reader已经是一种过时的新闻采集模式。
Gringars认为,对于进入一个每日新闻消费持续不断的时代,那种传统的新闻消费方式已经不适用智能机和平板用户。与此同时,谷歌建议Google Reader用户可以访问Google+来查阅新闻。
也许,谷歌的这一决定是为了向世人证明,他们是走在时代的前沿,他们的模式预示着未来的新闻阅读方式。
最近把项目中所有的日志都改成了 log4net ,同事也蠢蠢欲动,用起了 log4net。
但是一个大坑扑面而来…
现象是这样的,同事有两个项目:
控制台引用程序:在 assembly 里配置了 log4net 的配置文件地址。
业务逻辑层:引用了 log4net 并写日志了。
然后日志始终无法输出!
之前我一直天真地以为,解决方案中任何一个项目只要加上了[assembly: log4net.Config.XmlConfigurator(Watch=true)]
就可以正确地加载配置了!
据说在每一个互联网公司里,都有一个扫地的老太太。很偶然地,当她经过一个程序员的身边,扫一眼屏幕上的代码,会低声提醒对方说:小心,栈溢出了…
别看这是一个笑话,我那天真的遇上了!
只不过扫地老太太变成了前端工程师…
那天我在优化一个作业,里面有大批量的数据,为了监控我 Console.WriteLine
了。
然后前端工程师说:喂,不要用那么多的控制台输出,会影响性能的!
什么?控制台输出会影响性能?
我的三观瞬间崩塌了…
之前研究 iOS 开发,这书这块折腾了我很久很久!
老外这篇文章写得很清晰:
http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1
之前是有中文版的,后来针对 iOS6 有了更新,所以暂时还没有中文版。
这篇文章写的最详细,按照它说的一步步做下去,就可以实现推送了~
但是期间还是遇到了很多坑,而且总感觉没有完全理解,所以便有了这篇文章,自己帮自己梳理一下,也给大家一些帮助。
流水账式的教程我就不写了,上面那篇文章很详细了~
最新在 mac 和 windows 下用了各种 git 工具;有 shell 的,也有 GUI 的,并尝试着使用它们来进行工作。
经过一番实践后,给大家推荐一套我最喜欢的 git 工具。
另外也给大家推荐一些基本配置,可以让你的工作效率大大提升。
先给大家看一下我 .gitconfig 文件里的一些配置(mac & windows 都适用):
[color]
#开启着色功能
status = auto
diff = auto
branch = auto
interactive = auto
[merge]
#默认 merge 都加上 --no-ff
ff = false
[alias]
#别名
st = status
ci = "commit -m"
br = branch
co = checkout
cia = "commit -am"
df = diff
dt = difftool
mg = merge
mt = mergetool
ll = "log --oneline"
在研究 PhoneGap 的时候一直在想一个问题,怎么提高移动网络下的网络性能?特别是静态文件,多次加载完全是浪费。
HTTP 协议中控制缓存也比较纠结,总会有个 304 请求,而且各种协议,各种 HTTP header,都不统一。而且 304 实际上也是进行了一次 HTTP 请求的。
因为用的是 PhoneGap,可以用 Navtive Code 来进行扩展,所以想到一个点子,是否能有一个静态文件升级功能?远程有一个文件标记着静态文件包的最新版本,如果有更新,这个插件就自动把静态文件下载到本地。然后 PhoneGap 打开的页面使用本地缓存的静态文件即可。完全不需要任何请求!
有一个 jar 包,但是这个 jar 包是一个控制台应用程序,所以我想直接调用它的 main 函数来执行。
但是遇到一个很纠结的问题,这个 jar 包因为是一个控制台应用程序,所以遇到错误的时候,会直接执行 System.exit(-1),我的程序用它的时候就会直接被退出了…
但我更希望它可以抛出异常。
最近研究手机开发,iOS 的 APNS 真的是比 Android 先进很多啊~
虽然 Android 现在也有同样的东西了,但是在中国基本是废掉的…
APNS 原理和 iOS 设备上的实现,可以在下文中获得答案:(右上角可以切换成中文)
http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
但是,客户端实现了,服务端怎么实现了?
上面的教程中用 Php 实现了服务端的推送,代码也非常简单,原理也不难,就是实现 SSL Socket 并按照协议给苹果的服务器发送数据。
原文中的 Php 只用了不到50行就实现了。然后苦苦寻找,终于找到了 C# 版本和 Java 版本。
如果了解 APNS 原理后就会知道,iOS服务端只需要一个通用的 key(一个 App 一个 key),key 的密码,还有设备的 token(一个设备一个 token),就可以给设备发送推送了。
前一段时间看完了《七周七语言》,这本书的书写风格有点像教材,会要求你回家做作业。
但说实在的,不做作业真的无法理解里面的全部内容。
或许抽空我也应该再看一遍并且把里面的作业做一遍。
之前对 C# 最熟悉,所以难免会把里面的各种编程模型和 C# 进行比较了。
我自己的网站现在外国主机上,但是以前在国内,所以经也已经完成备案了。说备案之前我不得不吐槽一下:
第一个是吐槽备案的速度,工信部负责,它是国家公职部门,效率可想而知,大家懂的。
第二个是吐槽备案的意义,为什么要备案?
为什么要备案?备案是希望网站内容有违规违法的时候可以方便地找到当事人。
想法很好,但是互联网是全球的,我完全可以把不和谐的东西放到外国的服务器呗,这样就拿我没办法了。
其实工信部怕的不是常规意义的诈骗网站、黄色网站,怕的是XXX网站。为什么这么说?因为以前备案抓的很松的,大型正规网站自证清白才会去备案,个人网站最早以前都不管的。直到某一天,我的网站突然被封了!被告知现在所有网站要备案… 最近的局势大家都懂得,嗯…
那都说了备案是堵不死XXX网站的,那还有什么意义?没关系,境外网站的话还有 GFW 呢~
于是,一条完整的防线就建立了起来,境内备案,境外 GFW!天朝万岁!
自己的博客一步步走来其实并不容易,域名、空间、备案等等… 全部折腾完起码也要弄好几个月,还好这几个月主要是等待,不需要你弄什么。
建站第一步当然是买一个域名啦,所以本文会和大家聊聊买域名的各种事。
域名购买原则:一定要到国外买,千万不要在国内买!(除了 .cn, .org.cn, .com.cn 等)
首先,一个域名往往归一个国家或一个组织所管理,而同一个域名可以在各个域名供应商那买到,但价格和服务有所不同。
国家域名比较特殊,例如中国的相关域名(.cn, .org.cn, .com.cn 等)就没有开放给国外的域名供应商。因为国家需要对这几个域名做点限制吧。例如前段时间就不允许个人购买 .cn 域名了。
另外,作为一个个人博主,强烈不建议使用 .cn 相关的域名。
相对于国内,无论是价格、服务、稳定性(这个可以解决)等各个方面来看,国外的明显高于国内。国外又好又便宜,干嘛不买国外的呢?
最后,国外貌似只有 GoDaddy 支持支付宝,而且它本身也基本上是老外的首先,所以没有道理不用它啦!
购买方式很简单,注册、登陆、选购、支付即可。