在angularjs 1.2中,像过滤ng-repeat多行(> 2,000行)的操作可能变得非常慢(> 1秒).
我知道我可以使用limitTo分页,自定义过滤器等来优化执行时间,但我仍然有兴趣知道在浏览器忙于运行长脚本时是否可以显示加载动画.
在角度的情况下,我认为可以在$digest运行时调用,因为这似乎是占用大部分时间的主要功能,并且可能被多次调用.
在一个相关的问题中,没有给出有用的答案.任何帮助非常感谢!
我想知道什么是更高效和更快的性能:
在一个大表或多个没有索引的小表上有索引?
由于这是一个相当抽象的问题,让我让它变得更实用:
我有一个包含用户统计信息的表(20,000个用户和大约3000万行).该表有10列,包括user_id,actions,timestamps等
最常见的应用是:通过插入数据user_id和user_ID的检索数据(SELECT报表从不包含多个user_id's).
到目前为止,我有一个INDEXon user_id和查询看起来像这样
SELECT * FROM statistics WHERE user_id = 1
Run Code Online (Sandbox Code Playgroud)
现在,随着越来越多的行,表变得越来越慢.INSERT陈述减慢因为INDEX变得越来越大; SELECT语句慢下来,因为有更多行要搜索.
现在我想知道为什么没有为每个用户提供一个统计表,而是将查询语法更改为:
SELECT * FROM statistics_1
Run Code Online (Sandbox Code Playgroud)
哪里显然1代表user_id.
这样一来,没有INDEX需要,有远在每个表中的数据较少,所以INSERT并SELECT声明要快很多.
现在我再次提出问题:
处理这么多表(在我的情况下是20,000)而不是使用一个带有一个表的表是否有任何现实世界的缺点INDEX?
我的方法是否真的可以加快速度,或者查找表最终会减慢速度而不是一切?
我在LAMP环境中发现了一个奇怪的现象.
在前端,我用jQuery执行一个AJAX post请求,如下所示:
$.post('save.php', {data1: d1, data2: d2, [...], dataN: dN})
Run Code Online (Sandbox Code Playgroud)
的变量d1,以dN从网站(例如,从文字输入,文字区域,复选框等)与jQuery预先收集.
该文件save.php将post参数data1传递给dataN一个查询并将其保存在数据库中.
除非我在请求期间更改页面(例如,通过单击链接),否则请求大约需要500毫秒并且没有问题.
通常情况下,我希望请求被中止和忽略(这很好)但是(这是奇怪的行为)请求似乎已经完成,但只有部分数据被传输并因此被保存.
这意味着,例如,PHP脚本只保存data1到data5并设置data6到dataN空.
这个问题似乎已经被AJAX请求(不是PHP脚本),因为场引起$_POST['data6'],以$_POST['dataN']在PHP中没有设置在这种情况下.
所以我的问题:
为什么会发生这种情况(这是预期的行为)?
我怎么能避免呢?
更新
问题既不是jQuery也不是php.jQuery正确收集值并尝试将它们发布到php.我刚刚验证了它 - 它有效.另一方面,php脚本处理它按预期获得的所有内容 - 它只是没有收到整个请求.
所以问题必然是被中断的请求本身.与我预期它不会中止或失败不同,它仍会传输所有数据直到中断.
然后php获取此帖子数据并开始处理它 - 显然缺少一些信息.
更新2
我加入一个参数固定的问题eof后dataN,并检查它是否是PHP设置.通过这种方式,我可以确保传输了整个请求.
然而,这并不能解决我仍然不理解的问题的根源.
有人帮忙吗?
我正在构建一个使用filter参数来控制搜索结果的REST API .例如,可以通过调用以下方式搜索用户:
GET /users/?filter=name%3Dfoo
Run Code Online (Sandbox Code Playgroud)
现在,我的API应该允许许多不同的filter运营商.数字运算符例如equals,greater than,less than,字符串运算等contains,begins with或ends with和日期运算符,例如year of或timediff.此外,AND和OR组合是可能的.
基本上,我想支持底层MySQL数据库运算符的子集.
我发现很多不同的实现(两个很好的例子是Google Analytics和LongJump)似乎使用自定义语法.
看看我的要求,我可能会设计一个非常类似于MySQL运算符语法的自定义语法.
但是,我想知道是否建立了我应该遵循的最佳实践以及是否应该考虑其他任何事情.谢谢!
是否有可能得到的四个实际的顶点坐标<div />是已经用CSS3属性,如scale,skew和rotate?
例:
在CSS3转换之前,坐标是
x1y1: 0,0
x1y2: 0,200
x2y1: 200,0
x2yw: 200,200
Run Code Online (Sandbox Code Playgroud)
div看起来像这样:

经过一点点CSS3魔术后transform: skew(10deg, 30deg) rotate(30deg) scale(1, 2);
它看起来像这样:

如何获得实际角点(不是边界框)的坐标(使用javascript)?任何帮助非常感谢.
我正在开发一个宽度为640px的网络应用程序.
在head我设置的文件中
<meta name="viewport" content = "width=640, user-scalable=no" />
Run Code Online (Sandbox Code Playgroud)
所以内容很好地显示和水平拉伸.
这在iOS上完美运行,但在Android中浏览器打开放大的网站,因此用户必须双击缩小和整个页面.
当我更改视口设置以省略user-scalable标记时:
<meta name="viewport" content="width=640" />
Run Code Online (Sandbox Code Playgroud)
Android浏览器很好地调整到640px - 所以它的工作原理.
然而现在的问题是,用户可以在Android和iOS上放大和缩小,因为user-scalable标签未设置.
如何禁止缩放,同时在Android上将视口宽度设置为640px?
我有一个隐藏控件的嵌入式YouTube视频:
<iframe id="ytplayer" type="text/html" width="400" height="225"
src="http://www.youtube.com/embed/dMH0bHeiRNg?rel=0&controls=0&showinfo=0
&loop=1&hd=1&modestbranding=1&enablejsapi=1&playerapiid=ytplayer"
frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)
我可以使用youtube Javascript API来控制它.
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('ytplayer', {
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
Run Code Online (Sandbox Code Playgroud)
像player.playVideo()等等的东西完美地工作.现在我正在寻找一种方法,通过Javascript调用使视频在全屏模式下播放,但我在API中找不到任何方法.
它甚至可能(没有控制),如果是这样 - 如何?
我正在尝试使用angularjs 1.2.15构建一个分页指令:
这是我的看法:
<input type="text" ng-model="filter.user">
<input type="number" ng-model="filter.limit" ng-init="filter.limit=5">
<ul>
<li ng-repeat="user in (filteredUsers = (users | orderBy:order:reverse | filter:filter.user ) | limitTo: filter.limit)" ng-click="showDetails(user)">
{{user.id}} / {{user.firstname}} {{user.lastname}}
</li>
</ul>
<div pagination data='filteredUsers' limit='filter.limit'></div>
Run Code Online (Sandbox Code Playgroud)
这是我的分页指令:
app.directive('pagination', function(){
return {
restrict: 'A',
templateUrl: 'partials/pagination.html',
scope: {
data: '=data',
limit: '=limit'
}
}
})
Run Code Online (Sandbox Code Playgroud)
没有分页指令,一切都很完美.但是,一旦我加载页面,我的新指令就会$rootScope:infdig出现一个我不明白的错误,因为该指令没有做任何事情来操纵可能最终无限循环的数据.
这里有什么问题,我该如何解决?谢谢!
更新:
这是控制器和资源.
控制器:
usersModule.controller('usersController',
function ($scope, Users) {
function init(){
$scope.users = Users.get();
}
init();
})
Run Code Online (Sandbox Code Playgroud)
资源(从REST API获取用户数组):
app.factory('Users', function($resource) {
return …Run Code Online (Sandbox Code Playgroud) 我有一个多维的PHP数组,代表一个像这样的表
-------------
| A | 0 | A |
|---|---|---|
| 0 | 0 | 0 |
|---|---|---|
| A | 0 | A |
-------------
Run Code Online (Sandbox Code Playgroud)
所以数组看起来像这样:
array (size=3)
0 =>
array (size=3)
0 => string 'A' (length=1)
1 => string '0' (length=1)
2 => string 'A' (length=1)
1 =>
array (size=3)
0 => string '0' (length=1)
1 => string '0' (length=1)
2 => string '0' (length=1)
2 =>
array (size=3)
0 => string 'A' (length=1)
1 => string '0' …Run Code Online (Sandbox Code Playgroud) 在令人满意的情况下使用无序(或有序)列表让我头疼.
每当我想通过按ENTER两次结束编辑列表时,浏览器将关闭<ul />但插入包含a的<p />(Firefox)或<div />(Chrome)标签<br />.
这里的例子
我的目标是避免多余的<p />或 <div />,而是直接关闭<ul />.
我试图修改Tim Down的解决方案,这将阻止浏览器插入<p />或 <div />按下ENTER,而是插入一个干净的<br />标签.
这里的例子
但不幸的是,使用该解决方案的时候<ul />是从来没有浏览器,因为只有关闭<br />标签插入内的<li />项目.
所以我的问题是:
如何<ul />在最后一个空按Enter键时通过插入节点或粘贴html 来主动关闭<li />?
更新:如果问题不明确:我正在寻找一种方法来关闭<ul />没有插入<p />或<div />标签,但只是插入一个良好的旧平原<br />而不是