小编Chr*_*her的帖子

当iPhone/Android进入睡眠状态时,JavaScript执行(settimeout等)会发生什么?

我有一个针对iOS和Android设备的jQuery Mobile网络应用程序.应用程序的一个组件是后台任务,它定期检查a.)对本地数据的更改以及b.)与服务器的连接.如果两者都为真,则任务会推送更改.

我正在使用一个简单的基于setTimeout()的函数来执行此任务.每个失败或成功条件都会在后台任务上调用setTimeout(),确保它以30秒的间隔运行.我使用上一个任务运行时的时间戳更新状态div以进行调试.

在任何桌面浏览器中,这都可以正常工作; 但是,在iOS或Android上,经过一段时间后,任务就会停止执行.我想知道这是否与设备的省电设置有关 - 当iOS进入待机状态时,是否会终止JavaScript执行?这似乎发生了.

如果是这样,恢复的最佳方式是什么?是否有可以挂钩的唤醒事件?如果没有,还有哪些其他选项不涉及依赖于用户交互的事件(我不想将整个页面绑定到单击事件只是为了重新启动后台任务).

mobile android web-applications settimeout ios

37
推荐指数
1
解决办法
3万
查看次数

普通的.NET Web服务应用程序中HTTP会话状态的替代方案

经过与ASP.NET页面生命周期及其性能的长期斗争,我们已经开始重构我们的Web应用程序,以在客户端实现Web服务(普通的.asmx .NET Web服务)和jQuery.注意:这不以任何方式实现MVC或ASP.NET,这些只是Web服务.

在应用程序的两个分配中,我们在单个页面中动态生成所有内容.在ASP.NET分配中,这意味着(由于页面生命周期)整个页面需要被拆除并重建(几乎)每个AJAX调用或更改为Web表单.这为旨在为许多并发用户提供服务的应用程序带来了巨大的可扩展性问题.在Web服务/ jQuery分配中,我们可以有选择地只关注需要向服务器发送或接收数据的DOM元素,这意味着更少的请求和更快的用户体验.

该应用程序的第一次迭代显示性能提高了一个数量级; 但是,随着我们开始构建越来越多的Web服务,应用程序的性能现在与ASP.NET分配的性能相当.

经过大量谷歌搜索/灵魂搜索和负载测试后,很明显HTTP Session是罪魁祸首.实质上,每次读取(有时通过简单地在Web服务方法范围中包含Session)都是阻塞调用,它会引入500ms的延迟.一旦你知道在哪里看,这在MSDN文献中有详细记载.实现时,Session(如果由同一用户使用多个Web服务)将异步请求转换为具有500ms缓冲区的同步请求.我们通过将所有AJAX调用链接为彼此的"成功"事件来缓解这种情况,从而使它们成为来自客户端的同步请求.这消除了请求对锁定的Session对象进行读取所导致的500ms延迟.

使客户端应用程序以"同步"方式运行已解决了许多性能问题; 然而,这只是短期内的一个临时解决方案.

什么可行的(可扩展的!)替代Session存在,再次记住,我们不是在ASP.NET或MVC或WCF等?我们最大的障碍是我们的元数据集合的持久性,该集合在登录时为每个用户初始化.这是应用程序中最昂贵的操作(10倍或更多),也是我们只想执行一次的操作.会议提供了一种简单的方式,让老人一次流汗,永不回头; 但这种方法看起来不太可行.

一种方法可能是消除这个单一的元数据集合神类,并将这个一神论类演变为半神论者的多神论集合.可以以更低的成本更频繁地完成半神人的实例化.可行,但需要大量的重构,广泛的开发和QA时间.另一个候选者只是将所有状态信息存储在数据库中,但这有其自身的成本 - 延迟并非最不重要.

是否有任何其他解决方案可能涉及较低的实施工作量?

c# ajax jquery state web-services

8
推荐指数
1
解决办法
3185
查看次数

将现有JavaScript项目导入Grunt/Brunch项目

我看了Paul Irish的演讲,宣布了Yeoman(www.yeoman.io),我迷上了运行连续构建环境的概念.不满足于等待Yeoman邀请,我尝试了Grunt和Brunch.两者都很容易安装,我可以轻松地启动和运行新项目.

我不明白如何将现有项目迁移到任何一个平台.我的项目使用单个命名空间,并对模块使用两个约定(一个用于实例化另一个实例),每个约束都包含在导出实例或命名空间的自执行匿名函数中.

我有至少200个模块和更多简单的辅助函数导出到命名空间; 因此,使用控制台在grunt/brunch项目中创建它们然后单独手动导入每个模块并不是一件有效的事情.此外,我使用至少15种不同的第三方JavaScript工具.我不清楚如何将它们带入.

以最少的重构和对任意第三方工具的支持,采用大型现有项目并将其迁移到Grunt/Brunch的最有效方法是什么?

更新:在这两个中,我发现Brunch更容易应对.如果您使用股票"骨架"(即"模板" - 从命令行{在您希望更改的文件夹中}执行"brunch new [project_name] --skeleton git://github.com/brunch /simple-js-skeleton.git")对于纯JS,你得到一个新的文件夹结构,实际上是非常敏感的.您在"app"(您自己的代码)或"供应商"(第三方)文件夹中输入的任何内容都将在文件编辑时自动重新编译(当您运行"早午餐手表"时).

这很好,除了.根据文档,您可以控制订单供应商脚本从Brunch config.coffee文件(JSON文本文件)编译和连接在一起.对此文件的更改似乎没有任何效果,因此您最终会遇到期望其他插件的插件的第三方竞争条件.

此外,当您将自己的代码放入自动创建的"app"文件夹时,您会获得一个自动编译的,实时的编辑版代码; 但它无法访问.早午餐会混淆窗口对象,因此我对window.myNameSpace的初始名称空间声明失败,并且对名称空间的所有后续库调用也会失败.这与Brunch的模块系统有关,我找不到任何文档.

我通过将我的命名空间类放在'vendor'文件夹中来解决这个问题,这确保了它附加到window对象; 但是,现在存在竞争条件:我的命名空间并不总是可用于我的所有模块.

现在的问题是这样的:

将所有内部和外部库复制到Brunch项目后,如何配置应用程序以合理的顺序加载它们?

javascript node.js brunch gruntjs

7
推荐指数
1
解决办法
4146
查看次数

如何从Mercurial repo中删除largefiles

另见这个问题.

在不知道我在做什么的情况下,我启用了largefiles扩展,提交了一个文件并将其推送到了窑中.现在我知道我的方式的错误,我需要永久地恢复这种变化.

我遵循了SO关于这个主题的指导; 我可以在本地删除大文件,但这不会影响窑中的远程回购.我试过在Kiln服务器上打开KilnRepositories中的repo并修改largefiles文件夹(以及从requires文件中删除'largefiles'),但是几次推/拉后文件夹和require的行返回.

有没有办法让这个永久?(设置要求readonly也不起作用).

mercurial tortoisehg large-files kiln

7
推荐指数
1
解决办法
3118
查看次数

在chrome中实现firebug的console.table

我正在将各种性能指标记录到控制台(如果存在).这个内容最好被视为一个表格,而FireBug的console.table()方法效果很好 - 但我的大部分用户都在Chrome中.

console.table()是一个很好的解决方案,因为我得到了格式良好的UI样式网格,而无需构建和维护专用的UI控件.目前,在Chrome中,我只能记录未格式化的文本.

或者,如果有一种方法可以在控制台中呈现 HTML内容,那也可以.我可以将html发送到控制台,但它会在元素选项卡中呈现DOM内容.我知道检查器只是HTML/JS/CSS - 所以它在技术上是可行的.事实上,当我检查检查员时,我可以做到 - 但这并不能解决现实世界的问题.

javascript console firebug google-chrome

5
推荐指数
1
解决办法
2460
查看次数

调用openDatabase的Mobile Safari中的状态错误,DOM异常11无效

我有一个在init上调用openDatabase()的webapp.这在桌面浏览器Chrome和Safari中运行良好; 但是,当我尝试在iOS 4.3.3上的Mobile Safari中打开应用程序时,我在第一页加载时遇到异常:

"错误:INVALID_STATE_ERROR:DOM异常11"

这在一个简单函数中的openDatabase()上失败:

       try {
            if( !window.openDatabase) {
                console.log('SQLite is not supported by this browser');
            }
            else {
                db = openDatabase('MyMobileDb', '1.0', 'MyMobileDb', 65536);
                if (doreset)
                {
                    //my drop and reset DB function
                } else
                {
                    //my init DB function
                }
            }
        }
        catch(e) {
            console.log(e);
        }
Run Code Online (Sandbox Code Playgroud)

未创建数据库,也无法与应用程序进一步交互.运行早期版本的iOS的其他开发人员没有遇到针对相同代码bade的此问题.我也从我们的QA团队获得Android报告类似行为的报告.Android 3.1有效,而2.2和2.1则无效.

我该怎么做才能解决这个问题?

javascript sqlite exception mobile-safari ios

3
推荐指数
1
解决办法
9491
查看次数