小编ste*_*esu的帖子

更快的两个CSS规则:指定/不指定多个ID

所以我最近在使用Concrete5做了很多工作.但是,我注意到默认主题有许多 CSS规则,其定义如下:

#page #central #sidebar p{line-height:24px}
Run Code Online (Sandbox Code Playgroud)

由于"侧边栏"是一个ID,所以整个页面上应该只有一个"侧边栏"(假设它有效,我正在照顾它).因此如果#sidebar#page #central,它应该总是#page #central.无论.在每一页上.

通过这种逻辑,以下规则完全相同:

#sidebar p{line-height:24px}
Run Code Online (Sandbox Code Playgroud)

测试这个,果然,它有效.所以我的问题是 - 哪个会有更好的表现?是否存在与速度相关的原因,即Concrete5团队采用更长的规范,还是仅仅是为了帮助未来的开发人员找到#sidebardiv?在任何一种情况下,我都可以看到它的论点更快.

如果案例1更快(#page #central #sidebar):

如果浏览器使用广度优先搜索算法来找到合适的DOM元素然后找到#sidebar将涉及搜索的第二梯队EVERY则达到了第三层之前,此时它仍然有几个要素,它看起来是有孩子的DOM元素在找到之前#sidebar.通过以这种方式指定元素,广度优先搜索将识别#page并知道它只需要继续在该元素内搜索,而不是继续整个DOM.

如果案例2更快(#sidebar):

如果浏览器按照它编写的顺序搜索整个文档,而不是像树一样处理DOM,那么它将执行单个线性搜索而不是三个线性搜索.事实上,即使在最好的情况下它是足够聪明的认识的开始和结束点以前发现的DOM元素(主要是深度优先搜索),它仍然要读取的代码只是尽可能多线一个线性搜索 - 首先它会一直读到它找到#page,然后它会从它的开始开始读取#page直到它找到#center,然后它会从它的开始读取#center直到它找到#sidebar.唯一的区别是从一个搜索切换到另一个搜索所涉及的微小开销

css performance dom css-selectors

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

WordPress与phpMyAdmin - 404无处不在

因此,我一直在尝试对自定义WordPress主题进行一些更改,该主题引入了仪表板的整个大修.我一直在寻找我需要解决的原始主题的小问题(在导入新帖子时没有正确检查重复的帖子,发布的元数据没有正确存储,帖子没有被分类到正确的类别等等)

正如我一直在使用这个,我需要无数次地查看和修改数据库,以查看主题对数据库的作用或修复它搞砸了的东西.不幸的是我无法安装phpMyAdmin所以我一直在进行更改,直接输入SQL并将其插入适当位置的主题中,然后使用脚本die()以便我可以看到我的SQL输出.

突然间,我发现我可以找到一个将phpMyAdmin功能集成到WordPress中的插件.所以我安装了wp-phpMyAdmin.

一切似乎很顺利,直到我试图实际上DO什么.我可以查看表格,查看行,并查看所有内容.但是当我尝试编辑一行或删除一行时,我被重定向到404错误,说我碰巧访问的phpMyAdmin中的任何一部分(例如tbl_row_action.php)都不存在.如果我直接转到这些页面而不提交表单来编辑或删除一行,那么它们工作得很好,我收到一条错误消息,我的SQL查询是空白的.

还有其他人经历过这个吗?我真的无法弄清楚它为什么或在哪里发送404.这绝对是荒谬的.

编辑 - 更多信息:

我已经了解到,当phpMyAdmin 使用参数集调用时,我只会收到404错误sql.phpsql_query

编辑(再次) - 进一步更新:

当sql_query包含有效查询时,我只收到404错误.通过看sql.php(我没有花太多的时间看,你要知道)我注意到,它似乎解析查询,并确定如果你正在SELECT荷兰国际集团,DROP荷兰国际集团,DELETE荷兰国际集团等,这样他们就可以检查您的用户权限.它可能与此解析代码有关.

以下查询没有给我404:

test
SELECT test
SELECT test FROM test
SELECT test FROM post_meta
DELETE
DROP
DROP test
Run Code Online (Sandbox Code Playgroud)

以下给了我一个404:

SELECT * FROM test
SELECT * FROM post_meta
DELETE FROM
DELETE FROM test
DELETE FROM post_meta
DROP TABLE
DROP TABLE test
Run Code Online (Sandbox Code Playgroud)

更多编辑 -

所以在sql.php的最顶层我放置了这行代码:

die("Test");
Run Code Online (Sandbox Code Playgroud)

当我做出上面列出的错误查询时,它不会消失.它直接转到404消息.显然,这与WordPress的重定向脚本有关,而不是与phpMyAdmin有关

最终编辑 -

我已经做了很多研究,并且一直在喋喋不休地说出WordPress.

由于一些新的WordPress安全功能,我非常怀疑我遇到了这个问题.较旧版本的WordPress显然用于允许将SQL输入到URL中,这会带来巨大的安全风险.因此,可以理解他们现在不允许SQL通过URL传递.在模板之前,值is_404() …

wordpress plugins phpmyadmin http-status-code-404

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

VueJS 渲染 VNode

tl;博士:

给定一个 VueJSVNode对象,我如何获取渲染后会生成的 HTML 元素?

例如:

> temp1
VNode {tag: "h1", data: undefined, children: Array(1), text: undefined, elm: undefined, …}
> temp1.children[0]
VNode {tag: undefined, data: undefined, children: undefined, text: "Test", elm: undefined, …}
> doSomething(temp1)
<h1>Test</h1>
Run Code Online (Sandbox Code Playgroud)

目标

我正在尝试围绕DataTables.net库构建一个小的 VueJS 包装器。

为了在我的标记中模仿 HTML 表的行为,我需要如下内容:

<datatable>
    <thead>
        <tr>
            <th>Name</th>
            <th>Age</th>
            <th>Salary</th>
        </tr>
    </thead>
    <tbody>
        <datatable-row v-for="person in people">
            <td>{{ person.name }}</td>
            <td>{{ person.age }}</td>
            <td>{{ person.salary }}</td>
        </datatable-row>
    </tbody>
</datatable>
Run Code Online (Sandbox Code Playgroud)

到目前为止我所做的

我已经开始按如下方式实施:

数据表.vue

<template>
    <table ref="table" class="display …
Run Code Online (Sandbox Code Playgroud)

javascript datatables vue.js vuejs2

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

PTS 必须从 0 开始吗​​?

我已经看到许多关于视频 PTS 值不是从零开始的问题,或者询问如何让它们从零开始。我知道使用 ffmpeg 我可以做一些类似ffmpeg -i <video> -vf="setpts=PTS-STARTPTS" <output>的事情来解决这种事情

然而这是我的理解是PTS值不具有在零开始。例如,如果您加入了直播,那么它可能已经持续了一个小时,并且 PTS 已经在 3600000+ 左右,但是您的视频播放器忠实地显示了一切。因此,如果我有意创建一个 PTS 值从当前挂钟时间开始的视频,我希望不会有问题。

我想使用 ffmpeg 发送实时流,但将当前时间嵌入到流中。这既可用于流直播时的延迟计算,也可用于稍后确定流最初播出的时间。根据我对 PTS 的理解,像这样简单的事情应该可行:

ffmpeg -i video.flv -vf="setpts=RTCTIME" rtmp://<output>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试此操作时,ffmpeg 输出以下内容:

frame=   93 fps= 20 q=-1.0 Lsize=    9434kB time=535020:39:58.70 bitrate=   0.0kbits/s speed=1.35e+11x
Run Code Online (Sandbox Code Playgroud)

注意“时间”、比特率(0.0kbits)和速度(135000000000x !!!)的极大值

起初我认为问题可能是我的时基,所以我尝试了以下方法:

ffmpeg -i video.flv -vf="settb=1/1K,setpts=RTCTIME/1K" rtmp://<output>
Run Code Online (Sandbox Code Playgroud)

这将所有内容都以毫秒为单位(1 PTS = 1 ms),但我遇到了同样的问题(大量时间、零比特率和大量速度)

我对 PTS 有什么误解吗?是否不允许从非零值开始?还是我只是做错了什么?

更新

在查看@Gyan 的回答后,我像这样格式化了我的命令:

ffmpeg -re -i video.flv -vf="settb=1/1K, setpts=(RTCTIME-RTCSTART)/1K" -output_ts_offset $(date +%s.%N) rtmp://<output>
Run Code Online (Sandbox Code Playgroud)

这样 PTS 值将匹配到“自流开始以来的毫秒数”,并且会被流的开始时间偏移(理论上使 PTS = 服务器上的时间戳)

这看起来编码更好: …

video ffmpeg pts rtmp video-streaming

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

在碎片化的 MP4 中运行的曲目是否必须从关键帧开始?

我正在摄取 RTMP 流并将其转换为 JavaScript 中的碎片 MP4 文件。花了一周的时间,但我几乎完成了这项任务。我正在生成一个有效的ftyp原子、moov原子和moof原子,并且视频的第一帧在进入无限缓冲之前实际播放(带音频),并且没有列出任何错误chrome://media-internals

将视频插入ffprobe,我收到类似于以下内容的错误:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x558559198080] Failed to add index entry
    Last message repeated 368 times
[h264 @ 0x55855919b300] Invalid NAL unit size (-619501801 > 966).
[h264 @ 0x55855919b300] Error splitting the input into NAL units.
Run Code Online (Sandbox Code Playgroud)

这导致我在我的tfhdtrun原子中大量寻找数据对齐问题或无效字节偏移量,但是无论我在哪里查看或如何切片数据,我都找不到moof原子中的任何问题。

然后,我ffmpeg使用以下命令将原始 FLV 文件转换为 MP4 :

ffmpeg -i ~/Videos/rtmp/big_buck_bunny.flv -c copy -ss 5 -t 10 -movflags frag_keyframe+empty_moov+faststart test.mp4
Run Code Online (Sandbox Code Playgroud)

ffmpeg在原子解析文件中打开了我正在创建的 MP4 …

mp4 ffmpeg h.264 media-source

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

愚蠢的问题:PlayerView 和 SimpleExoPlayerView 有什么区别?

我正在围绕 ExoPlayer 编写一个库(创建一个简单的视图,可以将其拖放到应用程序中,并根据我们公司的业务逻辑播放视频和广告)。当我想调整这个播放器的显示时,我在谷歌上搜索了明显的内容(“如何改变 exoplayer 的外观”),并且我不断看到对SimpleExoPlayerView. 但根据我的理解,我应该将 a 放在PlayerView我的布局上,而不是SimpleExoPlayerView

这两个类有什么区别?

java android exoplayer exoplayer2.x

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

如何从 Android 库构建 AAR?

我已经遵循了创建 Android 库的官方指南,但有些东西似乎不太适合我。

我的项目由两个模块组成。一个名为“app”的应用程序模块和一个名为“bfsdk”的库模块。在我的应用程序的build.gradle文件中,我包含该库,如下所示:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(path: ':bfsdk')
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
Run Code Online (Sandbox Code Playgroud)

然后在我的库模块中,我build.gradle在第一行指定它是一个库:

apply plugin: 'com.android.library'
Run Code Online (Sandbox Code Playgroud)

根据文档我现在应该:

在“项目”窗口中选择库模块,然后单击“构建”>“构建 APK”

这应该会构建 AAR 文件。然而:

在此输入图像描述

在此输入图像描述

当我单击此按钮并等待整个构建过程完成时,我在任何地方都找不到 AAR 文件。这会生成一个 APK 文件,~/Source/BluePlayer/app/build/outputs/apk/android/release但该文件夹中没有build目录~/Source/BluePlayer/bfsdk

我究竟做错了什么?我缺少哪一步?AAR 文件应该出现在哪里?

android

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

如何在更改时观察并重新运行 TypeScript?

我有一个用 TypeScript 编写的非常简单的应用程序:

src/index.ts

import * as http from "http";

const server = http.createServer((request, response) =>
{
    response.end("Hello, World");
});

server.listen(3000);
Run Code Online (Sandbox Code Playgroud)

然后我的 TypeScript 配置:

tsconfig.json

{
    "compilerOptions": {
        // Output options
        "target": "es5",
        "lib": [
            "es2016"
        ],
        "module": "commonjs",
        "outDir": "./build",
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用 构建我的代码npx tsc,然后使用 运行它node ./build/index.js,在浏览器中访问http://localhost:3000时,我会看到消息“Hello, World”——到目前为止一切都很好

现在,npx tsc -w我可以观察这些文件,看看它们是否发生变化,并在发生这种情况时重新编译它们。该命令“永远”运行(直到停止),因此它阻止我node ./output/index.js在同一个终端中运行。使用多个终端窗口或终端多路复用器,我可以非常简单地运行node ./output/index.js,但如果重新编译我的代码,该文件将不会重新运行。这意味着,如果我将字符串“Hello, World”更改为“Hello, Steven”,我将不会看到更改,直到我手动停止服务器并重新启动它

有没有办法像这样观察我的 TypeScript 文件运行输出,以便在我的代码更改时停止并重新运行输出?

node.js typescript tsc

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

返回MySQL结果作为Perl中的哈希表

在Perl中,我正在进行类似于以下内容的SQL查询:

SELECT `id`, `title`, `price` FROM `gamelist`
Run Code Online (Sandbox Code Playgroud)

我想做的是获取此查询的结果并将其转储到哈希表中.我正在使用DBI,目前我只知道如何执行以下操作:

my %results;
my $count = 0;
while( @result = $statement->fetchrow() ){
    %results{'id'}[$count] = $result[0];
    %results{'title'}[$count] = $result[1];
    %results{'price'}[$count] = $result[2];
    $count++;
}
Run Code Online (Sandbox Code Playgroud)

但是,我不喜欢使用$result[0]和信任第一个字段将是ID.我宁愿有类似的东西:

my %results;
my $count = 0;
while( %result = $statement->fetchrow_as_hashtable() ){
    %results{'id'}[$count] = %result{'id'};
    %results{'title'}[$count] = %result{'title'};
    %results{'price'}[$count] = %result{'price'};
    $count++;
}
Run Code Online (Sandbox Code Playgroud)

我尝试在谷歌上四处寻找,但在DBI/Perl中找不到很多好的答案.我确实找到了一个提供此功能的开源类,但我觉得这应该可以在不使用别人的课程的情况下实现.

mysql perl hashtable

4
推荐指数
2
解决办法
8414
查看次数

在PHP中的子进程之间共享变量?

我确定我正在尝试的是非常简单的,但我以前从未完全使用多线程,所以我不知道从哪里开始.

我正在使用PCNTL创建一个多线程的PHP应用程序.我想要做的是同时运行3个函数,我希望它们的返回值合并为一个数组.所以逻辑上我需要在他们追加结果的所有子节点之间共享一些变量,或者只在一个子节点和父节点之间共享三个变量 - 然后父节点可以稍后合并结果.

问题是 - 我不知道该怎么做.首先想到的是使用共享内存,但我觉得应该有一个更简单的方法.

此外,如果它有任何影响,则分叉进程的函数是公共类方法.所以我的代码看起来如下所示:

<?php
    class multithreaded_search {
        /* ... */
        /* Constructors and such */
        /* ... */
        public function search( $string = '' ) {
            $search_types = array( 'tag', 'substring', 'levenshtein' );
            $pids = array();
            foreach( $search_types as $type ) {
                $pid = pcntl_fork();
                $pids[$pid] = $type;
                if( $pid == 0 ) { // child process
                    /* confusion */
                    $results = call_user_func( 'multithreaded_search::'.$type.'_search', $string );
                    /* What do we do …
Run Code Online (Sandbox Code Playgroud)

php multithreading shared-memory

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