我们正在使用为银行构建的Angular应用程序来应对性能问题。
不幸的是,显示代码片段违反了合同。 无论如何,我可以描述正在进行的一些主要问题,我希望可以推荐最佳实践。
应用结构:
如果您看一下时间线。 我们在jQuery parse html方法,jQuery重新计算stye方法,GC事件(垃圾收集)上花费了大量时间。 我想将这些最小化应该可以加快速度。 它们都是Angular生命周期的一部分,但是可能有更好的方法来避免它们。 这是探查器的一些屏幕截图:
最终,随着重复表单的数量超过5,该应用程序变得迟钝。每种表单相对于其他表单都没有关系。 我们试图不监视表单之间的任何共享属性。
有一个明确的解决方案,可以使用maven-antrun-plugin
插件的test-jar
目标在maven项目之间共享通用测试代码(请参见此处)。
我需要对测试资源做类似的事情,特别是,我希望在测试过程中项目A的测试资源在项目B的类路径中可用。
对于项目A,需要声明:
<!-- Package and attach test resources to the list of artifacts: -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<jar destfile="${project.build.directory}/test-resources.jar">
<fileset dir="${project.basedir}/test-resources" />
</jar>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${project.build.directory}/test-resources.jar</file>
<type>jar</type>
<classifier>test-resources</classifier>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
在项目B中,它将是正常依赖项:
<dependency>
<groupId>myproject.groupId</groupId>
<artifactId>myartifact</artifactId>
<version>1.0-SNAPSHOT</version>
<classifier>test-resources</classifier>
<scope>test</scope>
</dependency>
问题:是否在所有情况下都有效? 是否可以在没有maven-antrun-plugin
的情况下打包资源(使用更多的“轻量级”插件)?
是否可以在运行时从Java设置环境变量应用?在Java 1.5 java.lang.System类中,有getenv()方法,我会只需要一个setenv()方法...
是否可以在java进程本身中修改环境变量? 不在子进程中。
是否可以通过JNI实现它? 那将如何工作?
谢谢。
编辑:好的,让我这样说-我们可以使用Java进行以下操作。 请回答。
Hemal Pandya回答说:“您可以修改当前进程和子进程的环境,但不能修改产生此进程的父进程的环境。” 你同意吗?
微软通过.NET Framework 4向BCL引入了IObservable<T>
接口,我想:“太好了,最后,我必须使用它!” 因此,我深入研究并阅读了帖子和文档,甚至实现了该模式。
这样做之后,我意识到基本实现实际上将所有T
事件发送给所有订阅者,而没有对其进行任何过滤。 即纯广播。 我在某处读到Observable模式是用于普通广播的。 我觉得这是不正确的,我缺少了一些东西。
我的问题:
如果添加过滤机制,则使用Observable模式与仅使用普通CLR事件有什么区别?
什么时候应该使用这种模式,什么时候应该选择使用普通的CLR事件?
可观察模式的主要优点是什么?
select syscall需要3个filedescriptor集,用于监视fds的可读/可写性以及filedescriptor上的“ exceptions”。
我的选择手册页对exceptfd
描述符集的描述不多。 它是干什么用的; 可以并且会在文件描述符上通知什么样的异常?
我假设这对于描述符类型可以是不同的……无论是TCP套接字,管道,tty等)。 没有人能提供有关select
可以报告各种描述符的错误的更多信息吗?
我使用套接字作为MediaPlayer的代理,因此可以在将mp3音频写入套接字之前下载并解密。 这类似于NPR新闻应用程序中显示的示例,但是我将其用于所有Android版本2.1-4 atm。
NPR StreamProxy代码-[http://code.google.com/p/npr-android-app/source/browse/Npr/src/org/npr/android/news/StreamProxy.java]
我的问题是,对于2.1-2.3而言,播放速度很快,但是在Android 4.0 ICS中,MediaPlayer在触发onPrepared侦听器之前会缓冲太多数据。
在onPrepared()之前写入Socket OutputStream的数据量示例:
在具有2.3.4的SGS2上-约133920字节后的onPrepared()
在使用4.0.4的Nexus S上-约961930字节后的onPrepared()
这也发生在Galaxy Nexus上。
奇怪的是4.0仿真器不像4.0设备那样缓冲太多的数据。 任何人在ICS上遇到MediaPlayer的类似问题?
编辑
这是代理写入套接字的方式。 在此示例中,它是从文件加载的CipherInputStream中获得的,但是从HttpResponse中加载它的情况相同。
final Socket client = (setup above)
// encrypted file input stream
final CipherInputStream inputStream = getInputStream(file);
// setup the socket output stream
final OutputStream output = client.getOutputStream();
// Writing the header
final String httpHeader = buildHttpHeader(file.length());
final byte[] buffer = httpHeader.getBytes("UTF-8");
output.write(buffer, 0, buffer.length);
int writtenBytes = 0;
int readBytes;
final byte[] buff = new byte[1024 * 12]; // 12 KB
while (mIsRunning && (readBytes = inputStream.read(buff)) != -1) {
output.write(buff, 0, readBytes);
writtenBytes += readBytes;
}
output.flush();
output.close();
在音频之前写入MediaPlayer的HTTP标头。
private String buildHttpHeader(final int contentLength) {
final StringBuilder sb = new StringBuilder();
sb.append("HTTP/1.1 200 OK\r\n");
sb.append("Content-Length: ").append(contentLength).append("\r\n");
sb.append("Accept-Ranges: bytes\r\n" );
sb.append("Content-Type: audio/mpeg\r\n");
sb.append("Connection: close\r\n" );
sb.append("\r\n");
return sb.toString();
}
我四处寻找替代实现,但是由于我已经加密了音频并且MediaPlayer不支持InputStreams作为数据源,所以我唯一的选择(我认为..)是使用诸如此类的代理。
同样,这在Android 2.1-2.3上运行良好,但在ICS中,MediaPlayer在播放之前会缓冲大量此类数据。
编辑2:
进一步的测试表明,一旦升级到Android 4.0.3,这在SGS2上也是一个问题。 因此,似乎MediaPlayer的缓冲实现在4.0中已发生了显着变化。 由于API无法提供任何更改行为的方式,因此令人沮丧。
编辑3:
已创建Android错误。 请添加评论并在其中加注星标[http://code.google.com/p/android/issues/detail?id=29870]
编辑4:
我的播放代码相当标准。.我在onPrepared()方法中对MediaPlayer进行了start()调用。
mCurrentPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mCurrentPlayer.setDataSource(url);
mCurrentPlayer.prepareAsync();
仅使用prepare()和ajacian81的推荐方法进行了尝试,但无济于事。
我应该补充一点,最近有一位Google员工回覆了我的问题,并确认ICS(用于HD内容)的缓冲区大小是有意增加的。 已要求API开发人员添加在MediaPlayer上设置缓冲区大小的功能。
尽管我认为这个API更改请求在我来之前就已经存在了,所以我不建议任何人屏住呼吸。
从git仓库中获取或提取信息,或克隆存储库时,我到了这一点:
remote: Counting objects: 6666, done.
remote: Compressing objects: 100% (5941/5941), done.
Receiving objects: 23% (1534/6460), 11.68 MiB | 23 KiB/s
它挂了。 对象的23%/数目不是给定的,它的范围从个位数到60年代不等。 列出的下载速度也会冻结-并不是像它缓慢地向零爬行一样。
我旁边的那个家伙没有问题,所以这不是路由器问题。 我们将beantalk用作我们的工作存储库,但是我遇到了来自beantalk和github的问题(尽管有时它似乎会完成一个github)。
自升级到Mountain Lion和更新Xcode以来,这个问题似乎才出现。 我擦了git(包括XCode的),并尝试用自制软件安装它。 那没有用,所以我将其删除并尝试使用他们提供的Mac安装软件包,该软件包也无法解决该问题。
Beanstalk为git存储库提供SSH URL,但是通过SCP或SSH连接到我已经完成工作的服务器时,我没有任何问题。
这扼杀了我的工作流程,因此不胜感激!
我的目录中有50到60个文件,需要定期将它们连接成一个文件。
我考虑过使用notepad ++,以为可能有一个插件会帮上忙,但一直找不到。
还有其他想法吗?
对于iPhone,是否可以配置UITableView使其允许多选?
我已经尝试为每个UITableViewCell覆盖-setSelected:animated:
,但是尝试捏合所需的行为非常棘手,因为很难将真正的未选择项与UITableView认为由于选择了另一个单元格而未选择的项分开!
希望有人能帮忙!
谢谢,
缺口。
我正在尝试构建一个工具来测试我的Internet连接的延迟,更具体地说是网站加载时间。 我想到了将python request模块用于加载部分。
问题是,它没有内置功能来衡量获得完整响应所花费的时间。 为此,我认为我将使用timeit
模块。
我不确定的是,如果我像这样运行timeit:
t = timeit.Timer("requests.get('http://www.google.com')", "import requests")
我实际上是在衡量响应到达所花费的时间,还是建立,发送,接收请求等所花费的时间? 我猜我可能会忽略执行时间,因为我正在测试延迟很长的网络(〜700ms)?
有没有更好的方法以编程方式执行此操作?
我有两个服务器,生产和开发。 在生产服务器上,有两个应用程序和多个(6)数据库(MySQL),我需要将这些数据库分发给开发人员进行测试。 所有源代码都存储在开发服务器上的GitLab中,开发人员仅与此服务器一起使用,无权访问生产服务器。 当我们发布应用程序时,master会登录生产并从Git中提取新版本。 数据库很大(每个数据库都超过500M,并且还在增加),我需要将它们尽可能容易地分发给开发人员进行测试。
在将每个数据库都转储到单个文件的备份脚本执行之后,执行一个脚本,将每个数据库推入其自己的分支。 如果开发人员想要更新其本地副本,则拉其中一个分支。
发现这一项无效。
生产服务器上的Cron每天保存二进制日志,并将它们推送到该数据库的分支中。 因此,在分支中,存在每日更改的文件,而开发人员会提取他没有的文件。 当前的SQL转储将以另一种方式发送给开发人员。 当存储库的大小太大时,我们会将完整的转储发送给开发人员,并刷新存储库中的所有数据,然后从头开始。
我正在使用Devise for Rails。 在默认注册过程中,Devise要求用户输入两次密码以进行验证和身份验证。 如何禁用它?
这个问题已经在这里有了答案:
如果我有一个空的数据框:
columns = ['Date', 'Name', 'Action','ID']
df = pd.DataFrame(columns=columns)
有没有一种方法可以向此新创建的数据框追加新行? 目前,我必须创建一个字典,将其填充,然后将字典附加到最后的数据框中。 有更直接的方法吗?
尝试建立表单,但由于某种原因,尽管使用[[ngModel)],但我的html中的Date输入未绑定到对象的日期值
的HTML:
<input type='date' #myDate [(ngModel)]='demoUser.date'/><br>
表单组件:
export class FormComponent {
demoUser = new User(0, '', '', '', '', new Date(), '', 0, [], []);
}
用户类别:
export class User {
constructor (
public id: number,
public email: string,
public password: string,
public firstName: string,
public lastName: string,
public date: Date,
public gender: string,
public weight: number,
public dietRestrictions: string[],
public fitnessGoals: string[]
){
}
}
测试输出显示当前的“新”日期作为对象的值,但是输入不会更新User对象的日期值或反映该值,表明双向绑定都不起作用。 帮助将不胜感激。
我有一个非常小的查询。 我尝试使用concat,charAt,slice和诸如此类的东西,但是我不知道该怎么做。
这是我的字符串:
var str1 = "Notion,Data,Identity,"
我想用.
替换最后一个,
,它应该看起来像这样。
var str1 = "Notion,Data,Identity."
有人可以让我知道如何实现吗?
我已经使用chart.js 1.0,并且我的甜甜圈图表工具提示根据数据除以数据集显示百分比,但是我无法使用图表2.0进行复制。
我搜索过很多,还没有找到有效的解决方案。 我知道它将进入选项,但是我尝试过的一切都使饼功能失调。
<html>
<head>
<title>Doughnut Chart</title>
<script src="../dist/Chart.bundle.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<style>
canvas {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
}
</style>
</head>
<body>
<div id="canvas-holder" style="width:75%">
<canvas id="chart-area" />
</div>
<script>
var randomScalingFactor = function() {
return Math.round(Math.random() * 100);
};
var randomColorFactor = function() {
return Math.round(Math.random() * 255);
};
var randomColor = function(opacity) {
return 'rgba(' + randomColorFactor() + ',' + randomColorFactor() + ',' + randomColorFactor() + ',' + (opacity || '.3') + ')';
};
var config = {
type: 'doughnut',
data: {
datasets: [{
data: [
486.5,
501.5,
139.3,
162,
263.7,
],
backgroundColor: [
"#F7464A",
"#46BFBD",
"#FDB45C",
"#949FB1",
"#4D5360",
],
label: 'Expenditures'
}],
labels: [
"Hospitals: $486.5 billion",
"Physicians & Professional Services: $501.5 billion",
"Long Term Care: $139.3 billion",
"Prescription Drugs: $162 billion",
"Other Expenditures: $263.7 billion"
]
},
options: {
responsive: true,
legend: {
position: 'bottom',
},
title: {
display: false,
text: 'Chart.js Doughnut Chart'
},
animation: {
animateScale: true,
animateRotate: true
}
}
};
window.onload = function() {
var ctx = document.getElementById("chart-area").getContext("2d");
window.myDoughnut = new Chart(ctx, config);{
}
};
</script>
</body>
</html>
在Xcode <4中,您可以按住“ option”键,而“ Replace All”按钮将变为“ Replace in Selection”。 从Xcode 4开始,此操作无效。 任何人都知道是否有一种新的方式来执行此操作,或者是提交错误的时间?
我正在编写一个小型Java程序,以获取给定Google搜索字词的结果数量。 出于某种原因,在Java中我得到了403禁止访问,但在Web浏览器中却得到了正确的结果。 码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
public class DataGetter {
public static void main(String[] args) throws IOException {
getResultAmount("test");
}
private static int getResultAmount(String query) throws IOException {
BufferedReader r = new BufferedReader(new InputStreamReader(new URL("https://www.google.com/search?q=" + query).openConnection()
.getInputStream()));
String line;
String src = "";
while ((line = r.readLine()) != null) {
src += line;
}
System.out.println(src);
return 1;
}
}
错误:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.google.com/search?q=test
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at DataGetter.getResultAmount(DataGetter.java:15)
at DataGetter.main(DataGetter.java:10)
为什么这样做呢?
我在活动中启动服务,然后希望该服务在一段时间后自行停止。
我在服务中调用了stopSelf(),但是它不起作用。
如何使服务自行停止?