在我的上一个问题之后,我想了解何时优化确实值得开发人员花费时间.
是否值得花4个小时来查询速度提高20%?是的,不,也许,是的,如果......?
"浪费"7个小时将任务切换到另一种语言以节省大约40%的CPU使用量"值得"吗?
我对新项目的正常迭代是:
隐含着"编写好的,可维护的代码".
显然,大的"优化"部分发生在第2点,但通常在项目结束后审查代码时,我发现一些部分,即使他们做得好,也可以改进.这是第5点的基本原理.
为了给出最后一点的具体示例,一个简单的例子是当我期望90%的查询SELECT和10%的查询时INSERT/UPDATE,所以我对带有索引的数据库表收费.但是在6个月之后,我发现在现实生活中有10%的SELECT查询和90%的INSERT/UPDATEs,所以查询速度没有得到优化.这是第一个出现在我脑海中的例子(显然,对于最初的错误设计而言,这不仅仅是优化的"补丁").
请注意,我是一名开发人员,而不是商人 - 但我希望尽可能让我的客户尽可能地保持良心.
我的意思是,我知道如果我失去了50个小时来获得应用程序总速度的5%,并且该应用程序被10个用户使用,那么它可能不值得花时间......但它是什么时候它是什么时候?
您认为优化何时至关重要?
你通常使用什么公式,意识到优化所花费的时间(以及最终的收益)并不总是可以在纸上量化?
编辑:对不起,但我不能接受像"直到人们不抱怨id,不需要优化"这样的答案; 它可以是一个商业视图(可疑,imho),但不是开发人员或(imho)一个良好的答案.我知道,这个问题确实很主观.
我同意Cheeso,性能优化应推迟,对项目的真实使用情况和负载一些分析,但small'n'quick优化可以立刻后项目结束来完成.
谢谢大家 ;)
我有一个页面,其表单通过ajaxSubmit()提交(因此,不更改页面).
我的目标是,当用户尝试更改页面(甚至关闭浏览器)时,我问他是否真的想要退出页面而不发送表单(就像gmail一样).
例如,Gmail使用window.confirm-like弹出窗口执行此操作,但如果可行,我将使用自定义消息和选项来处理它.
jQuery有卸载事件:
$(window).unload( function () { alert("Bye now!"); } );
Run Code Online (Sandbox Code Playgroud)
但它允许我在退出页面之前做一些事情; 如果用户单击相对按钮,我需要"阻止"页面退出.
那么,如何处理(和取消)页面退出事件?
我试图每天从我的服务器下载备份文件到我的本地存储服务器,但我遇到了一些问题.
我写了这段代码(删除了无用的部分,作为电子邮件功能):
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) 我的问题是避免用户在我的网络服务器上上传一些恶意文件.我正在研究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类型..基于扩展名-.-
我几乎了解子域和dns记录.我听说过他们,我只知道基本知识.
实际上,在我的服务器上,我确实在plesk下创建子域,然后联系我的主机以创建正确的DNS.在1-2天内,子域可以从任何地方到达(plesk可以自动管理dns,我知道,但是因为我不知道dns是如何工作的,我更愿意让我的主机处理它们)
但是..当你在wordpress.com,posterous.com等上注册时,他们会创建一个像http://yourname.service_name.com这样的子域名,它在几秒钟内准备好了......怎么样?
我知道这可能是一个难以回应的问题,因为我的无知我不知道如何更好地提出问题 - .-
哦,如果它可以帮助,我的环境必须是Linux(实际上是debian)
什么是组织控制器的最佳方式.假设我有一个用户控制器和一个注册操作,我是否应该在我验证和处理数据的过程中执行process_registration操作,或者只是在注册操作本身内执行所有处理.我是否应对每个需要它的操作进行验证/处理操作(注册,进程注册等等)
我还注意到很多人都有模块和控制器,仅用于验证和处理信息,(我想将所有验证逻辑和规则保存在一个位置?)
我想我的问题是,事情需要分开多远?这个问题也适用于模型和视图.
我正在研究一个在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子句不会帮助查询速度.
任何的想法? …
我知道这是一个非常通用和主观的问题,所以如果它不符合StackOverflow网络礼节,请随意投票关闭它...但对我来说,值得尝试;)
我从来没有建立过高流量的应用程序,所以我不知道(除了网上的一些阅读)关于扩展实践.
如何设计一个数据库,当需要扩展时,我不必重构数据库结构或应用程序代码?
我知道开发(和优化)应该逐步进行,在发生时优化瓶颈,并且当你不知道你将拥有多少用户以及他们将如何使用时,几乎不可能设计出完美的结构.数据库(例如读/写比率),我只是想找个好的基础来开始.
没有什么方法让几乎可以与缩放结构的最佳实践partitioning和sharding,什么hacks必须绝对避免?
编辑我的应用程序的一些细节:
如您所知,@php istruction之前的字符会抑制每个最终警告,错误或通知被引发.
就个人而言,我不喜欢这个tecnique,因为我更喜欢处理这些错误,而在现实生活中,错误一定不会发生或必须进行管理.
顺便说一句,我发现这个tecnique应用于许多脚本(cms插件,开源类).
那么,@真的有用(在这种情况下,一个例子会受到赞赏),还是只适合懒惰的开发人员?
在过去的几个小时里,我有一个让我抓狂的问题:我无法覆盖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 ×4
optimization ×2
python ×2
database ×1
date ×1
dns ×1
file ×1
fpm ×1
ftp ×1
hosting ×1
javascript ×1
jquery ×1
mysql ×1
performance ×1
php-5.6 ×1
postgresql ×1
scaling ×1
security ×1
subdomain ×1
types ×1