我已经找到了关于此的每一个问题和文章,但没有任何答案。我听起来好像只有一个问题,但还有更多问题。
也许我应该先解释一下我要做什么,我完全用JavaScript构建了文件管理器,文件管理器从后端(PHP,Twig)接收文件,然后将它们存储在文件夹数组中,每个文件夹都有自己的文件夹文件,文件夹是一个数组,每个文件夹中的文件也是一个数组,这些文件也显示在页面上,用户可以选择,复制,剪切,粘贴(其他操作)(我仍在编写这些操作) ,因为问题就出在这里)。
页面上的文件分配有数据ID,以便我可以在文件管理器和后端之间轻松地对其进行操作,并且由于我知道每个文件的ID,因此我认为可以完全消除遍历文件数组中的遍历。搜索特定文件,如果我只能创建一个将文件ID作为索引的数组,并且因为这是JavaScript,那么我可以做到!但是有一些问题。
尝试使用Object来完成此任务是行不通的,因为它比Array慢得多(现在,我知道,速度的差异(即使以百万为单位)也没有那么大,但是为什么不尝试挖掘它呢?终极表现,对吗?
因此,这是一个问题列表,我似乎无法找到可靠的答案:
我可能还有其他问题,但我现在无法想到。
我发现最快的配置支持ID作为索引和索引之间的空缺,并从高索引开始,它使用的是一个Array,该数组保存要存储的数据,另一个数组,仅保存索引,以便当搜索ID为10的对象时,触摸索引Array,而不是带有数据的Array。
您可以在http://jsperf.com/array-management-performance/2中查看此示例。
编辑:如果您想看到性能下降,请“审查”此jsperf并将minId和maxId更改为一些大数字。
以下是一些统计信息:
宾语
读取已定义:Firefox 165173万ops / sec | Chrome 351.699百万次操作/秒
阅读未定义:Firefox 98.582百万次操作/秒| Chrome 5466.60万次/秒
写关闭:Firefox 759.9万次/秒| Chrome浏览器2912.44万次操作/秒
写远:Firefox 559.9万次操作/秒| Chrome 93733万次/秒
写覆盖:Firefox 759.9万次/秒| 镀铬2912.44百万次操作/秒
数组
读取已定义:Firefox 681.206百万次操作/秒| Chrome 401.522百万次操作/秒
阅读未定义:Firefox 681.206百万次操作/秒| Chrome 62.827百万次操作/秒
写入关闭:Firefox 400.234百万次操作/秒| Chrome 121.519百万个操作/秒
Write远:Firefox 348.56百万个操作/秒| Chrome 121.519百万次操作/秒
写入覆盖:Firefox 400.234百万次操作/秒| Chrome 234.337百万次操作/秒
PS:您知道吗,在移动设备上的Chrome浏览器上的“读取已定义”比在桌面设备上的Chrome浏览器更快?
我精打细算我在这里遇到的每个问题,因此我/他人的测试写得不正确,或者这是一些非常时髦的东西。
http://jsperf.com/array-management-performance/2
http://jsperf.com/array-in-the-middle-of-nowhere
http://jsperf.com/object-holey-performance-better
http ://jsperf.com/object-performance-better
http://jsperf.com/array-vs-object-mine-v2/5
PS2我知道,其中一个Array测试实际上是在测试Object,另一个Object测试实际上是在测试Array,请不要指出,我知道,我写了这个,错误是因为jsperf的制作很差,并且我试图相对快速地检查很多不同的设置。
PS3对不起,其中一些测试确实很混乱,我没有想到,我实际上需要向任何人展示它们,但我仍然认为足够。
编辑:(答案,希望重新打开问题,以便我可以回答)
在这里,我对我们所有的问题都给出了答案。现在,我在阅读答案的同时再次阅读了我的问题,我可以看到我的问题在不深入研究每个浏览器来源的情况下是如何无法轻松地回答或根本无法回答的。
我本人仍然不知道1、2、3、4甚至5的确切答案,但是正确的答案是“由于实现差异”,就这么简单,显然,我没有在这里返回只是这样写,对于这个问题,我有一个解决方案。
简化的问题:您有一组ID,最有可能是从数据库中分配给数据的。您希望将这些数据放在JS数组中,以便可以非常轻松地使用它,但是当将10万个元素放入JS数组时,您不希望失去性能。如何在JS中将N个元素放入数组中而不损失读写性能?(我没有测试写作,因为这对我来说并不那么重要)。
解决方案和说明:在研究此问题时,我检查了许多潜在的解决方案,例如样条曲线,傅立叶变换,哈希表,二进制搜索以及对map / hash表的扭曲,它们实际上表现非常好,但对于我的口味(随着尺寸的增加,它的表现也会变差)。 …
Gah,我从不喜欢PHP,它是如此"不纯"......
现在我必须使用它,我有一个问题:主要是既不适合html_entity_decode也不htmlspecialchars_decode适合我.我看完了这个论坛,一无所获.它似乎无处不在,只是不会在这里工作......
我正在将一部电影的标题发送到一个数据库,所有数据都被编码,然后当我从数据库中获取它时,我正在解码它:
$title = html_entity_decode($row['Title']);
Run Code Online (Sandbox Code Playgroud)
然后:
"title":"'.$title.'"
Run Code Online (Sandbox Code Playgroud)
它是我用PHP创建的JSON对象的一部分.虽然当我查看该特定对象的属性时,它没有解码其标题,实际上根本没有任何变化.我尝试了问题标题中所述的两个函数,并尝试编码像UTF-8,还有一些选项,如ENT_QUOTES或ENT_COMPAT,但它仍然无效.
有人可以告诉我为什么PHP不会服从我?
编辑:这是我在那里做的全部内容:
echo 'var serverVideos = [';
while($row = mysql_fetch_array($result))
{
$currentRow++;
$data = array('posterSrc' => $row["Poster_name"],
'videoSrc' => $row["Video_name"],
'videoType' => $row["Type"]);
$title = html_entity_decode($row['Title']);
$poster = html_entity_decode($row['Poster_name']);
echo'{"id":"'.$row["ID"].'", "vimeoID":"'.$row["VimeoID"].'", "title":"'.$title.'" ,"client":"'.$row["Client"].'" , "production":"'.$row["Production"].'", "type":"'.$row["Type"].'", ';
if($row["Type"] != "vimeo")
{
echo '"href":"'.http_build_query($data).'"';
}
else
{
echo '"href":"'.$row["Video_name"].'"';
}
echo ', "poster":"'.$poster.'"}';
if($currentRow != $rowNumber)
{
echo ',';
}
}
echo '];';
Run Code Online (Sandbox Code Playgroud)
对不起,它有点乱,在记事本++中它看起来更好; /我实际上是在一个脚本标签中输出它来制作一个对象,我看了json_encode并且真的不明白它是如何帮助我的,因为我不知道如何使用这么多变量,抱歉.
此外,这是使用来自该JSON对象的变量使用javascript制作标记后来自源代码:
<a production=" …Run Code Online (Sandbox Code Playgroud) 我已经搜索过,但似乎无法找到这个简单问题的答案:
我如何强制 symfony 给我用户 ip 的 ipv4 版本,或者我错过了什么?
我可以同时获得 ipv4 和 ipv6 吗?
谢谢
编辑:我的问题是不同的,因为我不想获取任何 ip,我知道 getClientIP 函数(这就是它在标题中的原因),我希望该函数返回 ipv4 和 ipv6 版本的 ip。(或任何功能,以任何方式同时获得 ipv4 和 ipv6 )
Edit2:这就是我现在获得 ip 的方式:
public function getUserIp()
{
return $this->request->getClientIp();
}
Run Code Online (Sandbox Code Playgroud)
它只返回 ipv6。(这个函数是从我自己的 UserManager 内部运行的,它在每次调用时检查和更新当前用户,通过将事件插入控制器输入部分 symfony 管道)