小编bit*_*inn的帖子

雄辩的收集:计数和检测空

这可能是一个微不足道的问题,但我想知道Laravel是否建议某种方法来检查返回的Eloquent集合是否$result = Model::where(...)->get()为空,以及计算元素的数量.

我们目前正在使用!$result检测空结果,是否足够?至于count($result)它是否真的涵盖了所有情况,包括空洞的结果?

laravel eloquent laravel-4 laravel-collection

242
推荐指数
8
解决办法
26万
查看次数

iOS 8删除了"minimal-ui"视口属性,还有其他"软全屏"解决方案吗?

(这是一个多部分的问题,我将尽力总结这个场景.)

我们目前正在构建一个响应式Web应用程序(新闻阅读器),允许用户在选项卡式内容之间滑动,以及在每个选项卡式内容中垂直滚动.

解决此问题的常见方法是使用一个包装器div填充浏览器视口,设置overflowhiddenauto,然后在其中水平和/或垂直滚动​​.

这种方法很好,但有一个主要缺点:由于文档的高度与浏览器视口完全相同,因此移动浏览器不会隐藏地址栏/导航菜单.

许多hacks和视口属性使我们能够获得更多的屏幕空间,但没有一个像minimal-ui(在iOS 7.1中引入)那样有效.

昨天有消息称iOS 8 beta4已从minimal-uiMobile Safari中删除(参见iOS 8发行说明中的 Webkit部分),这让我们感到奇怪:

Q1.是否仍然可以隐藏Mobile Safari上的地址栏?

据我们所知,iOS的7 不再响应window.scrollTo破解,这意味着我们不得不忍受较小的屏幕空间,除非我们采取垂直布局或使用mobile-web-app-capable.

Q2.是否仍然可以获得类似的软全屏体验?

通过软全屏我真的意味着不使用mobile-web-app-capable元标记.

我们的Web应用程序可以访问,任何页面都可以使用本机浏览器菜单加入书签或共享.通过添加mobile-web-app-capable我们阻止用户调用这样的菜单(当它保存到主屏幕时),这会混淆和对抗用户.

minimal-ui曾经是中间地带,默认隐藏菜单但是通过点击可以访问它 - 虽然Apple可能已经删除它由于其他可访问性问题(例如用户不知道点击激活菜单的位置).

Q3.全屏体验值得一试吗?

似乎全屏API不会很快进入iOS,但即便如此,我也看不到菜单是如何保持可访问的(Android上的Chrome也是如此).

在这种情况下,也许我们应该保持原样的移动游猎,并考虑视口高度(对于iPhone 5 +,它是460 = 568 - 108,其中108包括操作系统栏,地址栏和导航菜单;对于iPhone 4或年纪大了,它是372).

很想听到一些替代方案(除了构建本机应用程序).

javascript css mobile-safari ios responsive-design

185
推荐指数
4
解决办法
14万
查看次数

使用mongodump的最小权限(转储特定数据库)

我们似乎无法找到mongodump关于在特定数据库上运行需要哪些权限(用户角色)的任何结论性文档.

说我有一个名为数据库x和用户y有以下角色就可以了roles: [ "readWrite", "dbAdmin" ],还有2个用户a,并badmin收集与roles: [ "userAdminAnyDatabase" ]roles: [ "dbAdminAnyDatabase" ],似乎他们都没有运行正确的权限mongodump:

mongodump --db x --username y --password --authenticationDatabase x

Tue Dec 10 17:04:23.901     x.system.users to dump/x/system.users.bson
assertion: 11010 count fails:{ ok: 0.0, errmsg: "unauthorized" }

mongodump --db x --username a --password --authenticationDatabase admin

Tue Dec 10 17:06:19.674 DATABASE: x  to     dump/x
assertion: 13106 nextSafe(): { $err: "not authorized for …
Run Code Online (Sandbox Code Playgroud)

mongodb

23
推荐指数
3
解决办法
2万
查看次数

当浏览器没有立即触发popstate事件时如何处理后退按钮

这个问题可能听起来很奇怪,因为大多数时候popstate会在用户按下后退按钮时同步触发.

但是,W3C规范规定允许UA(浏览器)在遍历历史时对popstate进行排队(参见第14项),即.popstate是异步触发的(即使此时URL已更改).

浏览器供应商以不同方式解释和实现此规 Mozilla决定 Firefox应该能够在popstate之前发布load,并且有充分的理由,以便慢速图像不会阻塞popstate.

Chrome/Safari另有决定,它引发了我们的问题:

在管理Web应用程序的历史记录时,通常需要尽快启动历史记录管理,例如.在DOMContentLoaded代替load.但作为回报,用户无法退出pushState,因为所有人popstate都排队等候load.

我们正在寻求处理此类方案的方法的建议.我自己想出几个:

  • Lazyload图像,因此load可以尽快解雇.
  • 阻止UI直到load被触发.
  • Init框架load而不是DOMContentLoaded.

有更好的解决方案吗?

更新:当之前有一个ajax触发时load,如果那些请求导致DOM更改,并且DOM更改恰好有一些图像,load则会延迟,直到这些图像被加载/超时,这意味着popstate排队等待更长时间.

更新2:要为它添加一个简单的演示,请访问带有chrome的jsbin页面,看到popstate将被阻止直到load被触发.您可以比较缓存图像和未缓存图像之间的结果.

javascript html5 browser-history

22
推荐指数
1
解决办法
2473
查看次数

CSS:将鼠标悬停在移动设备或其他设备上作为切换

我正在做一个简单的:hover滑入式封面,如图所示,它应该在"最喜欢的文章"控件中滑动,然后用户可以点击以收藏此项目.

虽然它在鼠标悬停和点击的桌面上运行良好,但我不确定它是否可以用作移动设备或其他设备上的有效控件(即点击切换,然后再次点击收藏项目).

如果我理解正确,至少在iOS(Safari)和Android(Chrome)上,默认的浏览器行为是模拟触摸为hoverclick.但这是一个标准吗?例如.

  • Windows Phone或Wii U会不会这样做?
  • click被解雇约300ms后hover,所以可以有鬼点击问题?

我当然可以在这个元素上绑定一个click/touch事件,只是想知道:hover现在css 是否足够.

澄清一点:我不是在询问:hover支持,它只能在指针驱动的环境中产生感觉.我问的是,当用户点击/点击时,设备是否可以并且应该处理可悬停的元素(如iOS/Android那样)

在此输入图像描述

javascript css mobile responsive-design

19
推荐指数
1
解决办法
2万
查看次数

使用javascript检测设备CPU/GPU性能?

(问题不是特定于three.js,但我会以它为例)

我最近一直在使用three.js开发一个Web应用程序界面,并在WebGL和Canvas渲染器(用于桌面浏览器)之间编写了一些很好的回退.

但现在问题变成了如何正确检测设备功能,问题有两个方面:

  1. 浏览器功能(静态功能,如webgl/canvas):这在很大程度上是通过简单的功能检测在Web社区中解决的.
  2. 设备功能:这是困难的部分,如果没有直接访问设备的硬件信息,我们需要一些方法来判断我们是否应该回退到硬件要求较低的代码.

一个值得注意的例子:Firefox移动/ Opera移动声称支持WebGL但是有缺陷或受到设备硬件的限制.

到目前为止我提出了一些解决方法:

  1. 使用通用功能作为性能指标 - 例如,触摸设备通常具有不太强大的硬件.骗局:这不是面向未来的.
  2. 黑名单已知错误的浏览器/设备 - UA嗅探将是不可避免的,并且它很难维护.
  3. 性能测试 - 因此问题除了运行代码和测量帧率之外,还有更好的选择吗?

或者也许它不一定很难,还有其他建议吗?

javascript cpu performance html5 three.js

17
推荐指数
2
解决办法
6367
查看次数

PHP 5.5,在什么情况下PHP会导致非常高的提交内存

我试图找出PHP不消耗大量内存但反而导致非常高的Committed_AS结果的情况.

以此munin内存报告为例:

munin记忆

一旦我开始我们的Laravel队列(10~30名工人),承诺的记忆就会通过屋顶.我们在这个vps实例上有2G内存+ 2G交换,到目前为止大约有600M未使用的内存(大约30%免费).

如果我理解 Committed_AS正确的话,那意味着99.9%保证out of memory在目前的工作量下没有问题,并且它似乎表明我们需要将vps内存增加三倍以保证安全.

我试图将队列数量从30减少到10左右,但正如你所看到的那样,绿线非常高.

至于设置:启用了PHP 5.5 opcache的Laravel 4.1.我们使用spawn实例的upstart脚本如下:

instance $N

exec start-stop-daemon --start --make-pidfile --pidfile /var/run/laravel_queue.$N.pid --chuid $USER --chdir $HOME --exec /usr/bin/php artisan queue:listen -- --queue=$N --timeout=60 --delay=120 --sleep=30 --memory=32 --tries=3 >> /var/log/laravel_queue.$N.log 2>&1
Run Code Online (Sandbox Code Playgroud)

我看到很多情况下高交换使用意味着内存不足,但我们的交换使用率很低,所以我不确定在这里适当的故障排除步骤.

PS:我们在Laravel 4.1和vps升级之前没有这个问题,这里有一张图片来证明这一点.

老munin记忆

也许我应该将我的问题改写为:Committed_AS如何准确计算以及PHP如何计算它?


更新2014.1.29:

我有一个关于这个问题的理论:由于laravel队列工作者sleep()在等待队列中的新作业时实际上使用PHP (在我的情况下beanstalkd),这表明高Committed_AS估计是由于相对较低的工作负载和相对较高的内存消耗.

这看起来很有意义Committed_AS〜= avg. memory usage / avg. workload.sleep()正确的PHP ,使用很少甚至没有CPU; 然而它所消耗的任何记忆仍然是保留的.这导致了服务器的思考:嘿,即使负载很小(平均),你也会使用如此多的内存(平均而言),你应该为更高的负载做好准备(但在这种情况下,更高的负载不会导致更高的内存)脚印)

如果有人想测试这个理论,我会很乐意给他们奖励.

php ubuntu memory-management munin laravel

17
推荐指数
1
解决办法
1068
查看次数

何时使用Eloquent(ORM)而不是Fluent(查询生成器)?

也许是由于我的Codeigniter背景,我发现自己并没有很多享受Laravel 4的Eloquent ORM.说我想写一个查询按ID排序帖子列表,降序,Eloquent怎么能击败清晰度DB::table('posts')->orderBy('id', 'desc')->get();

是否有充分理由使用Eloquent over Fluent,主要是为了加入桌子?

laravel eloquent laravel-4

13
推荐指数
1
解决办法
2万
查看次数

如何在Laravel 4中注入多个共享相同接口的类

说我有一个接口CrawlerInterface与实现PageCrawlerFeedCrawler; 如果我们碰巧在控制器中需要两个类,那么如何通过构造函数注入实现?

以前我们使用中心ServiceProvider来注册(即App::bind)这样的类,但在大多数情况下我们只有一个接口的实现,所以这个问题还没有发生在我们身上.

PS:我也想知道这个问题是否表明我们应该拆分控制器.


更新:

感谢您的评论和回复,解释说,界面只有一个公共方法:crawl($uri),并且页面/提要抓取工具都将其实现为given a resource identifier, return resource.


我的后续问题:

假设我们处于calculator加法,减法和乘法共享同一个接口的情况下Operation,它只有一个公共方法run,在某些时候我们仍然会遇到这个问题吧?我们如何处理这些情况ServiceProvider

php dependency-injection simplepie laravel laravel-4

13
推荐指数
2
解决办法
4910
查看次数

行高是否由CSS字体堆栈中的第一个字体决定?

我问这个是因为当我尝试为多语言内容(如英文和中文)创建CSS字体堆栈时,最终渲染会受到堆栈中第一个字体的影响(通常是拉丁文字体,因为大多数中文字体都带有拉丁文支持).

例如,请参阅此Codepen.

div.a p {
    overflow: hidden;
}

p {
    background-color: red;
    border: 1px solid black;
    display: inline-block;
}

.chinese-only {
    font-family: "Hiragino Sans GB", sans-serif;
    font-size: 24px;
    line-height: 48px;
}

.english-chinese {
    font-family: "Avenir Next", "Hiragino Sans GB", sans-serif;
    font-size: 24px;
    line-height: 48px;
}

.chinese-english {
    font-family: "Hiragino Sans GB", "Avenir Next", sans-serif;
    font-size: 24px;
    line-height: 48px;
}
Run Code Online (Sandbox Code Playgroud)

我所看到的:

在此输入图像描述

由于中国字形只出现在中Hiragino Sans GB,我希望所有中国街区使用相同的线高.但是它们显然受到Avenir Next在堆栈顶部添加字体的影响.

由于OSX上的Firefox和Chrome都使我的示例相同,我想知道CSS规范是否提到了这一点.当您回退丢失的字形时,CSS 2.1字体规范似乎没有说明如何处理行高.

更新:Safari确实以不同的方式呈现,但不幸的是,差异是由于overflow: hidden,而不是字形回退.我更新的示例 …

css fonts

9
推荐指数
1
解决办法
428
查看次数