小编Str*_*rae的帖子

什么时候优化真的值得花费在它上面的时间?

在我的上一个问题之后,我想了解何时优化确实值得开发人员花费时间.

是否值得花4个小时来查询速度提高20%?是的,不,也许,是的,如果......?

"浪费"7个小时将任务切换到另一种语言以节省大约40%的CPU使用量"值得"吗?

我对新项目的正常迭代是:

  1. 了解客户想要什么,以及他需要什么;
  2. 规划项目:什么语言和地点,数据库设计;
  3. 开发项目;
  4. 测试和错误修复;
  5. 对正在运行的项目和最终优化的最终分析;
  6. 如果项目需要,则进一步分析资源的实际使用情况,然后进一步优化;

隐含着"编写好的,可维护的代码".

显然,大的"优化"部分发生在第2点,但通常在项目结束后审查代码时,我发现一些部分,即使他们做得好,也可以改进.这是第5点的基本原理.

为了给出最后一点的具体示例,一个简单的例子是当我期望90%的查询SELECT和10%的查询时INSERT/UPDATE,所以我对带有索引的数据库表收费.但是在6个月之后,我发现在现实生活中有10%的SELECT查询和90%的INSERT/UPDATEs,所以查询速度没有得到优化.这是第一个出现在我脑海中的例子(显然,对于最初的错误设计而言,这不仅仅是优化的"补丁").

请注意,我是一名开发人员,而不是商人 - 但我希望尽可能让我的客户尽可能地保持良心.

我的意思是,我知道如果我失去了50个小时来获得应用程序总速度的5%,并且该应用程序被10个用户使用,那么它可能不值得花时间......但它是什么时候它是什么时候?

您认为优化何时至关重要?

你通常使用什么公式,意识到优化所花费的时间(以及最终的收益)并不总是可以在纸上量化?

编辑:对不起,但我不能接受像"直到人们不抱怨id,不需要优化"这样的答案; 它可以是一个商业视图(可疑,imho),但不是开发人员或(imho)一个良好的答案.我知道,这个问题确实很主观.

我同意Cheeso,性能优化应推迟,对项目的真实使用情况和负载一些分析,但small'n'quick优化可以立刻后项目结束来完成.

谢谢大家 ;)

optimization performance web-applications

9
推荐指数
3
解决办法
400
查看次数

如何防止用户使用jQuery更改页面

我有一个页面,其表单通过ajaxSubmit()提交(因此,不更改页面).

我的目标是,当用户尝试更改页面(甚至关闭浏览器)时,我问他是否真的想要退出页面而不发送表单(就像gmail一样).

例如,Gmail使用window.confirm-like弹出窗口执行此操作,但如果可行,我将使用自定义消息和选项来处理它.

jQuery有卸载事件:

$(window).unload( function () { alert("Bye now!"); } );
Run Code Online (Sandbox Code Playgroud)

但它允许我在退出页面之前做一些事情; 如果用户单击相对按钮,我需要"阻止"页面退出.

那么,如何处理(和取消)页面退出事件?

javascript jquery

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

使用python通过FTP下载大文件

我试图每天从我的服务器下载备份文件到我的本地存储服务器,但我遇到了一些问题.

我写了这段代码(删除了无用的部分,作为电子邮件功能):

import os
from time import strftime
from ftplib import FTP
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders

day = strftime("%d")
today = strftime("%d-%m-%Y")

link = FTP(ftphost)
link.login(passwd = ftp_pass, user = ftp_user)
link.cwd(file_path)
link.retrbinary('RETR ' + file_name, open('/var/backups/backup-%s.tgz' % today, 'wb').write)
link.delete(file_name) #delete the file from online server
link.close()
mail(user_mail, "Download database %s" % today, "Database sucessfully downloaded: %s" % file_name)
exit()
Run Code Online (Sandbox Code Playgroud)

我用crontab运行它,如:

40    23    *    * …
Run Code Online (Sandbox Code Playgroud)

python ftp file-transfer

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

如何防止我的服务器上的每个恶意文件上传?(检查文件类型)?

我的问题是避免用户在我的网络服务器上上传一些恶意文件.我正在研究linux环境(debian).

实际上上传是通过这段代码通过PHP处理的:

function checkFile($nomeFile, $myExt = false){
if($myExt != false){ $goodExt = "_$myExt"."_"; }else{ $goodExt = "_.jpg_.bmp_.zip_.pdf_.gif_.doc_.xls_.csv_.docx_.rar_"; }
$punto = strrpos($nomeFile, '.');
$ext = "_".substr($nomeFile, $punto, 8)."_";
if(stristr($goodExt, $ext)){ return 1; }else{ return 0; }
}
Run Code Online (Sandbox Code Playgroud)

在这里我可以指定允许上传的扩展名,如果文件不符合他们,我会在上传完成后立即删除.但这样一来,用户可以通过简单的重命名来自由更改文件扩展名......这对我不利; 即使file.exe(例如)如果在file.jpg中重命名也不会被执行(我是对吗?),我不希望在我的服务器上有潜在的危险文件.

有一种方法,在php,python或whatelse中,unix系统可以轻松运行,以检查文件的真正类型吗?

我已经尝试了python mimetypes模块,但它检索文件的ipotetical mime类型..基于扩展名-.-

php python security types file

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

wordpress.com和其他类似服务如何立即创建子域,即时可用?

我几乎了解子域和dns记录.我听说过他们,我只知道基本知识.

实际上,在我的服务器上,我确实在plesk下创建子域,然后联系我的主机以创建正确的DNS.在1-2天内,子域可以从任何地方到达(plesk可以自动管理dns,我知道,但是因为我不知道dns是如何工作的,我更愿意让我的主机处理它们)

但是..当你在wordpress.com,posterous.com等上注册时,他们会创建一个像http://yourname.service_name.com这样的子域名,它在几秒钟内准备好了......怎么样?

我知道这可能是一个难以回应的问题,因为我的无知我不知道如何更好地提出问题 - .-

哦,如果它可以帮助,我的环境必须是Linux(实际上是debian)

subdomain dns hosting

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

如何组织控制器以获得最佳结构(MVC)

什么是组织控制器的最佳方式.假设我有一个用户控制器和一个注册操作,我是否应该在我验证和处理数据的过程中执行process_registration操作,或者只是在注册操作本身内执行所有处理.我是否应对每个需要它的操作进行验证/处理操作(注册,进程注册等等)

我还注意到很多人都有模块和控制器,仅用于验证和处理信息,(我想将所有验证逻辑和规则保存在一个位置?)

我想我的问题是,事情需要分开多远?这个问题也适用于模型和视图.

php model-view-controller code-organization

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

Mysql:将日期从'dd/mm/yyyy'转换为'yyyymmdd'

我正在研究一个在varchar(10)mysql字段中存储日期的数据库(太可悲了).

我无法改变数据库结构(即构建一个小插件),但我必须查询数据库,查找此数据字段在接下来的10天之间的行.

例:

| fid | fdate      |
|  1  | 10/09/2010 |
|  2  | 17/09/2010 |
|  3  | 19/09/2010 |
Run Code Online (Sandbox Code Playgroud)

我必须得到fid 1和2的行,因为日期是<=现在+ 10天.

通常我做这种查询:

SELECT fid FROM table WHERE fdate <= DATE_ADD(NOW(), INTERVAL 10 DAY);
Run Code Online (Sandbox Code Playgroud)

或者,如果日期的格式为"yyyymmdd":

SELECT fid FROM table WHERE fdate <= DATE_FORMAT(NOW(), '%Y%m%d');
Run Code Online (Sandbox Code Playgroud)

但它们对格式没用dd/mm/yyyy.

我已经想通了

SELECT fid, CONCAT(SUBSTRING(fdate, 7, 4), SUBSTRING(fdate, 4, 2), SUBSTRING(fdate, 1, 2)) AS mydate FROM table HAVING mydate <= DATE_ADD(NOW(), INTERVAL 10 DAY);
Run Code Online (Sandbox Code Playgroud)

但我想用concat和substring重建日期格式有点过分,并且该having子句不会帮助查询速度.

任何的想法? …

mysql date

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

构建数据库以进行扩展就绪的最佳实践

我知道这是一个非常通用和主观的问题,所以如果它不符合StackOverflow网络礼节,请随意投票关闭它...但对我来说,值得尝试;)

我从来没有建立过高流量的应用程序,所以我不知道(除了网上的一些阅读)关于扩展实践.

如何设计一个数据库,当需要扩展时,我不必重构数据库结构或应用程序代码?

我知道开发(和优化)应该逐步进行,在发生时优化瓶颈,并且当你不知道你将拥有多少用户以及他们将如何使用时,几乎不可能设计出完美的结构.数据库(例如读/写比率),我只是想找个好的基础来开始.

没有什么方法让几乎可以与缩放结构的最佳实践partitioningsharding,什么hacks必须绝对避免?

编辑我的应用程序的一些细节:

  1. 该应用程序将作为多站点行为运行
  2. 我将为每个应用程序版本(db_0_0_1,db_0_0_2等等)提供数据库*
  3. 每个"站点"都将在数据库*中具有模式,并且该角色只能访问自己的模式
  4. 应用程序代码主要是PHP和Python中的一些东西(守护进程和维护东西)
  5. Web服务器可能是Nginx和lighttpd或node.js,作为长轮询任务的支持(例如聊天)
  6. 缓存将使用memcached(加上apc用于与php代码严格相关的内容,因为它可以在php外部使用)

database postgresql optimization scaling

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

@什么时候变得有用?

如您所知,@php istruction之前的字符会抑制每个最终警告,错误或通知被引发.

就个人而言,我不喜欢这个tecnique,因为我更喜欢处理这些错误,而在现实生活中,错误一定不会发生或必须进行管理.

顺便说一句,我发现这个tecnique应用于许多脚本(cms插件,开源类).

那么,@真的有用(在这种情况下,一个例子会受到赞赏),还是只适合懒惰的开发人员?

php error-handling

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

PHP-FPM 无法覆盖 error_reporting?

在过去的几个小时里,我有一个让我抓狂的问题:我无法覆盖error_reporting我的开发机器上指令的默认值(Debian 8 + php-fpm 5.6.29 + Nginx/1.6.2)

我正在使用的 php 软件包:

$ dpkg --get-selections | grep php
libapache2-mod-php5             install
php-console-table               install
php5                        install
php5-cli                    install
php5-common                 install
php5-curl                   install
php5-fpm                    install
php5-gd                     install
php5-intl                   install
php5-json                   install
php5-mcrypt                 install
php5-mysql                  install
php5-readline                   install
php5-xmlrpc                 install
php5-xsl                    install
Run Code Online (Sandbox Code Playgroud)

考虑以下极其简单的脚本:

<?php
$initial_value = error_reporting(); // Just read the current value

error_reporting(E_PARSE); // Lets set it to something else.

$update_value = error_reporting(); // Read again.

printf(
  "Initial value: %s\nFinal value: %s",
  $initial_value, …
Run Code Online (Sandbox Code Playgroud)

php php-5.6 fpm

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