小编Sth*_*the的帖子

Javascript中的iframe和内存管理

我有链接将页面加载到iframe中.我一直在使用Google Chrome的内存堆分析器监视内存中数据的累积,我注意到内存中有一些泄漏.

我加载了页面并拍摄了第一张加起来的快照2.69 MB.我点击了将页面打开到iframe的链接,然后拍了另一张快照给了我一个总结14.58 MB.我使用以下jquery代码段删除了iframe:

$('#myframe').unbind();
$('#myframe').remove();
/*
* By the way, I also tried $('#myframe > *') as a selector. 
* It still didn't work. Even if it would, it doesn't look like a viable solution to me.
* It looks too resource intensive.
*
* I forgot to mention that I am not using Ajax to load my pages
*/
Run Code Online (Sandbox Code Playgroud)

我拍了另一张快照并得到了5.28 MB表示2.59 MB与初始值的偏差,根据我的理解,这表示内存泄漏.

现在,我的问题是:如果我删除iframe(其中包含加载的文档)不是垃圾收集器发现有必要从内存中删除该文档中包含的所有对象吗?或者我必须手动执行此操作吗?

我认为如果我将文档加载到iframe中,它的大小不会影响父页面上的内存使用.我虽然它将被视为一个单独的窗口,但显然我不是一个明智的假设.

有关如何解决这个问题的任何建议?

谢谢.

javascript iframe jquery memory-management

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

Gerrit服务器如何拦截提交.寻找技术细节

我理解Gerrit会收到git提交(update也许使用钩子),然后将它们写在假的ref上,直到完成同行评审,但这个过程在技术实现方面究竟是如何工作的呢?Git命令涉及什么?

git gerrit server

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

建议的解决方案:在分布式环境中生成唯一ID

我一直在浏览网络,试图找到一个允许我们在区域分布式环境中生成唯一ID的解决方案.

我查看了以下选项(以及其他选项):

SNOWFLAKE(Twitter)

  • 这似乎是一个很好的解决方案,但我不喜欢为了创建ID而必须管理另一个软件的额外复杂性;
  • 它在这个阶段缺乏文档,所以我认为这不是一个好的投资;
  • 节点需要能够使用Zookeeper相互通信(延迟/通信故障怎么样?)

UUID

  • 看看吧:550e8400-e29b-41d4-a716-446655440000 ;
  • 它是一个128位ID;
  • 有一些已知的碰撞(取决于我猜的版本)看到这篇文章.

与MYSQL类似的关系数据库中的自动编码

  • 这似乎是安全的,但不幸的是,我们没有使用关系数据库(可伸缩性首选项);
  • 我们可以为此部署一个MySQL服务器,就像Flickr所做的那样,但同样,这又引入了另一个故障点/瓶颈.还增加了复杂性.

像COUCHBASE一样的非关系数据库中的自动识别

  • 这可能有用,因为我们使用Couchbase作为我们的数据库服务器,但是;
  • 当我们在不同区域有多个集群,延迟问题,网络故障时,这将无效:在某些时候,ID会根据流量的数量发生冲突;

我提出的解决方案(这是我需要帮助的)

假设我们在5个不同的地区(非洲,欧洲,亚洲,美洲和大洋洲)拥有由10个Couchbase节点和10个应用节点组成的集群.这是为了确保从最靠近用户的位置提供内容(以提高速度)并在发生灾难时确保冗余等.

现在,任务是生成在复制(和平衡)发生时不会发生碰撞的ID,我认为这可以通过3个步骤实现:

步骤1

将为所有区域分配整数ID(唯一标识符):

  • 1 - 非洲;
  • 2 - 美国;
  • 3 - 亚洲;
  • 4 - 欧洲;
  • 5 - Ociania.

第2步

为添加到群集的每个应用程序节点分配一个ID,记住一个群集中最多可能有99 999个服务器(尽管我怀疑:这是一个安全的预防措施).这看起来像这样(假IP):

  • 00001 - 192.187.22.14
  • 00002 - 164.254.58.22
  • 00003 - 142.77.22.45
  • 等等.

请注意,所有这些都在同一个集群中,这意味着您可以在每个区域拥有节点00001.

第3步

对于插入数据库的每个记录,将使用递增的ID来标识它,这就是它的工作方式:

Couchbase提供了一个增量功能,我们可以使用它在群集内部创建ID.为确保冗余,将在群集中创建3个副本.由于它们位于同一个地方,我认为应该可以安全地假设除非整个群集关闭,否则将有一个负责此节点的节点,否则可以增加许多副本.

将它们整合在一起

假设用户正在从欧洲注册:服务请求的应用程序节点将获取区域代码(在这种情况下为4),获取自己的ID(比如00005),然后从Couchbase 获取增加的ID(1)(来自相同的)簇).

我们最终有3个组成部分:4, 00005,1.现在,要从中创建ID,我们可以将这些组件加入其中4.00005.1.为了使它更好(我对此不太确定),我们可以连接(而不是添加它们)组件以结束:4000051.

在代码中,这将看起来像这样:

$id = '4'.'00005'.'1'; …

php distributed couchbase

12
推荐指数
1
解决办法
2580
查看次数

mysql自动增量是否可以安全地用作userID?

我正在网站上工作,允许人们在线创建个人资料.我想知道使用MySQL AUTO_INCREMENTed ID作为我的用户ID 是否是正确的选择.还要记住,有一天我可能不得不跨多个服务器复制数据库?

例如,你会在Twitter或Facebook这样的网站上对userIds使用这种方法吗?


我之前尝试用PHP生成userIds.我使用过这样的东西:

function generateID() {
      $possible = "1234567890";
      $code = "";
      $characters = mt_rand(7,14);
      $i = 0;
      while ($i < $characters) { 
            $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
            $i++;
      }
      return $code;
}
Run Code Online (Sandbox Code Playgroud)

这给出了我需要的值类型,但是我总是必须从DB检查该ID是否还不存在.

有没有更好的方法?

mysql userid auto-increment

10
推荐指数
2
解决办法
3494
查看次数

Git2go - 拉&&合并

我想实现的东西,这将使我的结果git pullgit fetch && git merge.我得到了这个部分工作,但我遇到的问题是,在运行以下代码后,当前的repo仍然认为有本地更改要提交.

据我所知,我相信我可能没有从正确的HEAD创建带注释的提交,或者我需要再次提交?(我不确定).

我的代码看起来像这样,我被困住了:

func (repo *Repo) Pull() error {
    // Get remote
    remote, err := repo.Remotes.Lookup("origin")
    if err != nil {
        remote, err = repo.Remotes.Create("origin", repo.Path())
        if err != nil {
            return err
        }
    }

    // Get the branch
    branch, err := repo.Branch()
    if err != nil {
        return err
    }

    // Get the name
    branchName, err := branch.Name()
    if err != nil {
        return err
    }

    if err := …
Run Code Online (Sandbox Code Playgroud)

git merge git-pull libgit2

8
推荐指数
2
解决办法
939
查看次数

如何编写Yii扩展?有什么好的参考?

有谁知道如何编写Yii框架扩展的任何好的参考?我一直在网上搜索,我找不到任何东西.

如果没有这样的东西,我需要采取哪些步骤(一般情况下)?

php jquery yii yii-extensions

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

受影响的行数Zend DB(UPDATE)

我是Zend Framework的新手,我想知道如何从中获取受影响的行数:

$sql = "UPDATE auth SET act='', status='1' WHERE username = ? AND act = ? ";
$stmt = $this->dbh->prepare($sql);
$stmt->execute(array($this->username, $this->key));
Run Code Online (Sandbox Code Playgroud)

我在这个论坛上看到了一些帖子,但是我们基于MySQLi和SELECT语句,你可以用它来实际计算行数count().

任何人都可以建议我如何改变它来支持rowCount.

这是我连接到我的数据库的方式:

$parameters = array(
    'host' => 'localhost',
    'username' => 'root',
    'password' => '',
    'dbname' => 'users'
);

try {
        $db = Zend_Db::factory('Pdo_Mysql', $parameters);
...
Run Code Online (Sandbox Code Playgroud)

这是我的Bootstrap.php.我是这样做的,因为我使用多个数据库.

mysql zend-framework count

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

使用 golang 的 http.ResponseWriter 进行 AWS S3 大文件反向代理

我有一个名为的请求处理程序Download,我想从 Amazon S3 访问一个大文件并将其推送到用户的浏览器。我的目标是:

  • 在授予用户访问文件的权限之前记录一些请求信息
  • 不要将文件过多地缓冲到内存中。文件可能会变得太大。

这是我迄今为止探索的内容:

func Download(w http.ResponseWriter, r *http.Request) {

    sess := session.New(&aws.Config{
        Region:             aws.String("eu-west-1"),
        Endpoint:           aws.String("s3-eu-west-1.amazonaws.com"),
        S3ForcePathStyle:   aws.Bool(true),
        Credentials:        cred,
    })

    downloader := s3manager.NewDownloader(sess)
    // I can't write directly into the ResponseWriter. It doesn't implement WriteAt. 
    // Besides, it doesn't seem like the right thing to do.
    _, err := downloader.Download(w, &s3.GetObjectInput{
        Bucket: aws.String(BUCKET),
        Key: aws.String(filename),
    })
    if err != nil {
        log.Error(4, err.Error())
        return
    }

}
Run Code Online (Sandbox Code Playgroud)

我想知道是否没有更好的方法(考虑到我正在努力实现的目标)。

欢迎任何建议。先感谢您 :-)

amazon-s3 go amazon-web-services

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

更改表单哈希(令牌)到期Zend Framework

我正在使用ZF Zend_Form_Element_Hash来保护我的表格CSRF.但问题是生成的令牌过早到期.我猜测问题在于会话生命周期,因为这是存储它的地方.

我用这段代码来生成它:

$token = new Zend_Form_Element_Hash('tk');
$token->setSalt(md5(uniqid(mt_rand(), TRUE)));
Run Code Online (Sandbox Code Playgroud)

有什么办法可以让令牌在更长的时间内有效吗?

我做得对还是有更好的方法?我是Zend Framework的新手.

hash session zend-framework csrf

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

从javascript for循环创建JSON字符串

我想从javascript for循环创建一个JSON字符串.这是我试图做的(它给了我一些看起来像JSON字符串的东西),但它不起作用.

var edited = "";
for(var i=1;i<POST.length-1;i++) {
    edited += '"'+POST[i].name+'":"'+POST[i].value+'",';
}
Run Code Online (Sandbox Code Playgroud)

它给了我这个:

"type":"empty","name":"email-address","realname":"Email Address","status":"empty","min":"empty","max":"empty","dependson":"empty",
Run Code Online (Sandbox Code Playgroud)

如果我稍后尝试将其转换为JSON对象,则此方法无效.

javascript string json loops for-loop

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

使用传统的 TCP 向 ZeroMQ 服务器发送消息,可能吗?

我不确定我这样做是否正确,但我希望能够从正常的 TCP 连接向运行 ZMQ 的服务器发送消息。服务器在端口上运行 Python ZMQ5555使用TCP transport. 我希望能够使用使用传统 TCP 的不同客户端(Python、Java、PHP)向它发送消息。这是我到目前为止:

服务器

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

while True:
    message = socket.recv()
    print message
    socket.send('{"name":"someone"}')
Run Code Online (Sandbox Code Playgroud)

客户

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 5555))
s.send('Hello, World!')
data = s.recv(1024)
print data
Run Code Online (Sandbox Code Playgroud)

data在客户端上打印并没有给我我期待的信息。我得到这个:?。我试着bytes(data).decode('utf8')思考我得到的是一个字节数组,但我收到以下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我只是想知道:这可能吗?还是我做错了什么?另外,推荐吗?

我不在客户端上使用 ZMQ 的原因是我想减少依赖项的数量(ZeroMQ 就是其中之一)。

感谢您的帮助。

python sockets linux tcp zeromq

0
推荐指数
1
解决办法
1646
查看次数