免责声明:我完全理解使用eval的风险/缺点,但这是一个我无法找到任何其他方式的利基案例.
在Google Apps Scripting中,仍然没有内置功能可以将脚本作为库导入,所以很多工作表都可以使用相同的代码; 但是,有是内置的设施,我可以从一个纯文本文件导入文本.
这是评估代码:
var id = [The-docID-goes-here];
var code = DocsList.getFileById(id).getContentAsString();
var lib = eval(code);
Logger.log(lib.fetchDate());
Run Code Online (Sandbox Code Playgroud)
这是我在外部文件中使用的一些示例代码:
{
fetchDate: function() {
var d = new Date();
var dateString = (d.getMonth() + 1) + "/" + d.getDate() + "/" + d.getFullYear();
return dateString;
}
}
Run Code Online (Sandbox Code Playgroud)
我的目标是将一个大对象文字(包含所有库代码)放到一个局部变量上,这样我就可以引用它的属性/函数,就像它们包含在它们自己的命名空间中一样.
我有多层应用程序架构,有4个部分:
客户/服务器层:
客户端/服务器层处理与使用自定义第2层协议实现的另一台计算机的异步网络通信.由于通信中内置的设计约束,它需要保持独立并能够异步地轮询/推送数据到数据层.
中间层:
目前使用数据库实现中间层.一个表包含可以调用的所有可能标签(大约120,000).第二个表包含第一个表的中间缓存,其中仅包含正在使用的值,这需要不断更新,并在请求新的项集合时刷新.第三个表是发送集合更新的位置,仅在请求挂起时包含数据.
监控层:
监视器层是一个多线程单片应用程序.它根据连接的监视器数量生成n个客户端实例.它管理所有客户端实例之间的全局状态,因为它们中的一个或多个可以共享相似/相同的状态.它创建所需值的唯一列表,管理在客户端需要不同标签集时发送更新请求,并管理重复更新.
显然,这并不理想.如果一个实例出现故障,可以将其余部分关闭.我想要做的是删除中间层,将其替换为监视器层,并使所有内容都作为监视器进程的子进程生成,以便在出现问题时可以随意重新生成(例如,通信心跳停止,客户端崩溃)等).
数据库看起来太沉重,不够专业,无法处理IPC(进程间通信).该程序是在极端时间限制下编写的,因此利用数据库是"简单的解决方案",期望它将来会发生变化.我非常喜欢谷歌Chrome的多进程架构的强大功能,但我对它们如何将所有进程绑定在一起(管道,tcp,?)知之甚少.
所以:
我是否可以期望在数据库中使用IPC作为中间层可以显着提高性能?
什么形式的IPC在Windows系统上是理想的?
是否有可用的交叉平台(读取Linux)替代解决方案,如果将开发转移到Mono,可以使用它?
我在哪里可以找到有助于开始的资源/示例?
注意:我知道这个系统的体系结构似乎不必要地复杂,但它作为更大系统的前端存在.此应用程序也是关键任务,因此稳定性胜过效率.
更新:
我在最初的问题中忘了提到.数据库数据/索引在引导时直接从ramdisk加载.已对数据库本身编制索引以获得最佳性能.需要频繁写入的表或值不会编入索引,但其余数据都是索引.
我正在寻找一种替代方法来衡量,因为数据库的优化已经达到极限,我认为还有很大的改进空间.
一旦我有时间绘制它,我就会上传一些架构图.
我正在尝试使用CasperJS来自动化大量繁琐的数据输入.具体来说,要在佳能网站上注册一大批相机设备.
我有处理表单填充的代码,使用CasperJS浏览网页时没有问题,但我无法让CasperJS导航到登录页面.
这是我到目前为止所拥有的:
var casper = require('casper').create({
verbose: true,
userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
logLevel: "debug"
});
phantom.cookiesEnabled = true;
casper.start();
casper.thenOpen('https://b2cweb.usa.canon.com/b2cweb/view/myAccountHome.jsf?LOGINACTION=Y', function(response) {
require('utils').dump(response);
});
casper.run();
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码一旦到达页面就转储标题内容.我还尝试了不同的用户代理字符串,以防Adobe主动阻止抓取工具.
该链接在Google Chrome中完美运行,但CasperJS只记录以下内容.
加载资源失败,状态=失败
从Google Dev Tools看来链接302重定向到
https://b2cweb.usa.canon.com/b2cweb/view/myAccountHome.jsf?LOGINACTION=Y
然后301重定向到:
我假设重定向是CasperJS无法获取登录页面的原因.
是否有可能使CasperJS遵循这些类型的重定向?可以使用CasperJS通过HTTPS浏览和/或登录吗?
更新:
我不太确定它是否是导致问题的重定向.
作为一种解决方法,我尝试预先将会话cookie(从chrome复制)预加载到casperjs中,然后直接导航到帐户页面.
我还尝试在命令中添加--ignore-ssl-errors = true标志但没有成功.
无论我做什么,它都会返回一个about:blank url.
我在与html页面相同的目录中有一个CSV文件,我想使用FileReader将文件内容读入jquery-csv的To Arrays函数,但我似乎无法让它正常工作.我想我理解这项任务的异步性,但我是否正确描述了它?在这里,我正在尝试输出第二列中的第二个单元格.谢谢你的帮助.
<script type="text/javascript" src="https://www.google.com/jsapi?autoload={'modules':[{'name':'visualization','version':'1','packages':['timeline']}]}"></script>
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="jquery.csv-0.71.js"></script>
<script type="text/javascript">
var reader = new FileReader();
reader.onload = function(e) {
var text = e.target.result;
var data = $.csv.toArrays(text);
document.write(data[1][1]);
}
reader.readAsText('data.csv');
</script>
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个<markdown-component>使用ES6语法.该@Input语法糖不ES6支持,我无法找到一个可行的替代方案.
我在父母中定义输入:
<ng2-markdown [source]="source"></ng2-markdown>
Run Code Online (Sandbox Code Playgroud)
然后使用以下方式接受输入:
@Component({
selector: 'ng2-markdown',
inputs: [ 'source' ]
})
Run Code Online (Sandbox Code Playgroud)
如果我添加一个模板,我可以得到它将按预期输出值,但是没有办法在构造函数中使用输入.
该模块实际上应该是一个指令,该source值将定义要加载的Markdown文件的路径.
Angular2的新手,试图在我的本地系统上运行这个plunkr项目.我收到以下错误:
错误:(25,23)TS2339:'PeopleService'类型中不存在属性'people'.错误:(26,39)TS2339:'人''类型中不存在属性'人'
在线:
peopleService.people .subscribe(people => this.people = people);
我有理由相信我已正确设置了环境,因为我正在运行其他基本组件.
people.ts文件:
import {Component, View, CORE_DIRECTIVES} from 'angular2/angular2'
import {PeopleService} from './peopleService'
import {Person} from './person'
@Component({
selector: 'my-app',
providers: [PeopleService]
})
@View({
template: `
<div>
<h2>Hello Angular2!</h2>
<my-person
*ng-for="#person of people"
[name]="person.name"
(hello)="saidHello($event)">
</my-person>
</div>
`,
directives: [CORE_DIRECTIVES, Person]
})
export class People {
constructor(public peopleService:PeopleService) {
peopleService.people
.subscribe(people => this.people = people);
}
saidHello($event){
alert(`You said hello to ${$event}`)
}
}
Run Code Online (Sandbox Code Playgroud)
peopleService.ts文件中的类似错误:
错误:(8,14)TS2339:'PeopleService'类型中不存在属性'people'.
//a simple …Run Code Online (Sandbox Code Playgroud) 我正在浏览Angular2指南,虽然关键字implements在类定义中使用,但在文档中并没有真正详细描述.
例如,在以下内容中:
export class CrisisDetailComponent implements OnInit, CanDeactivate {
crisis: Crisis;
editName: string;
cancel() {
this.editName = this.crisis.name;
this.gotoCrises();
}
save() {
this.crisis.name = this.editName;
this.gotoCrises();
}
}
Run Code Online (Sandbox Code Playgroud)
OnInit通过implements关键字引入类,但我最常见的是OnInit导入import {Component, OnInit} from 'angular2/core',然后在类定义中使用.
implements关键字的效用是什么?而且,OnInit这个类定义中没有直接使用,那为什么它会被带入课堂呢?为implements使OnInit可用的goToCrises()方法?如果是这样,为什么你不能只注入OnInit定义的组件goToCrises()?
谢谢你的帮助.
我有以下问题:
我有一个很大的CSV文件,其中包含很多数据,我只需要使用jQuery就可以在(外部(当然,已批准!))网页上使用这些数据。
我发现jQuery-csv能够将csv数据处理到数组中。一旦我将数据存储在数组中,我就可以完成我需要做的一切。但是,我不太了解在哪里以及如何“包含” csv文件。它是托管的,可以通过url获得。jQuery-csv似乎从未链接到文件,并且它们的演示页仅显示通过页内<input>标记使用的内容。
为了进一步了解这种情况:客户希望使用带有大量句子的.csv文件数据库(“我很喜欢这个!”),并在自己的网站上随机显示这些句子。
tl; dr:如何将.csv文件加载到页面上,以便可以与jQuery-csv一起使用?
angular ×3
csv ×2
javascript ×2
jquery-csv ×2
typescript ×2
c# ×1
casperjs ×1
ecmascript-6 ×1
eval ×1
filereader ×1
https ×1
import ×1
include ×1
ipc ×1
jquery ×1
redirect ×1